{
  "openapi": "3.0.3",
  "info": {
    "title": "Telco API Sandbox",
    "version": "1",
    "description": "TMF-compliant playground simulating PCM, CPQ, Payment, Customer, Inventory, Agreement and Service domains. Issue a token at /auth/token then exercise any endpoint with a Bearer header.\n\n### Getting started\n1. Click **Sign in as admin** in the bar above — it fetches a token and authorizes this console for you.\n2. Expand any operation and hit **Try it out**. Every parameter is prefilled with a working example, so **Execute** returns real data immediately.\n\nPrefer to do it by hand? `POST /auth/token` with `{ \"clientId\": \"developer\", \"clientSecret\": \"dev-sandbox-2026\" }`, then use **Authorize**.\n\n### Failure simulation\nSend the `X-Mock-Scenario` header on any request to force a failure path: `success` → 200, `not-found` → 404, `validation-error` → 400, `unauthorized` → 401, `forbidden` → 403, `conflict` → 409, `payment-declined` → 402, `insufficient-funds` → 422, `timeout` → 504, `server-error` → 500, `service-unavailable` → 503.\n\n### Fair use\n100 requests per minute per client. Responses carry `X-RateLimit-Limit` and `X-RateLimit-Remaining`.",
    "contact": {
      "email": "api@merrt.com.tr",
      "url": "https://merrt.com.tr"
    },
    "license": {
      "name": "Apache-2.0",
      "url": "https://www.apache.org/licenses/LICENSE-2.0"
    }
  },
  "servers": [
    {
      "url": "https://telco-mock-api.pages.dev",
      "description": "This deployment"
    }
  ],
  "tags": [
    {
      "name": "Authentication",
      "description": "Issue Bearer tokens for the sandbox"
    },
    {
      "name": "TMF620 Product Catalog",
      "description": "Catalogs, categories, offerings, specs, prices"
    },
    {
      "name": "TMF648 Quote",
      "description": "Quote calculation, validation and eligibility"
    },
    {
      "name": "TMF622 Product Order",
      "description": "Stateful order lifecycle: create → enrich → submit"
    },
    {
      "name": "TMF629 Customer",
      "description": "Customer records and contact media"
    },
    {
      "name": "TMF637 Product Inventory",
      "description": "Installed customer assets"
    },
    {
      "name": "TMF640 Service Inventory",
      "description": "Service instances and activation"
    },
    {
      "name": "TMF651 Agreement",
      "description": "Contract terms and agreement items"
    },
    {
      "name": "TMF666 Billing Account",
      "description": "Billing accounts"
    },
    {
      "name": "TMF678 Customer Bill",
      "description": "Issued bills"
    },
    {
      "name": "TMF676 Payment",
      "description": "Payments, refunds and recurring schedules"
    },
    {
      "name": "Secure Payments",
      "description": "3-D Secure sessions and SCA policy"
    },
    {
      "name": "Reference Data",
      "description": "Lookup tables"
    },
    {
      "name": "Engine Meta",
      "description": "Mock engine introspection"
    },
    {
      "name": "Engine Admin",
      "description": "Diagnostics — requires the ADMIN role"
    }
  ],
  "components": {
    "securitySchemes": {
      "BearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "description": "Paste the `access_token` from `POST /auth/token` (no `Bearer ` prefix)."
      }
    },
    "parameters": {
      "MockScenario": {
        "name": "X-Mock-Scenario",
        "in": "header",
        "required": false,
        "description": "Force a failure path without changing your client code. Leave blank for the normal response.",
        "schema": {
          "type": "string",
          "enum": [
            "success",
            "not-found",
            "validation-error",
            "unauthorized",
            "forbidden",
            "conflict",
            "payment-declined",
            "insufficient-funds",
            "timeout",
            "server-error",
            "service-unavailable"
          ]
        }
      },
      "RequestId": {
        "name": "X-Request-Id",
        "in": "header",
        "required": false,
        "description": "Client-supplied correlation id. Generated by the sandbox if omitted.",
        "schema": {
          "type": "string"
        }
      }
    }
  },
  "security": [
    {
      "BearerAuth": []
    }
  ],
  "paths": {
    "/auth/token": {
      "post": {
        "tags": [
          "Authentication"
        ],
        "summary": "Exchange client credentials for an access token",
        "description": "Submit a `clientId` + `clientSecret` pair; receive a signed HS256 JWT valid for 60 minutes.\n\n**Built-in demo clients**\n\n| clientId | clientSecret | roles |\n|---|---|---|\n| `developer` | `dev-sandbox-2026` | USER |\n| `demo` | `demo` | USER |\n| `admin` | `admin-sandbox-2026` | USER, ADMIN |\n\nField aliases `client_id` / `client_secret` are also accepted.",
        "security": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "clientId",
                  "clientSecret"
                ],
                "properties": {
                  "clientId": {
                    "type": "string",
                    "example": "admin"
                  },
                  "clientSecret": {
                    "type": "string",
                    "example": "admin-sandbox-2026"
                  },
                  "grantType": {
                    "type": "string",
                    "example": "client_credentials"
                  }
                }
              },
              "example": {
                "clientId": "admin",
                "clientSecret": "admin-sandbox-2026"
              },
              "examples": {
                "admin": {
                  "summary": "admin (USER, ADMIN) — unlocks /_meta/admin/* as well",
                  "value": {
                    "clientId": "admin",
                    "clientSecret": "admin-sandbox-2026"
                  }
                },
                "developer": {
                  "summary": "developer (USER) — recommended for the TMF endpoints",
                  "value": {
                    "clientId": "developer",
                    "clientSecret": "dev-sandbox-2026"
                  }
                },
                "demo": {
                  "summary": "demo (USER) — simplest credentials for live demos",
                  "value": {
                    "clientId": "demo",
                    "clientSecret": "demo"
                  }
                },
                "oauthAlias": {
                  "summary": "OAuth2 alias style",
                  "value": {
                    "client_id": "developer",
                    "client_secret": "dev-sandbox-2026",
                    "grant_type": "client_credentials"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Signed JWT plus its metadata",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ]
      }
    },
    "/tmf-api/productCatalogManagement/v4/catalog": {
      "get": {
        "tags": [
          "TMF620 Product Catalog"
        ],
        "summary": "List catalogs",
        "description": "**Business Use Case**: the full set of product catalogs; front-office portals call this first to render the catalog selector.\n\n**Dynamic Behavior**: `lastUpdate` is regenerated on every call. Both filters are optional and case-insensitive — leave them blank to get everything.",
        "parameters": [
          {
            "name": "lifecycleStatus",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "ACTIVE",
                "LAUNCHED",
                "RETIRED"
              ]
            },
            "description": "Filter by lifecycle status",
            "example": "ACTIVE"
          },
          {
            "name": "catalogType",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "Product",
                "Service"
              ]
            },
            "description": "Filter by catalog type",
            "example": "Product"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Filtered catalog list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/productCatalogManagement/v4/catalog/{id}": {
      "get": {
        "tags": [
          "TMF620 Product Catalog"
        ],
        "summary": "Retrieve a catalog by id",
        "description": "**Business Use Case**: catalog detail page, with categories embedded as `CategoryRef[]`.\n\n**Dynamic Behavior**: 404 when the id is unknown; `lastUpdate` freshly generated.\n\n**Try**: `catalog-001`, `catalog-002` or `catalog-003` — call `GET /catalog` for the full list.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Catalog id from `GET /catalog`",
            "example": "catalog-001"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Catalog",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/productCatalogManagement/v4/category": {
      "get": {
        "tags": [
          "TMF620 Product Catalog"
        ],
        "summary": "List categories",
        "description": "**Business Use Case**: hierarchical category list driving the catalog navigator.\n\n**Dynamic Behavior**: filters on `lifecycleStatus` and `parentId`.",
        "parameters": [
          {
            "name": "lifecycleStatus",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "ACTIVE",
                "LAUNCHED",
                "RETIRED"
              ]
            },
            "description": "Filter by lifecycle status",
            "example": "ACTIVE"
          },
          {
            "name": "parentId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Only categories under this parent",
            "example": "category-postpaid"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Filtered category list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/productCatalogManagement/v4/category/{id}": {
      "get": {
        "tags": [
          "TMF620 Product Catalog"
        ],
        "summary": "Retrieve a category by id",
        "description": "**Business Use Case**: drill-down navigation, including child `productOffering[]` references.\n\n**Try**: `category-postpaid`, `category-prepaid`, `category-fibre`, `category-enterprise-mobile`.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Category id from `GET /category`",
            "example": "category-postpaid"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Category",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/productCatalogManagement/v4/productOffering": {
      "get": {
        "tags": [
          "TMF620 Product Catalog"
        ],
        "summary": "List product offerings",
        "description": "**Business Use Case**: the hot endpoint for self-care, e-commerce and CRM — every sellable offering with its category, price and specification references.\n\n**Dynamic Behavior**: the collection is synthesised per call (10–20 entries), so no two requests return an identical list.",
        "parameters": [
          {
            "name": "lifecycleStatus",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "Active",
                "Retired"
              ]
            },
            "description": "Filter by lifecycle status",
            "example": "Active"
          },
          {
            "name": "category.id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Only offerings in this category",
            "example": "category-postpaid"
          },
          {
            "name": "marketSegment.id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "segment-consumer",
                "segment-smb",
                "segment-enterprise"
              ]
            },
            "description": "Only offerings for this segment",
            "example": "segment-consumer"
          },
          {
            "name": "isBundle",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Bundle offerings only",
            "example": true
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Filtered offering list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/productCatalogManagement/v4/productOffering/{id}": {
      "get": {
        "tags": [
          "TMF620 Product Catalog"
        ],
        "summary": "Retrieve a product offering by id",
        "description": "**Business Use Case**: product detail page and the entry point for the CPQ flow.\n\n**Try any of these** — they are the priced offerings the quote calculator resolves:\n\n| id | name | price |\n|---|---|---|\n| `offer-infinity-fiber` | Infinity Fiber Bundle | 899.90 recurring |\n| `offer-standard-mobile` | Standard Mobile Plan | 299.00 recurring |\n| `offer-pro-mobile` | Pro Mobile Plan 100GB | 549.90 recurring |\n| `offer-flex-prepaid` | Flex Prepaid 10GB | 149.00 one-time |\n| `offer-traveler-roaming` | Traveler Roaming Pack | 399.00 one-time |\n| `offer-home-essentials` | Home Essentials 100Mbps | 379.00 recurring |\n| `offer-enterprise-pool` | Enterprise Data Pool 500GB | 4990.00 recurring |",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Product offering id",
            "example": "offer-infinity-fiber"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "ProductOffering",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/productCatalogManagement/v4/productSpecification": {
      "get": {
        "tags": [
          "TMF620 Product Catalog"
        ],
        "summary": "List product specifications",
        "description": "**Business Use Case**: the technical blueprints behind each commercial offering — characteristics, value types and allowed values.",
        "parameters": [
          {
            "name": "lifecycleStatus",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "Active",
                "Retired"
              ]
            },
            "description": "Filter by lifecycle status",
            "example": "Active"
          },
          {
            "name": "brand",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filter by brand",
            "example": "Generic"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Filtered specification list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/productCatalogManagement/v4/productSpecification/{id}": {
      "get": {
        "tags": [
          "TMF620 Product Catalog"
        ],
        "summary": "Retrieve a product specification by id",
        "description": "**Business Use Case**: full specification document including every configurable `productSpecCharacteristic[]`.\n\n**Try**: `spec-fiber-1g`, `spec-mobile-postpaid`, `spec-mobile-prepaid`, `spec-enterprise-pool`.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Specification id",
            "example": "spec-fiber-1g"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "ProductSpecification",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/productCatalogManagement/v4/productOfferingPrice": {
      "get": {
        "tags": [
          "TMF620 Product Catalog"
        ],
        "summary": "List product offering prices",
        "description": "**Business Use Case**: the price catalogue — the CPQ calculator's source of truth for unit prices.",
        "parameters": [
          {
            "name": "lifecycleStatus",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "Active",
                "Retired"
              ]
            },
            "description": "Filter by lifecycle status",
            "example": "Active"
          },
          {
            "name": "priceType",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "recurring",
                "oneTime",
                "usage"
              ]
            },
            "description": "Filter by charge type",
            "example": "recurring"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Filtered price list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/productCatalogManagement/v4/productOfferingPrice/{id}": {
      "get": {
        "tags": [
          "TMF620 Product Catalog"
        ],
        "summary": "Retrieve a product offering price by id",
        "description": "**Business Use Case**: single price record (Money + recurring period), fetched while calculating order totals.\n\n**Try**: `price-infinity-fiber-recurring`, `price-pro-mobile-recurring`, `price-flex-prepaid-onetime`.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Price id",
            "example": "price-infinity-fiber-recurring"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "ProductOfferingPrice",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/quoteManagement/v4/quote/calculate": {
      "post": {
        "tags": [
          "TMF648 Quote"
        ],
        "summary": "Calculate a quote (dynamic pricing)",
        "description": "The hot path of any CPQ flow — submit offerings and quantities, get a fully-priced TMF648 Quote back with line totals, VAT and a grand total.\n\n**Dynamic behaviour**\n- Each line's unit price is looked up from the PCM catalog by `productOfferingId`; `overrideUnitPrice` wins when set.\n- `lineTotal = quantity × unitPrice × (1 - discountPercentage/100)`.\n- 20% VAT applied to recurring and one-time subtotals separately.\n- `customerId`, `customerName`, `channel` and `marketSegment` are mirrored into the response; `id` and `quoteDate` are generated.\n\nThe prefilled example returns a recurring grand total of **1079.88 TRY**. The arithmetic is deterministic — two identical requests produce identical totals.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "customerId": "cust-1001",
                "customerName": "Demo Customer One",
                "channel": "channel-online",
                "marketSegment": "segment-consumer",
                "currency": "TRY",
                "quoteItem": [
                  {
                    "productOfferingId": "offer-infinity-fiber",
                    "quantity": 1,
                    "action": "add"
                  }
                ]
              },
              "examples": {
                "singleLine": {
                  "summary": "1 × Infinity Fiber — single recurring line (total 1079.88 TRY)",
                  "value": {
                    "customerId": "cust-1001",
                    "customerName": "Demo Customer One",
                    "channel": "channel-online",
                    "marketSegment": "segment-consumer",
                    "currency": "TRY",
                    "quoteItem": [
                      {
                        "productOfferingId": "offer-infinity-fiber",
                        "quantity": 1,
                        "action": "add"
                      }
                    ]
                  }
                },
                "withDiscount": {
                  "summary": "Fiber + 2 × Pro Mobile with a 10% line discount (total 2267.66 TRY)",
                  "value": {
                    "customerId": "cust-1001",
                    "customerName": "Demo Customer One",
                    "currency": "TRY",
                    "quoteItem": [
                      {
                        "productOfferingId": "offer-infinity-fiber",
                        "quantity": 1
                      },
                      {
                        "productOfferingId": "offer-pro-mobile",
                        "quantity": 2,
                        "discountPercentage": 10
                      }
                    ]
                  }
                },
                "enterprise": {
                  "summary": "Enterprise data pool (4990.00 recurring)",
                  "value": {
                    "customerId": "cust-2050",
                    "customerName": "Demo Enterprise B.V.",
                    "channel": "channel-b2b",
                    "marketSegment": "segment-enterprise",
                    "currency": "TRY",
                    "quoteItem": [
                      {
                        "productOfferingId": "offer-enterprise-pool",
                        "quantity": 1
                      }
                    ]
                  }
                },
                "oneTime": {
                  "summary": "One-time prepaid top-up — separate one-time totals",
                  "value": {
                    "customerId": "cust-1077",
                    "customerName": "Demo Customer Two",
                    "currency": "TRY",
                    "quoteItem": [
                      {
                        "productOfferingId": "offer-flex-prepaid",
                        "quantity": 3
                      }
                    ]
                  }
                },
                "overridePrice": {
                  "summary": "Negotiated price — overrideUnitPrice beats the catalogue",
                  "value": {
                    "customerId": "cust-1001",
                    "currency": "TRY",
                    "quoteItem": [
                      {
                        "productOfferingId": "offer-infinity-fiber",
                        "quantity": 2,
                        "overrideUnitPrice": 750,
                        "discountPercentage": 5
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Priced quote with `quoteItem[]` and `quoteTotalPrice[]`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ]
      }
    },
    "/tmf-api/quoteManagement/v4/quote/validate": {
      "post": {
        "tags": [
          "TMF648 Quote"
        ],
        "summary": "Validate a quote",
        "description": "**Business Use Case**: light pre-submit validation — mandatory fields present, every line has an offering id and a positive quantity.\n\n**Dynamic Behavior**: returns `valid: true`, or `valid: false` with a populated `issues[]` array. Unlike the other endpoints this never returns 400 — reporting the problems *is* the job.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "customerId": "cust-1001",
                "quoteItem": [
                  {
                    "productOfferingId": "offer-infinity-fiber",
                    "quantity": 1
                  }
                ]
              },
              "examples": {
                "valid": {
                  "summary": "Well-formed quote → valid: true",
                  "value": {
                    "customerId": "cust-1001",
                    "quoteItem": [
                      {
                        "productOfferingId": "offer-infinity-fiber",
                        "quantity": 1
                      }
                    ]
                  }
                },
                "invalid": {
                  "summary": "Missing customer and a zero quantity → issues[]",
                  "value": {
                    "quoteItem": [
                      {
                        "quantity": 0
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Validation verdict",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ]
      }
    },
    "/tmf-api/quoteManagement/v4/quote/eligibility": {
      "post": {
        "tags": [
          "TMF648 Quote"
        ],
        "summary": "Evaluate quote eligibility",
        "description": "Pre-quote feasibility check — given a customer profile and candidate offerings, returns per-offering eligibility with a coded reason.\n\n**Rule chain (per offering, first match wins)**\n- `customerAge < 18` → blocked, code `AGE-RESTRICTION`\n- `customerStatus = CHURNED` → blocked, code `CUSTOMER-CHURNED`\n- `documentAttached = false` → blocked, code `DOCUMENT-MISSING`\n- otherwise → eligible, code `ELIGIBLE`",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "customerId": "cust-1001",
                "customerName": "Demo Customer One",
                "customerAge": 35,
                "customerStatus": "ACTIVE",
                "documentAttached": true,
                "country": "TR",
                "productOfferingIds": [
                  "offer-infinity-fiber",
                  "offer-pro-mobile"
                ]
              },
              "examples": {
                "eligible": {
                  "summary": "Eligible adult — all rules pass",
                  "value": {
                    "customerId": "cust-1001",
                    "customerName": "Demo Customer One",
                    "customerAge": 35,
                    "customerStatus": "ACTIVE",
                    "documentAttached": true,
                    "country": "TR",
                    "productOfferingIds": [
                      "offer-infinity-fiber",
                      "offer-pro-mobile"
                    ]
                  }
                },
                "minor": {
                  "summary": "Minor → AGE-RESTRICTION",
                  "value": {
                    "customerId": "cust-minor-001",
                    "customerAge": 16,
                    "documentAttached": true,
                    "productOfferingIds": [
                      "offer-pro-mobile"
                    ]
                  }
                },
                "missingDocument": {
                  "summary": "Missing document → DOCUMENT-MISSING",
                  "value": {
                    "customerId": "cust-1077",
                    "customerAge": 28,
                    "documentAttached": false,
                    "productOfferingIds": [
                      "offer-enterprise-pool"
                    ]
                  }
                },
                "churned": {
                  "summary": "Churned customer → CUSTOMER-CHURNED",
                  "value": {
                    "customerId": "cust-9501",
                    "customerAge": 40,
                    "customerStatus": "CHURNED",
                    "documentAttached": true,
                    "productOfferingIds": [
                      "offer-standard-mobile"
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Per-offering eligibility verdicts",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ]
      }
    },
    "/tmf-api/quoteManagement/v4/quote": {
      "get": {
        "tags": [
          "TMF648 Quote"
        ],
        "summary": "List quotes",
        "description": "**Business Use Case**: quote history in the agent desktop.\n\n**Dynamic Behavior**: the collection is synthesised per call. Filters are optional — leave them blank to see everything.",
        "parameters": [
          {
            "name": "state",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "inProgress",
                "approved",
                "pending",
                "accepted",
                "rejected",
                "cancelled",
                "expired"
              ]
            },
            "description": "Filter by quote state",
            "example": "inProgress"
          },
          {
            "name": "customerId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Matched against `relatedParty[role=Customer]`",
            "example": "cust-1001"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Filtered quote list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "TMF648 Quote"
        ],
        "summary": "Create a draft quote",
        "description": "**Business Use Case**: save a quote for follow-up while the customer decides. Same computation as `/quote/calculate`, but the response state is `inProgress`.",
        "requestBody": {
          "required": true,
          "description": "Request payload",
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "customerId": "cust-1001",
                "customerName": "Demo Customer One",
                "currency": "TRY",
                "quoteItem": [
                  {
                    "productOfferingId": "offer-infinity-fiber",
                    "quantity": 1
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created quote, with a `Location` header",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ]
      }
    },
    "/tmf-api/quoteManagement/v4/quote/{id}": {
      "get": {
        "tags": [
          "TMF648 Quote"
        ],
        "summary": "Retrieve a quote by id",
        "description": "Quotes are synthesised per call, so the id you ask for is stamped onto the returned record — any plausible quote id resolves.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Quote id — any plausible value resolves",
            "example": "quote-1001"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Quote",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/quoteManagement/v4/quote/{id}/accept": {
      "post": {
        "tags": [
          "TMF648 Quote"
        ],
        "summary": "Accept a quote",
        "description": "**Business Use Case**: customer-side acceptance. Transitions to `accepted` and records the reason on `stateReason`.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Quote id",
            "example": "quote-1001"
          },
          {
            "name": "reason",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Free-text acceptance reason",
            "example": "Customer accepted on the call"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Accepted quote",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/quoteManagement/v4/quote/{id}/reject": {
      "post": {
        "tags": [
          "TMF648 Quote"
        ],
        "summary": "Reject a quote",
        "description": "**Business Use Case**: customer-side rejection or agent-side withdrawal.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Quote id",
            "example": "quote-1001"
          },
          {
            "name": "reason",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Free-text rejection reason",
            "example": "Price too high"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Rejected quote",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/quoteManagement/v4/quote/{id}/state": {
      "patch": {
        "tags": [
          "TMF648 Quote"
        ],
        "summary": "Move a quote through the TMF648 state machine",
        "description": "**Dynamic Behavior**: the target state is validated against the canonical set; unknown values return 400 with a TMF body.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Quote id",
            "example": "quote-1001"
          },
          {
            "name": "state",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "inProgress",
                "approved",
                "pending",
                "accepted",
                "rejected",
                "cancelled",
                "expired"
              ]
            },
            "description": "Target state",
            "example": "approved"
          },
          {
            "name": "reason",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Free-text transition reason",
            "example": "Approved by sales manager"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Updated quote",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/productOrderingManagement/v4/productOrder": {
      "post": {
        "tags": [
          "TMF622 Product Order"
        ],
        "summary": "Initialise a product order",
        "description": "First step of the stateful lifecycle **create → enrich → submit**. Each step returns a deeper, more populated order.\n\n**Dynamic Behavior**\n- Every line is expanded into a full `productOrderItem` with `product.productCharacteristic[]` drawn from the PCM specification corpus.\n- Layered pricing: duty-free amount, VAT (20%) and — on mobile lines — SCT (10%), rolled into recurring and one-time grand totals.\n- `fulfillmentExecutionDetail.executionMilestone[]` is generated with scheduled dates.\n- Notes and external system references (CRM / ERP / Billing / Finance) are synthesised.\n\nCopy the `id` from the response into the enrich and submit operations below.",
        "requestBody": {
          "required": true,
          "description": "Request payload",
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "customerId": "cust-1001",
                "customerName": "Demo Customer One",
                "channel": "channel-online",
                "billingAccountId": "bill-acct-1001",
                "productOrderItem": [
                  {
                    "productOfferingId": "offer-infinity-fiber",
                    "quantity": 1,
                    "action": "add"
                  },
                  {
                    "productOfferingId": "offer-pro-mobile",
                    "quantity": 2,
                    "discountPercentage": 10
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Initialised order, with a `Location` header",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ]
      },
      "get": {
        "tags": [
          "TMF622 Product Order"
        ],
        "summary": "List product orders",
        "parameters": [
          {
            "name": "state",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "acknowledged",
                "rejected",
                "pending",
                "held",
                "inProgress",
                "cancelled",
                "completed",
                "failed",
                "partial",
                "assessingCancellation",
                "pendingCancellation"
              ]
            },
            "description": "Filter by TMF622 state",
            "example": "acknowledged"
          },
          {
            "name": "customerId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Matched against `relatedParty[role=Customer]`",
            "example": "cust-1001"
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filter by order category",
            "example": "B2C"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Filtered order list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/productOrderingManagement/v4/productOrder/search": {
      "post": {
        "tags": [
          "TMF622 Product Order"
        ],
        "summary": "Search orders by criteria",
        "description": "**Business Use Case**: back-office search combining state, customer, category and an order-date range. The corpus holds orders dated April–May 2026.",
        "requestBody": {
          "required": true,
          "description": "Request payload",
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "state": "acknowledged",
                "fromDate": "2026-01-01",
                "toDate": "2026-12-31"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Matching orders",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ]
      }
    },
    "/tmf-api/productOrderingManagement/v4/productOrder/abandoned": {
      "get": {
        "tags": [
          "TMF622 Product Order"
        ],
        "summary": "List abandoned orders",
        "description": "**Business Use Case**: retention campaigns — orders still sitting in `acknowledged` within the given window.",
        "parameters": [
          {
            "name": "fromDate",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Window start (ISO date)",
            "example": "2026-01-01"
          },
          {
            "name": "toDate",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Window end (ISO date)",
            "example": "2026-12-31"
          },
          {
            "name": "channel",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Sales channel id or name",
            "example": "channel-online"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Abandoned orders",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/productOrderingManagement/v4/productOrder/{id}": {
      "get": {
        "tags": [
          "TMF622 Product Order"
        ],
        "summary": "Retrieve a product order by id",
        "description": "Returns an order created earlier in this session, falling back to the corpus.\n\n**Try**: `order-2026-0001` (completed), `order-2026-0002` (inProgress), `order-2026-0003` (acknowledged).",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Order id from `GET /productOrder`, or one you just created",
            "example": "order-2026-0001"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "ProductOrder",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "TMF622 Product Order"
        ],
        "summary": "Enrich an order",
        "description": "Second lifecycle step. Merges related parties by role, replaces places, rebuilds order items through the pricing aggregator, appends notes and attachments, and validates any state transition against the TMF622 machine.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Order id",
            "example": "order-2026-0001"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "requestBody": {
          "required": true,
          "description": "Request payload",
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "description": "Fiber + mobile bundle for the Ankara branch",
                "priority": "2",
                "relatedParty": [
                  {
                    "id": "cust-1001",
                    "name": "Demo Customer One",
                    "role": "Customer"
                  }
                ],
                "note": [
                  {
                    "author": "agent",
                    "text": "Customer requested a weekend installation slot."
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Enriched order",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/productOrderingManagement/v4/productOrder/{id}/submit": {
      "post": {
        "tags": [
          "TMF622 Product Order"
        ],
        "summary": "Submit an order for fulfilment",
        "description": "Final lifecycle step. Moves the order and every line to `inProgress`, advances the fulfilment milestones, and attaches the confirmation document pack.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Order id",
            "example": "order-2026-0001"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Submitted order",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/productOrderingManagement/v4/productOrder/{id}/cancel": {
      "post": {
        "tags": [
          "TMF622 Product Order"
        ],
        "summary": "Cancel an order",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Order id",
            "example": "order-2026-0001"
          },
          {
            "name": "reason",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Cancellation reason",
            "example": "Customer changed their mind"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Cancelled order",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/productOrderingManagement/v4/productOrder/{id}/customer": {
      "patch": {
        "tags": [
          "TMF622 Product Order"
        ],
        "summary": "Assign a customer to an order",
        "description": "Replaces the `relatedParty[role=Customer]` entry, or appends one when the order has none.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Order id",
            "example": "order-2026-0001"
          },
          {
            "name": "customerId",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Customer id to attach",
            "example": "cust-1001"
          },
          {
            "name": "customerName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Display name",
            "example": "Demo Customer One"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Updated order",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/productOrderingManagement/v4/productOrder/{id}/shipment": {
      "patch": {
        "tags": [
          "TMF622 Product Order"
        ],
        "summary": "Update the shipment address",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Order id",
            "example": "order-2026-0001"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "requestBody": {
          "required": true,
          "description": "Request payload",
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "street": "Atatürk Bulvarı 100",
                "city": "Ankara",
                "postcode": "06420",
                "country": "TR"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Updated order",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/customerManagement/v4/customer": {
      "post": {
        "tags": [
          "TMF629 Customer"
        ],
        "summary": "Create a customer",
        "description": "**Dynamic Behavior**: `name`, `email`, `phoneNumber`, `segment` and `country` are mirrored into the TMF629 response; `id`, `href` and `validFor` are generated.",
        "requestBody": {
          "required": true,
          "description": "Request payload",
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "name": "Demo Customer One",
                "partyType": "individual",
                "firstName": "Demo",
                "lastName": "One",
                "email": "demo.one@example.invalid",
                "phoneNumber": "+90 555 000 0000",
                "segment": "segment-consumer",
                "country": "TR"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created customer",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ]
      },
      "get": {
        "tags": [
          "TMF629 Customer"
        ],
        "summary": "List customers",
        "description": "**Dynamic Behavior**: the collection is synthesised per call. `search` matches name or email substrings.",
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "active",
                "inactive",
                "CHURNED"
              ]
            },
            "description": "Filter by status",
            "example": "active"
          },
          {
            "name": "segment",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "segment-consumer",
                "segment-smb",
                "segment-enterprise"
              ]
            },
            "description": "Filter by market segment",
            "example": "segment-consumer"
          },
          {
            "name": "country",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "TR",
                "DE",
                "GB",
                "NL"
              ]
            },
            "description": "ISO country code",
            "example": "TR"
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Name or email substring",
            "example": "Demo"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Filtered customer list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/customerManagement/v4/customer/byContactMedium": {
      "get": {
        "tags": [
          "TMF629 Customer"
        ],
        "summary": "Find customers by contact medium",
        "description": "Reverse lookup by exact email or phone. Generated customers use `<customerId>@example.invalid` addresses.",
        "parameters": [
          {
            "name": "email",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Exact email address",
            "example": "cust-1001@example.invalid"
          },
          {
            "name": "phone",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Exact phone number",
            "example": "+90 555 000 0000"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Matching customers",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/customerManagement/v4/customer/{id}": {
      "get": {
        "tags": [
          "TMF629 Customer"
        ],
        "summary": "Retrieve a customer by id",
        "description": "Customers are synthesised per call, so the id you ask for is stamped onto the returned record — any plausible customer id resolves.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Customer id — any plausible value resolves",
            "example": "cust-1001"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Customer",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "TMF629 Customer"
        ],
        "summary": "Patch a customer",
        "description": "Supplied fields are merged onto the record and `lastUpdate` is refreshed.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Customer id",
            "example": "cust-1001"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "requestBody": {
          "required": true,
          "description": "Request payload",
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "status": "active",
                "segment": "segment-enterprise"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Updated customer",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "TMF629 Customer"
        ],
        "summary": "Delete (churn) a customer",
        "description": "Soft delete — the customer comes back marked `CHURNED` with a `deletedDate`, mirroring how real BSS systems retain the record.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Customer id",
            "example": "cust-1001"
          },
          {
            "name": "reason",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Deletion reason",
            "example": "Moved to another operator"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Churned customer",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/customerManagement/v4/customer/{id}/contactMedium": {
      "post": {
        "tags": [
          "TMF629 Customer"
        ],
        "summary": "Add a contact medium",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Customer id",
            "example": "cust-1001"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "requestBody": {
          "required": true,
          "description": "Request payload",
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "mediumType": "email",
                "preferred": true,
                "characteristic": {
                  "emailAddress": "new.address@example.invalid"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Updated customer",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/productInventory/v4/product": {
      "get": {
        "tags": [
          "TMF637 Product Inventory"
        ],
        "summary": "List installed products",
        "description": "**Business Use Case**: the customer's active assets. Mobile assets carry an `msisdn` characteristic.",
        "parameters": [
          {
            "name": "customerId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Matched against `relatedParty[role=Customer]`",
            "example": "cust-1001"
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "created",
                "pendingActive",
                "active",
                "suspended",
                "aborted",
                "terminated",
                "pendingTerminate",
                "cancelled"
              ]
            },
            "description": "Filter by asset status",
            "example": "active"
          },
          {
            "name": "productOffering.id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Only assets for this offering",
            "example": "offer-infinity-fiber"
          },
          {
            "name": "isBundle",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Bundle assets only",
            "example": false
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Filtered asset list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "TMF637 Product Inventory"
        ],
        "summary": "Provision a product",
        "description": "**Dynamic Behavior**: generates the asset id and derives `productSerialNumber` from it.",
        "requestBody": {
          "required": true,
          "description": "Request payload",
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "customerId": "cust-1001",
                "productOfferingId": "offer-infinity-fiber",
                "billingAccountId": "bill-acct-1001"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Provisioned asset",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ]
      }
    },
    "/tmf-api/productInventory/v4/product/byCharacteristic": {
      "get": {
        "tags": [
          "TMF637 Product Inventory"
        ],
        "summary": "Find assets by characteristic",
        "description": "**Business Use Case**: reverse lookup — find the asset behind an MSISDN or a serial number. Generated mobile assets carry an `msisdn` characteristic; omit `value` to match any.",
        "parameters": [
          {
            "name": "name",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "msisdn"
              ]
            },
            "description": "Characteristic name",
            "example": "msisdn"
          },
          {
            "name": "value",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Exact value; omit to match any asset carrying the characteristic",
            "example": "+90 555 123 4567"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Matching assets",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/productInventory/v4/product/byBillingAccount/{billingAccountId}": {
      "get": {
        "tags": [
          "TMF637 Product Inventory"
        ],
        "summary": "List assets on a billing account",
        "parameters": [
          {
            "name": "billingAccountId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Billing account id",
            "example": "bill-acct-1001"
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "created",
                "pendingActive",
                "active",
                "suspended",
                "aborted",
                "terminated",
                "pendingTerminate",
                "cancelled"
              ]
            },
            "description": "Filter by asset status",
            "example": "active"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Assets on the account",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/productInventory/v4/product/{id}": {
      "get": {
        "tags": [
          "TMF637 Product Inventory"
        ],
        "summary": "Retrieve an asset by id",
        "description": "Assets are synthesised per call, so the id you ask for is stamped onto the returned record — any plausible asset id resolves.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Asset id — any plausible value resolves",
            "example": "prod-asset-1001"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Product",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "TMF637 Product Inventory"
        ],
        "summary": "Terminate an asset",
        "description": "Soft delete — the asset returns with status `terminated` and a `terminationDate`.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Asset id",
            "example": "prod-asset-1001"
          },
          {
            "name": "reason",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Termination reason",
            "example": "Contract ended"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Terminated asset",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/productInventory/v4/product/{id}/status": {
      "patch": {
        "tags": [
          "TMF637 Product Inventory"
        ],
        "summary": "Change an asset's status",
        "description": "**Dynamic Behavior**: the target is validated against the canonical TMF637 set. Suspension and termination stamp their own dates.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Asset id",
            "example": "prod-asset-1001"
          },
          {
            "name": "status",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "created",
                "pendingActive",
                "active",
                "suspended",
                "aborted",
                "terminated",
                "pendingTerminate",
                "cancelled"
              ]
            },
            "description": "Target status",
            "example": "suspended"
          },
          {
            "name": "reason",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Transition reason",
            "example": "Non-payment"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Updated asset",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/productInventory/v4/product/{id}/characteristic": {
      "patch": {
        "tags": [
          "TMF637 Product Inventory"
        ],
        "summary": "Upsert asset characteristics",
        "description": "Characteristics matching an existing `name` are replaced; the rest are appended.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Asset id",
            "example": "prod-asset-1001"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "requestBody": {
          "required": true,
          "description": "Array of characteristics to upsert",
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "object"
                }
              },
              "example": [
                {
                  "name": "msisdn",
                  "value": "+90 555 111 2233",
                  "valueType": "String"
                }
              ]
            }
          }
        },
        "responses": {
          "200": {
            "description": "Updated asset",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/serviceInventoryManagement/v4/service": {
      "get": {
        "tags": [
          "TMF640 Service Inventory"
        ],
        "summary": "List services",
        "parameters": [
          {
            "name": "customerId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Matched against `relatedParty[role=Customer]`",
            "example": "cust-1001"
          },
          {
            "name": "state",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "feasibilityChecked",
                "designed",
                "reserved",
                "inactive",
                "active",
                "terminated"
              ]
            },
            "description": "Filter by service state",
            "example": "active"
          },
          {
            "name": "serviceType",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filter by service type",
            "example": "fiber"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Filtered service list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/serviceInventoryManagement/v4/service/{id}": {
      "get": {
        "tags": [
          "TMF640 Service Inventory"
        ],
        "summary": "Retrieve a service by id",
        "description": "**Try**: `svc-fiber-9001`, `svc-mobile-9002`, `svc-enterprise-9003`, `svc-mobile-9004`.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Service id from `GET /service`",
            "example": "svc-fiber-9001"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Service",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/serviceInventoryManagement/v4/service/{id}/activate": {
      "post": {
        "tags": [
          "TMF640 Service Inventory"
        ],
        "summary": "Activate a service",
        "description": "Moves the service to `active` and sets `isServiceEnabled: true`.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Service id",
            "example": "svc-fiber-9001"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Activated service",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/serviceInventoryManagement/v4/service/{id}/deactivate": {
      "post": {
        "tags": [
          "TMF640 Service Inventory"
        ],
        "summary": "Deactivate a service",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Service id",
            "example": "svc-fiber-9001"
          },
          {
            "name": "reason",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Deactivation reason",
            "example": "Customer request"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Deactivated service",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/serviceInventoryManagement/v4/service/{id}/state": {
      "patch": {
        "tags": [
          "TMF640 Service Inventory"
        ],
        "summary": "Move a service through the TMF640 state machine",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Service id",
            "example": "svc-fiber-9001"
          },
          {
            "name": "state",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "feasibilityChecked",
                "designed",
                "reserved",
                "inactive",
                "active",
                "terminated"
              ]
            },
            "description": "Target state",
            "example": "reserved"
          },
          {
            "name": "reason",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Transition reason",
            "example": "Awaiting field installation"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Updated service",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/agreementManagement/v4/agreement": {
      "post": {
        "tags": [
          "TMF651 Agreement"
        ],
        "summary": "Create an agreement",
        "description": "**Dynamic Behavior**: `agreementPeriod.endDateTime` is computed from `termMonths` (default 12), and each id in `productOfferingIds` is resolved against the PCM catalogue into an `agreementItem[]` entry.",
        "requestBody": {
          "required": true,
          "description": "Request payload",
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "customerId": "cust-1001",
                "customerName": "Demo Customer One",
                "name": "24-month fiber commitment",
                "agreementType": "Commitment",
                "termMonths": 24,
                "autoRenew": true,
                "productOfferingIds": [
                  "offer-infinity-fiber"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created agreement",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ]
      },
      "get": {
        "tags": [
          "TMF651 Agreement"
        ],
        "summary": "List agreements",
        "parameters": [
          {
            "name": "customerId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Matched against `engagedParty[]`",
            "example": "cust-1001"
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "initialized",
                "approved",
                "active",
                "rejected",
                "cancelled",
                "terminated",
                "expired",
                "pendingRenewal",
                "retired"
              ]
            },
            "description": "Filter by agreement status",
            "example": "active"
          },
          {
            "name": "agreementType",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filter by agreement type",
            "example": "Commitment"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Filtered agreement list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/agreementManagement/v4/agreement/{id}": {
      "get": {
        "tags": [
          "TMF651 Agreement"
        ],
        "summary": "Retrieve an agreement by id",
        "description": "**Try**: `agr-2026-003` (active), `agr-2025-002`, `agr-2024-001`, `agr-2023-100`.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Agreement id from `GET /agreement`",
            "example": "agr-2026-003"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Agreement",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/agreementManagement/v4/agreement/{id}/state": {
      "patch": {
        "tags": [
          "TMF651 Agreement"
        ],
        "summary": "Change an agreement's status",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Agreement id",
            "example": "agr-2026-003"
          },
          {
            "name": "state",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "initialized",
                "approved",
                "active",
                "rejected",
                "cancelled",
                "terminated",
                "expired",
                "pendingRenewal",
                "retired"
              ]
            },
            "description": "Target state",
            "example": "terminated"
          },
          {
            "name": "reason",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Transition reason",
            "example": "Early termination requested"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Updated agreement",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/accountManagement/v4/billingAccount": {
      "get": {
        "tags": [
          "TMF666 Billing Account"
        ],
        "summary": "List billing accounts",
        "parameters": [
          {
            "name": "customerId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Matched against `relatedParty[role=Customer]`",
            "example": "cust-1001"
          },
          {
            "name": "state",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "active",
                "closed"
              ]
            },
            "description": "Filter by account state",
            "example": "active"
          },
          {
            "name": "accountType",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Filter by account type",
            "example": "Billing"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Filtered account list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/accountManagement/v4/billingAccount/{id}": {
      "get": {
        "tags": [
          "TMF666 Billing Account"
        ],
        "summary": "Retrieve a billing account by id",
        "description": "**Try**: `bill-acct-1001`, `bill-acct-1077`, `bill-acct-2050`.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Billing account id",
            "example": "bill-acct-1001"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "BillingAccount",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/customerBillManagement/v4/customerBill": {
      "get": {
        "tags": [
          "TMF678 Customer Bill"
        ],
        "summary": "List customer bills",
        "description": "**Dynamic Behavior**: `fromDate` / `toDate` filter inclusively on `billDate`. The corpus holds bills dated April–June 2026.",
        "parameters": [
          {
            "name": "customerId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Matched against `relatedParty[role=Customer]`",
            "example": "cust-1001"
          },
          {
            "name": "state",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "new",
                "settled",
                "partiallyPaid"
              ]
            },
            "description": "Filter by bill state",
            "example": "settled"
          },
          {
            "name": "fromDate",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Window start (ISO date)",
            "example": "2026-04-01"
          },
          {
            "name": "toDate",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Window end (ISO date)",
            "example": "2026-06-30"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Filtered bill list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/customerBillManagement/v4/customerBill/{id}": {
      "get": {
        "tags": [
          "TMF678 Customer Bill"
        ],
        "summary": "Retrieve a bill by id",
        "description": "**Try**: `bill-2026-04-1001`, `bill-2026-05-1001`, `bill-2026-04-1077`, `bill-2026-Q2-2050`.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Bill id from `GET /customerBill`",
            "example": "bill-2026-04-1001"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "CustomerBill",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/paymentManagement/v1/payment": {
      "post": {
        "tags": [
          "TMF676 Payment"
        ],
        "summary": "Process a payment (conditional routing)",
        "description": "A decision engine inspects the card number, CVV and amount before returning. **First match wins:**\n\n| Trigger | Outcome | HTTP | Code |\n|---|---|---|---|\n| Card ends in `0002` | Declined | 402 | `51` INSUFFICIENT_FUNDS |\n| Card ends in `0036`, or `threeDsRequested=true` | 3-D Secure | 202 | `3DS_REQUIRED` |\n| Card ends in `0069` | Declined | 402 | `14` INVALID_CARD |\n| Card BIN starts with `9` | Declined | 402 | `99` GENERAL_DECLINE |\n| CVV equals `000` | Declined | 402 | `82` CVV_INVALID |\n| Amount > 50 000 | Declined | 402 | `61` LIMIT_EXCEEDED |\n| Amount > 10 000 | Fraud review | 202 | `FRAUD_REVIEW` |\n| otherwise | Approved | 201 | `00` |\n\nBrand detection from the BIN: `4` → Visa, `5` → Mastercard, `34`/`37` → Amex, `6` → Discover.\n\n**Raw PANs are never echoed back** — only the masked number and the last four digits. The outcome is also surfaced in the `X-Payment-Outcome` and `X-Payment-Code` response headers.\n\nPick a scenario from the **Examples** dropdown to switch between approval, decline, 3-D Secure and fraud review.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "customerId": "cust-1001",
                "amount": 1079.88,
                "currency": "TRY",
                "cardNumber": "4111111111111111",
                "cvv": "123",
                "cardholderName": "Demo Customer One",
                "expiryDate": "12/29"
              },
              "examples": {
                "approved": {
                  "summary": "Approved — 201",
                  "value": {
                    "customerId": "cust-1001",
                    "amount": 1079.88,
                    "currency": "TRY",
                    "cardNumber": "4111111111111111",
                    "cvv": "123",
                    "cardholderName": "Demo Customer One",
                    "expiryDate": "12/29"
                  }
                },
                "insufficientFunds": {
                  "summary": "Insufficient funds — 402, code 51",
                  "value": {
                    "customerId": "cust-1001",
                    "amount": 250,
                    "currency": "TRY",
                    "cardNumber": "4111111111110002",
                    "cvv": "123"
                  }
                },
                "threeDs": {
                  "summary": "3-D Secure challenge — 202",
                  "value": {
                    "customerId": "cust-1001",
                    "amount": 250,
                    "currency": "TRY",
                    "cardNumber": "4111111111110036",
                    "cvv": "123"
                  }
                },
                "invalidCard": {
                  "summary": "Invalid card — 402, code 14",
                  "value": {
                    "customerId": "cust-1001",
                    "amount": 250,
                    "currency": "TRY",
                    "cardNumber": "4111111111110069",
                    "cvv": "123"
                  }
                },
                "cvvInvalid": {
                  "summary": "CVV rejected — 402, code 82",
                  "value": {
                    "customerId": "cust-1001",
                    "amount": 250,
                    "currency": "TRY",
                    "cardNumber": "4111111111111111",
                    "cvv": "000"
                  }
                },
                "fraudReview": {
                  "summary": "Fraud review — 202 (amount over 10 000)",
                  "value": {
                    "customerId": "cust-2050",
                    "amount": 25000,
                    "currency": "TRY",
                    "cardNumber": "5555555555554444",
                    "cvv": "321"
                  }
                },
                "limitExceeded": {
                  "summary": "Limit exceeded — 402, code 61 (amount over 50 000)",
                  "value": {
                    "customerId": "cust-2050",
                    "amount": 75000,
                    "currency": "TRY",
                    "cardNumber": "4111111111111111",
                    "cvv": "123"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Approved payment",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Pending — 3-D Secure challenge or fraud review",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "402": {
            "description": "Declined — TMF630 error body with the decline code",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ]
      },
      "get": {
        "tags": [
          "TMF676 Payment"
        ],
        "summary": "List payment history",
        "parameters": [
          {
            "name": "customerId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Matched against `payer.id`",
            "example": "cust-1001"
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "success",
                "succeeded",
                "failed",
                "pending",
                "refunded"
              ]
            },
            "description": "Filter by payment status",
            "example": "success"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Filtered payment list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/paymentManagement/v1/payment/{id}": {
      "get": {
        "tags": [
          "TMF676 Payment"
        ],
        "summary": "Retrieve a payment by id",
        "description": "Payments are synthesised per call, so the id you ask for is stamped onto the returned record — any plausible payment id resolves.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Payment id — any plausible value resolves",
            "example": "pay-1001"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Payment",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/paymentManagement/v1/payment/{id}/refund": {
      "post": {
        "tags": [
          "TMF676 Payment"
        ],
        "summary": "Refund a payment",
        "description": "Emits a new payment record with a negative amount referencing the original via `refundedFrom`.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Payment id to refund",
            "example": "pay-1001"
          },
          {
            "name": "amount",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "description": "Partial refund amount; omit to refund in full",
            "example": 50
          },
          {
            "name": "reason",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Refund reason",
            "example": "Service not delivered"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Refund record",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/paymentManagement/v1/payment/{id}/retry": {
      "post": {
        "tags": [
          "TMF676 Payment"
        ],
        "summary": "Retry a failed payment",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Payment id to retry",
            "example": "pay-1001"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Retry record",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/paymentManagement/v1/recurringPayment": {
      "post": {
        "tags": [
          "TMF676 Payment"
        ],
        "summary": "Schedule a recurring payment",
        "description": "**Dynamic Behavior**: `nextDebitDate` is computed from `frequency` relative to `startDate` (defaulting to now). The prefilled example returns `2026-09-01`.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "customerId": "cust-1001",
                "paymentMethodId": "pm-cust-1001-visa",
                "billingAccountId": "bill-acct-1001",
                "amount": 899.9,
                "currency": "TRY",
                "frequency": "MONTHLY",
                "startDate": "2026-08-01",
                "description": "Monthly fiber subscription"
              },
              "examples": {
                "monthly": {
                  "summary": "Monthly — next debit 2026-09-01",
                  "value": {
                    "customerId": "cust-1001",
                    "paymentMethodId": "pm-cust-1001-visa",
                    "billingAccountId": "bill-acct-1001",
                    "amount": 899.9,
                    "currency": "TRY",
                    "frequency": "MONTHLY",
                    "startDate": "2026-08-01",
                    "description": "Monthly fiber subscription"
                  }
                },
                "quarterly": {
                  "summary": "Quarterly — next debit 2026-11-01",
                  "value": {
                    "customerId": "cust-2050",
                    "paymentMethodId": "pm-cust-2050-bank-transfer",
                    "billingAccountId": "bill-acct-2050",
                    "amount": 4990,
                    "currency": "TRY",
                    "frequency": "QUARTERLY",
                    "startDate": "2026-08-01"
                  }
                },
                "weekly": {
                  "summary": "Weekly — next debit 2026-08-08",
                  "value": {
                    "customerId": "cust-1001",
                    "paymentMethodId": "pm-cust-1001-visa",
                    "billingAccountId": "bill-acct-1001",
                    "amount": 50,
                    "currency": "TRY",
                    "frequency": "WEEKLY",
                    "startDate": "2026-08-01"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Recurring schedule",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ]
      },
      "get": {
        "tags": [
          "TMF676 Payment"
        ],
        "summary": "List recurring payments",
        "parameters": [
          {
            "name": "customerId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Matched against `payer.id`",
            "example": "cust-1001"
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "ACTIVE",
                "CANCELLED",
                "SUSPENDED"
              ]
            },
            "description": "Filter by schedule status",
            "example": "ACTIVE"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Filtered schedule list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/paymentManagement/v1/recurringPayment/{id}": {
      "get": {
        "tags": [
          "TMF676 Payment"
        ],
        "summary": "Retrieve a recurring payment by id",
        "description": "**Try**: `rcr-001`, `rcr-002`, `rcr-003`.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Schedule id from `GET /recurringPayment`",
            "example": "rcr-001"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "RecurringPayment",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/paymentManagement/v1/recurringPayment/{id}/cancel": {
      "post": {
        "tags": [
          "TMF676 Payment"
        ],
        "summary": "Cancel a recurring payment",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Schedule id",
            "example": "rcr-001"
          },
          {
            "name": "reason",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Cancellation reason",
            "example": "Customer cancelled the subscription"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Cancelled schedule",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/paymentManagement/v1/recurringPayment/{id}/retry": {
      "post": {
        "tags": [
          "TMF676 Payment"
        ],
        "summary": "Retry a failed recurring debit",
        "description": "Reactivates the schedule, increments `retryCount` and sets `nextDebitDate` to tomorrow.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Schedule id",
            "example": "rcr-001"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Reactivated schedule",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/paymentMethodManagement/v1/paymentMethod": {
      "get": {
        "tags": [
          "TMF676 Payment"
        ],
        "summary": "List payment methods",
        "parameters": [
          {
            "name": "customerId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Matched against `relatedParty[role=Customer]`",
            "example": "cust-1001"
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "active",
                "expired"
              ]
            },
            "description": "Filter by method status",
            "example": "active"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Filtered method list",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/paymentMethodManagement/v1/paymentMethod/{id}": {
      "get": {
        "tags": [
          "TMF676 Payment"
        ],
        "summary": "Retrieve a payment method by id",
        "description": "**Try**: `pm-cust-1001-visa`, `pm-cust-1077-mc`, `pm-cust-2050-bank-transfer`.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Payment method id",
            "example": "pm-cust-1001-visa"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "PaymentMethod",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/securePayments/v1/session": {
      "post": {
        "tags": [
          "Secure Payments"
        ],
        "summary": "Open a secure payment session",
        "description": "Runs the same decision engine as `POST /payment`, but returns a redirect/challenge session instead of capturing. The prefilled card (`…0036`) forces a 3-D Secure challenge — copy `sessionId` from the response into the callback operation below.",
        "requestBody": {
          "required": true,
          "description": "Request payload",
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "customerId": "cust-1001",
                "amount": 499.9,
                "currency": "TRY",
                "cardNumber": "4111111111110036",
                "cvv": "123"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Secure session with `redirectUrl`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ]
      }
    },
    "/tmf-api/securePayments/v1/session/{sessionId}/callback": {
      "post": {
        "tags": [
          "Secure Payments"
        ],
        "summary": "Handle the 3-D Secure callback",
        "description": "The issuer redirects here after the challenge; anything other than `succeeded`/`approved` is treated as declined. Any session id is accepted — use the one returned by `POST /session`.",
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Session id from `POST /session`",
            "example": "3f8a1c9e-5d21-4b7a-9f10-2c6e8b4d0a75"
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "succeeded",
                "approved",
                "declined"
              ]
            },
            "description": "Issuer verdict",
            "example": "succeeded"
          },
          {
            "name": "authCode",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Issuer authorization code",
            "example": "AUTH123456"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Callback result",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/securePayments/v1/configuration": {
      "get": {
        "tags": [
          "Secure Payments"
        ],
        "summary": "Strong-customer-authentication policy",
        "description": "**Dynamic Behavior**: `secureRequired` is true at or above the 100.00 threshold; `toleratedSystemFailure` is false only for `channel-online`.",
        "parameters": [
          {
            "name": "amount",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number"
            },
            "description": "Prospective payment amount",
            "example": 499.9
          },
          {
            "name": "channel",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "channel-online",
                "channel-retail",
                "channel-callcenter"
              ]
            },
            "description": "Sales channel",
            "example": "channel-online"
          },
          {
            "name": "paymentMethod",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "credit-card",
                "bank-transfer",
                "direct-debit"
              ]
            },
            "description": "Payment method type",
            "example": "credit-card"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "SCA configuration",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/referenceData/v1": {
      "get": {
        "tags": [
          "Reference Data"
        ],
        "summary": "Index of reference-data types",
        "description": "Lists every supported lookup table with its item count and path. Takes no parameters.",
        "responses": {
          "200": {
            "description": "Type index with item counts",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ]
      }
    },
    "/tmf-api/referenceData/v1/{type}": {
      "get": {
        "tags": [
          "Reference Data"
        ],
        "summary": "List a reference-data type",
        "description": "Unknown types return 400 with the supported list.",
        "parameters": [
          {
            "name": "type",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "paymentMethod",
                "currency",
                "country",
                "channel",
                "marketSegment",
                "documentType"
              ]
            },
            "description": "Lookup table name",
            "example": "currency"
          },
          {
            "name": "code",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Exact code filter",
            "example": "TRY"
          },
          {
            "name": "activeOnly",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Return only active entries",
            "example": true
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Reference entries",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/tmf-api/referenceData/v1/{type}/{id}": {
      "get": {
        "tags": [
          "Reference Data"
        ],
        "summary": "Retrieve a reference entry",
        "description": "Resolves by `id` **or** by `code` — both are natural keys for reference data.\n\n| type | example ids |\n|---|---|\n| `currency` | `TRY`, `EUR`, `USD` |\n| `country` | `TR`, `DE`, `GB` |\n| `channel` | `channel-online`, `channel-retail`, `channel-callcenter` |\n| `paymentMethod` | `credit-card`, `bank-transfer`, `direct-debit` |\n| `marketSegment` | `segment-consumer`, `segment-smb`, `segment-enterprise` |\n| `documentType` | `national-id`, `passport`, `driving-licence` |",
        "parameters": [
          {
            "name": "type",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "paymentMethod",
                "currency",
                "country",
                "channel",
                "marketSegment",
                "documentType"
              ]
            },
            "description": "Lookup table name",
            "example": "currency"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Entry id or code",
            "example": "TRY"
          },
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "responses": {
          "200": {
            "description": "Reference entry",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/_meta/info": {
      "get": {
        "tags": [
          "Engine Meta"
        ],
        "summary": "Engine metadata",
        "description": "Public banner: title, base domain, version and the header names the engine listens on. No token required, no parameters.",
        "security": [],
        "responses": {
          "200": {
            "description": "Engine banner",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ]
      }
    },
    "/_meta/scenarios": {
      "get": {
        "tags": [
          "Engine Meta"
        ],
        "summary": "Available mock scenarios",
        "description": "Every value accepted by `X-Mock-Scenario`, with the HTTP status it maps to. Takes no parameters.",
        "responses": {
          "200": {
            "description": "Scenario catalogue",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ]
      }
    },
    "/_meta/echo-scenario": {
      "get": {
        "tags": [
          "Engine Meta"
        ],
        "summary": "Echo the active scenario",
        "description": "Returns the scenario selected by the current request — set `X-Mock-Scenario` below and execute to verify your header wiring.",
        "responses": {
          "200": {
            "description": "Active scenario",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ]
      }
    },
    "/_meta/admin/health": {
      "get": {
        "tags": [
          "Engine Admin"
        ],
        "summary": "Liveness and template-corpus probe",
        "description": "Requires a token with the ADMIN role — use **Sign in as admin** above.",
        "responses": {
          "200": {
            "description": "Health report",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "ADMIN role required",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ]
      }
    },
    "/_meta/admin/build": {
      "get": {
        "tags": [
          "Engine Admin"
        ],
        "summary": "Build and runtime information",
        "description": "Requires a token with the ADMIN role — use **Sign in as admin** above.",
        "responses": {
          "200": {
            "description": "Build info",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "ADMIN role required",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ]
      }
    },
    "/_meta/admin/templates": {
      "get": {
        "tags": [
          "Engine Admin"
        ],
        "summary": "Every JSON template bundled into the engine",
        "description": "Requires a token with the ADMIN role — use **Sign in as admin** above.",
        "responses": {
          "200": {
            "description": "Template listing",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "ADMIN role required",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ]
      }
    },
    "/_meta/admin/cache": {
      "get": {
        "tags": [
          "Engine Admin"
        ],
        "summary": "Template cache statistics",
        "description": "Requires a token with the ADMIN role — use **Sign in as admin** above.",
        "responses": {
          "200": {
            "description": "Cache stats",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "ADMIN role required",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ]
      }
    },
    "/_meta/admin/state": {
      "get": {
        "tags": [
          "Engine Admin"
        ],
        "summary": "Isolate-local state snapshot",
        "description": "Requires a token with the ADMIN role — use **Sign in as admin** above.",
        "responses": {
          "200": {
            "description": "State snapshot",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "ADMIN role required",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ]
      }
    },
    "/_meta/admin/config": {
      "get": {
        "tags": [
          "Engine Admin"
        ],
        "summary": "Effective configuration",
        "description": "Requires a token with the ADMIN role — use **Sign in as admin** above. Client ids and roles are listed; secrets are never echoed.",
        "responses": {
          "200": {
            "description": "Configuration",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Validation failed — TMF630 error body",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Bearer token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "description": "ADMIN role required",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Fair-use limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/MockScenario"
          },
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ]
      }
    }
  }
}