{
  "openapi": "3.0.1",
  "info": {
    "title": "MEMS Registration & Certification API",
    "description": "Maritime Enterprise Management System (MEMS) — Registration, certification, workflow, billing, inspections, and surveyor accreditation.\r\n\r\n**Base path:** `reg-cert/api/v1`\r\n\r\nAuthenticate with a Bearer JWT from the MEMS IAM service. Use the documentation portals below to explore endpoints interactively.",
    "contact": {
      "name": "MEMS Platform",
      "email": "support@mems.gov"
    },
    "version": "v1"
  },
  "paths": {
    "/reg-cert/api/v1/Admin/registration-categories": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "List registration categories",
        "description": "Returns all VRC/CRC/ARC registration category rows.",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Create registration category",
        "description": "Creates a new VRC/CRC/ARC category.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateRegistrationCategoryRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateRegistrationCategoryRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateRegistrationCategoryRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Admin/registration-categories/{id}": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "Get registration category",
        "description": "Returns a single registration category by id.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "put": {
        "tags": [
          "Admin"
        ],
        "summary": "Update registration category",
        "description": "Updates category name, eligibility, and status.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UpdateRegistrationCategoryRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UpdateRegistrationCategoryRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UpdateRegistrationCategoryRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "Admin"
        ],
        "summary": "Delete registration category",
        "description": "Soft-deletes a registration category.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Admin/services": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "List service catalogue",
        "description": "Returns all SVC-* service catalogue entries.",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Create service",
        "description": "Adds a new pre- or post-registration service to the catalogue.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateServiceRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateServiceRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateServiceRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Admin/services/{id}": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "Get service",
        "description": "Returns a single catalogue service by id.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "put": {
        "tags": [
          "Admin"
        ],
        "summary": "Update service",
        "description": "Updates fees, prerequisites, and regulatory document requirements.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateServiceRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateServiceRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateServiceRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "Admin"
        ],
        "summary": "Delete service",
        "description": "Soft-deletes a catalogue service.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Admin/service-types": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "List service types",
        "description": "Returns ST-1â€¦ST-5 service type definitions.",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Create service type",
        "description": "Creates a new service type (Certificate, Permit, etc.).",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateServiceTypeRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateServiceTypeRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateServiceTypeRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Admin/service-types/{id}": {
      "put": {
        "tags": [
          "Admin"
        ],
        "summary": "Update service type",
        "description": "Updates name, description, icon, and sort order.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UpdateServiceTypeRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UpdateServiceTypeRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UpdateServiceTypeRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "Admin"
        ],
        "summary": "Delete service type",
        "description": "Soft-deletes a service type.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Admin/regulatory-documents": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "List regulatory documents",
        "description": "Returns RD-* regulatory document definitions.",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Create regulatory document",
        "description": "Adds a regulatory document label used in compliance steps.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateRegulatoryDocumentRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateRegulatoryDocumentRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateRegulatoryDocumentRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Admin/regulatory-documents/{id}": {
      "put": {
        "tags": [
          "Admin"
        ],
        "summary": "Update regulatory document",
        "description": "Updates label, description, entity type, and mandatory flag.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UpdateRegulatoryDocumentRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UpdateRegulatoryDocumentRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UpdateRegulatoryDocumentRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "Admin"
        ],
        "summary": "Delete regulatory document",
        "description": "Soft-deletes a regulatory document definition.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Admin/currencies": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "List currencies",
        "description": "Returns supported billing currencies (USD, EUR, NGN, GBP).",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Create currency",
        "description": "Adds a new currency for fees and invoices.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateCurrencyRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateCurrencyRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateCurrencyRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Admin/currencies/{id}": {
      "put": {
        "tags": [
          "Admin"
        ],
        "summary": "Update currency",
        "description": "Updates name, symbol, and default flag.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UpdateCurrencyRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UpdateCurrencyRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UpdateCurrencyRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "Admin"
        ],
        "summary": "Delete currency",
        "description": "Soft-deletes a currency.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Admin/specializations": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "List surveyor specializations",
        "description": "Returns surveyor specialization codes.",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Create specialization",
        "description": "Adds a surveyor specialization.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateSpecializationRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateSpecializationRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateSpecializationRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Admin/specializations/{id}": {
      "delete": {
        "tags": [
          "Admin"
        ],
        "summary": "Delete specialization",
        "description": "Soft-deletes a specialization.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Admin/fee-schedules": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "List fee schedules",
        "description": "Returns all NIMASA fee catalog lines with their linked registration category.",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Create fee schedule",
        "description": "Links a fee schedule to a registration category.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateFeeScheduleRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateFeeScheduleRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateFeeScheduleRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Admin/form-schemas": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Create form schema",
        "description": "Creates a JSON form schema for an entity type.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateFormSchemaRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateFormSchemaRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateFormSchemaRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Admin/workflow-templates": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "List workflow templates",
        "description": "Returns WF-* approval chain templates.",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Create workflow template",
        "description": "Creates a new approval chain template.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateWorkflowTemplateRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateWorkflowTemplateRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateWorkflowTemplateRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Admin/workflow-templates/{id}": {
      "put": {
        "tags": [
          "Admin"
        ],
        "summary": "Update workflow template",
        "description": "Updates name, stage chain, and dual-signoff flag.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UpdateWorkflowTemplateRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UpdateWorkflowTemplateRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UpdateWorkflowTemplateRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "Admin"
        ],
        "summary": "Delete workflow template",
        "description": "Soft-deletes a workflow template.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Admin/entity-type-definitions": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "List entity types",
        "description": "Returns ET-1â€¦ET-4 registration type cards.",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Create entity type definition",
        "description": "Adds a new registration type (Company, Vessel, etc.).",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateEntityTypeDefinitionRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateEntityTypeDefinitionRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateEntityTypeDefinitionRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Admin/entity-type-definitions/{id}": {
      "put": {
        "tags": [
          "Admin"
        ],
        "summary": "Update entity type definition",
        "description": "Updates name, fee, prerequisite codes, and active status.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UpdateEntityTypeDefinitionRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UpdateEntityTypeDefinitionRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UpdateEntityTypeDefinitionRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "Admin"
        ],
        "summary": "Delete entity type definition",
        "description": "Soft-deletes an entity type definition.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Admin/registration-requirements": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "List registration requirements",
        "description": "Returns RR-* prerequisite and document rules.",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Create registration requirement",
        "description": "Adds a prerequisite rule for an entity type and optional category.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateRegistrationRequirementRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateRegistrationRequirementRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateRegistrationRequirementRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Admin/registration-requirements/{id}": {
      "put": {
        "tags": [
          "Admin"
        ],
        "summary": "Update registration requirement",
        "description": "Updates prerequisite services and regulatory document codes.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UpdateRegistrationRequirementRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UpdateRegistrationRequirementRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UpdateRegistrationRequirementRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "Admin"
        ],
        "summary": "Delete registration requirement",
        "description": "Soft-deletes a registration requirement rule.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Admin/form-builder/{scope}/{targetId}": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "Get form builder fields",
        "description": "Loads form fields for entity, category, serviceType, or service scope.",
        "parameters": [
          {
            "name": "scope",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "targetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "put": {
        "tags": [
          "Admin"
        ],
        "summary": "Save form builder fields",
        "description": "Persists drag-and-drop form field configuration.",
        "parameters": [
          {
            "name": "scope",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "targetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.SaveFormBuilderRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.SaveFormBuilderRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.SaveFormBuilderRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Applications": {
      "post": {
        "tags": [
          "Applications"
        ],
        "summary": "Create application",
        "description": "Submits a new service or registration application.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateApplicationRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateApplicationRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateApplicationRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "get": {
        "tags": [
          "Applications"
        ],
        "summary": "List applications",
        "description": "Lists applications with optional status and entity type filters.",
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Applications/{id}": {
      "get": {
        "tags": [
          "Applications"
        ],
        "summary": "Get application",
        "description": "Returns application detail including pipeline stages.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Audit": {
      "get": {
        "tags": [
          "Audit"
        ],
        "summary": "List audit logs",
        "description": "Returns paginated audit log entries for the tenant.",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Certificates": {
      "get": {
        "tags": [
          "Certificates"
        ],
        "summary": "List certificates (monitoring)",
        "description": "Returns stats, attention panel, and filtered certificate cards.",
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "kind",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "q",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Certificates/{id}": {
      "get": {
        "tags": [
          "Certificates"
        ],
        "summary": "Get certificate",
        "description": "Returns certificate detail including blockchain anchor.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Certificates/{id}/download": {
      "get": {
        "tags": [
          "Certificates"
        ],
        "summary": "Download certificate PDF",
        "description": "Streams the certificate as a PDF file for print or save.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Certificates/{id}/suspend": {
      "post": {
        "tags": [
          "Certificates"
        ],
        "summary": "Suspend certificate",
        "description": "Suspends a certificate with reason.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.SuspendCertificateRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.SuspendCertificateRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.SuspendCertificateRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Certificates/{id}/revoke": {
      "post": {
        "tags": [
          "Certificates"
        ],
        "summary": "Revoke certificate",
        "description": "Permanently revokes a certificate.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.RevokeCertificateRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.RevokeCertificateRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.RevokeCertificateRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Dashboard": {
      "get": {
        "tags": [
          "Dashboard"
        ],
        "summary": "Get role dashboard",
        "description": "Returns stats tiles, recent applications, and alerts for the given role.",
        "parameters": [
          {
            "name": "role",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Dashboard/stats": {
      "get": {
        "tags": [
          "Dashboard"
        ],
        "summary": "Get aggregate stats",
        "description": "Returns system-wide dashboard statistics.",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Dashboard/alerts": {
      "get": {
        "tags": [
          "Dashboard"
        ],
        "summary": "Get dashboard alerts",
        "description": "Returns paginated operational alerts.",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Documents/upload-url": {
      "post": {
        "tags": [
          "Documents"
        ],
        "summary": "Get presigned upload URL",
        "description": "Returns a MinIO presigned URL for direct file upload.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UploadUrlRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UploadUrlRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UploadUrlRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Documents/confirm": {
      "post": {
        "tags": [
          "Documents"
        ],
        "summary": "Confirm upload",
        "description": "Confirms upload completion and enqueues virus scan.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.ConfirmUploadRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.ConfirmUploadRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.ConfirmUploadRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Documents/{id}": {
      "get": {
        "tags": [
          "Documents"
        ],
        "summary": "Get document metadata",
        "description": "Returns stored document metadata by id.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Drafts/{flow}": {
      "get": {
        "tags": [
          "Drafts"
        ],
        "summary": "Get wizard draft",
        "description": "Loads saved draft JSON for the given flow key.",
        "parameters": [
          {
            "name": "flow",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "Drafts"
        ],
        "summary": "Save wizard draft",
        "description": "Persists wizard state for the given flow key.",
        "parameters": [
          {
            "name": "flow",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.SaveDraftRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.SaveDraftRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.SaveDraftRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Entities": {
      "post": {
        "tags": [
          "Entities"
        ],
        "summary": "Create entity draft",
        "description": "Creates a new company, vessel, or asset registration draft.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateEntityRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateEntityRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateEntityRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "get": {
        "tags": [
          "Entities"
        ],
        "summary": "List entities",
        "description": "Lists entities for the current tenant.",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Entities/{id}": {
      "get": {
        "tags": [
          "Entities"
        ],
        "summary": "Get entity",
        "description": "Returns entity details by id.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "patch": {
        "tags": [
          "Entities"
        ],
        "summary": "Update entity",
        "description": "Updates label, category, or form values on a draft entity.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UpdateEntityRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UpdateEntityRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UpdateEntityRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "Entities"
        ],
        "summary": "Delete entity",
        "description": "Soft-deletes an entity.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Inspections": {
      "get": {
        "tags": [
          "Inspections"
        ],
        "summary": "List inspections",
        "description": "Lists inspections with optional inspector and status filters.",
        "parameters": [
          {
            "name": "inspector",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "Inspections"
        ],
        "summary": "Create inspection",
        "description": "Schedules a new inspection.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateInspectionRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateInspectionRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateInspectionRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Inspections/{id}/complete": {
      "post": {
        "tags": [
          "Inspections"
        ],
        "summary": "Complete inspection",
        "description": "Marks inspection complete with findings and recommendation.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CompleteInspectionRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CompleteInspectionRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CompleteInspectionRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Inspections/{id}": {
      "get": {
        "tags": [
          "Inspections"
        ],
        "summary": "Get inspection",
        "description": "Returns inspection detail by id.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "put": {
        "tags": [
          "Inspections"
        ],
        "summary": "Update inspection",
        "description": "Updates inspection details.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UpdateInspectionRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UpdateInspectionRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UpdateInspectionRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "delete": {
        "tags": [
          "Inspections"
        ],
        "summary": "Delete inspection",
        "description": "Soft-deletes an inspection record.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Inspections/{id}/status": {
      "patch": {
        "tags": [
          "Inspections"
        ],
        "summary": "Update inspection status",
        "description": "Changes inspection status (Scheduled, Completed, Overdue).",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UpdateInspectionStatusRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UpdateInspectionStatusRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UpdateInspectionStatusRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Invoices": {
      "post": {
        "tags": [
          "Invoices"
        ],
        "summary": "Generate invoice",
        "description": "Creates an invoice for an application or entity.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateInvoiceRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateInvoiceRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateInvoiceRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "get": {
        "tags": [
          "Invoices"
        ],
        "summary": "List invoices",
        "description": "Lists invoices for the current tenant.",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Invoices/{id}": {
      "get": {
        "tags": [
          "Invoices"
        ],
        "summary": "Get invoice",
        "description": "Returns invoice detail by id.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Invoices/stats": {
      "get": {
        "tags": [
          "Invoices"
        ],
        "summary": "Get invoice statistics",
        "description": "Returns total invoiced, paid, and outstanding per currency.",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Invoices/ledger": {
      "get": {
        "tags": [
          "Invoices"
        ],
        "summary": "List invoice ledger",
        "description": "Unified invoice ledger with status and kind filters.",
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "kind",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Invoices/{id}/pay": {
      "post": {
        "tags": [
          "Invoices"
        ],
        "summary": "Pay invoice",
        "description": "Records payment and submits linked application to workflow.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/redoc": {
      "get": {
        "tags": [
          "MEMS.RegCert.API"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Notifications": {
      "get": {
        "tags": [
          "Notifications"
        ],
        "summary": "List notifications",
        "description": "Returns paginated notifications for the current user.",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Notifications/mark-all-read": {
      "post": {
        "tags": [
          "Notifications"
        ],
        "summary": "Mark all notifications read",
        "description": "Marks all user notifications as read.",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Payments/{invoiceId}/pay": {
      "post": {
        "tags": [
          "Payments"
        ],
        "summary": "Record payment",
        "description": "Records a gateway payment against an invoice (idempotent).",
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.RecordPaymentRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.RecordPaymentRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.RecordPaymentRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Payments/webhook/callback": {
      "post": {
        "tags": [
          "Payments"
        ],
        "summary": "Payment gateway webhook",
        "description": "Handles payment gateway callback (HMAC verified).",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.PaymentWebhookRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.PaymentWebhookRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.PaymentWebhookRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Pipeline/{applicationId}/stages": {
      "get": {
        "tags": [
          "Pipeline"
        ],
        "summary": "Get pipeline stages",
        "description": "Returns ordered approval stages for an application.",
        "parameters": [
          {
            "name": "applicationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Pipeline/{applicationId}/stages/{stageId}/decisions": {
      "post": {
        "tags": [
          "Pipeline"
        ],
        "summary": "Decide pipeline stage",
        "description": "Approves or rejects a specific pipeline stage.",
        "parameters": [
          {
            "name": "applicationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "stageId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.StageDecisionRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.StageDecisionRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.StageDecisionRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/portfolio/entities": {
      "get": {
        "tags": [
          "Portfolio"
        ],
        "summary": "List entities by type",
        "description": "Returns entities of the specified entity type owned by the current applicant.",
        "parameters": [
          {
            "name": "entityTypeDefinitionId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/portfolio/entities/{entityId}/compliance": {
      "get": {
        "tags": [
          "Portfolio"
        ],
        "summary": "Get entity compliance requirements",
        "description": "Returns prerequisite services for an entity with filing status: not_filed, in_progress, or filed.",
        "parameters": [
          {
            "name": "entityId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/services/catalogue": {
      "get": {
        "tags": [
          "Post-Registration Services"
        ],
        "summary": "List post-registration services",
        "description": "Returns SVC-7 through SVC-14 catalogue.",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/services/form-schema": {
      "get": {
        "tags": [
          "Post-Registration Services"
        ],
        "summary": "Get service form schema",
        "description": "Returns dynamic form fields for the selected service.",
        "parameters": [
          {
            "name": "serviceCode",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "typeId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/services/compliance": {
      "get": {
        "tags": [
          "Post-Registration Services"
        ],
        "summary": "Get service compliance",
        "description": "Returns prerequisite services and regulatory documents.",
        "parameters": [
          {
            "name": "serviceCode",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/services": {
      "get": {
        "tags": [
          "Post-Registration Services"
        ],
        "summary": "List approved applications (prerequisites)",
        "description": "Returns approved applications for prerequisite picker.",
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entityType",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/services/invoice": {
      "post": {
        "tags": [
          "Post-Registration Services"
        ],
        "summary": "Generate service invoice",
        "description": "Calculates service fee with processing charge.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.RegistrationInvoiceRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.RegistrationInvoiceRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.RegistrationInvoiceRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/services/submit": {
      "post": {
        "tags": [
          "Post-Registration Services"
        ],
        "summary": "Submit service application",
        "description": "Submits paid post-registration service application to workflow.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.ServiceFlowSubmitRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.ServiceFlowSubmitRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.ServiceFlowSubmitRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/pre-registration-services/catalogue": {
      "get": {
        "tags": [
          "Pre-Registration Services"
        ],
        "summary": "List pre-registration services",
        "description": "Returns SVC-1 through SVC-6 catalogue.",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/pre-registration-services/form-schema": {
      "get": {
        "tags": [
          "Pre-Registration Services"
        ],
        "summary": "Get pre-reg form schema",
        "description": "Returns dynamic form fields for the selected pre-reg service.",
        "parameters": [
          {
            "name": "serviceCode",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "typeId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/pre-registration-services/compliance": {
      "get": {
        "tags": [
          "Pre-Registration Services"
        ],
        "summary": "Get pre-reg compliance",
        "description": "Returns prerequisite services and regulatory documents.",
        "parameters": [
          {
            "name": "serviceCode",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/pre-registration-services/invoice": {
      "post": {
        "tags": [
          "Pre-Registration Services"
        ],
        "summary": "Generate pre-reg invoice",
        "description": "Calculates pre-registration service fee.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.RegistrationInvoiceRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.RegistrationInvoiceRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.RegistrationInvoiceRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/pre-registration-services/submit": {
      "post": {
        "tags": [
          "Pre-Registration Services"
        ],
        "summary": "Submit pre-reg application",
        "description": "Submits paid pre-registration service application.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.ServiceFlowSubmitRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.ServiceFlowSubmitRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.ServiceFlowSubmitRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/registration/entity-types": {
      "get": {
        "tags": [
          "Registration"
        ],
        "summary": "List entity types",
        "description": "Returns ET-1â€¦ET-4 registration type cards with fees and prerequisites.",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/registration/categories": {
      "get": {
        "tags": [
          "Registration"
        ],
        "summary": "List registration categories",
        "description": "Returns VRC/CRC/ARC categories for the selected entity type.",
        "parameters": [
          {
            "name": "typeId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/registration/form-schema": {
      "get": {
        "tags": [
          "Registration"
        ],
        "summary": "Get registration form schema",
        "description": "Returns merged dynamic form fields for type and optional category.",
        "parameters": [
          {
            "name": "typeId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "categoryId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/registration/compliance": {
      "get": {
        "tags": [
          "Registration"
        ],
        "summary": "Get registration compliance",
        "description": "Returns prerequisite services and required regulatory documents.",
        "parameters": [
          {
            "name": "typeId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "categoryId",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/registration/invoice": {
      "post": {
        "tags": [
          "Registration"
        ],
        "summary": "Generate registration invoice",
        "description": "Calculates registration fee with breakdown and returns invoice reference.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.RegistrationInvoiceRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.RegistrationInvoiceRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.RegistrationInvoiceRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/registration/submit": {
      "post": {
        "tags": [
          "Registration"
        ],
        "summary": "Submit registration filing",
        "description": "Submits paid registration to workflow; returns filing reference.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.RegistrationSubmitRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.RegistrationSubmitRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.RegistrationSubmitRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/SurveyorApplications": {
      "get": {
        "tags": [
          "Surveyor Applications"
        ],
        "summary": "List surveyor applications",
        "description": "Returns accreditation applications with optional status filter.",
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/MEMS.RegCert.Models.Enums.SurveyorApplicationStatus"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "Surveyor Applications"
        ],
        "summary": "Submit surveyor application",
        "description": "Creates a new surveyor accreditation application.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateSurveyorApplicationRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateSurveyorApplicationRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateSurveyorApplicationRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/SurveyorApplications/{id}": {
      "get": {
        "tags": [
          "Surveyor Applications"
        ],
        "summary": "Get surveyor application",
        "description": "Returns full application detail with documents and checklist.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/SurveyorApplications/{id}/decide": {
      "patch": {
        "tags": [
          "Surveyor Applications"
        ],
        "summary": "Decide surveyor application",
        "description": "Approves or rejects a surveyor application.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.SurveyorApplicationDecisionRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.SurveyorApplicationDecisionRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.SurveyorApplicationDecisionRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/SurveyorApplications/{id}/assign-reviewer": {
      "post": {
        "tags": [
          "Surveyor Applications"
        ],
        "summary": "Assign surveyor reviewer",
        "description": "Assigns a reviewer to an application.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.AssignSurveyorReviewerRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.AssignSurveyorReviewerRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.AssignSurveyorReviewerRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/SurveyorApplications/{id}/clarification": {
      "post": {
        "tags": [
          "Surveyor Applications"
        ],
        "summary": "Request clarification",
        "description": "Requests clarification from applicant on surveyor application.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.SurveyorClarificationRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.SurveyorClarificationRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.SurveyorClarificationRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/SurveyorOrganisations": {
      "get": {
        "tags": [
          "Surveyor Organisations"
        ],
        "summary": "List surveyor organisations",
        "description": "Returns recognised organisations with optional status filter.",
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/MEMS.RegCert.Models.Enums.OrganisationStatus"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "Surveyor Organisations"
        ],
        "summary": "Create surveyor organisation",
        "description": "Registers a new recognised organisation.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateSurveyorOrganisationRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateSurveyorOrganisationRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateSurveyorOrganisationRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/SurveyorOrganisations/{id}": {
      "get": {
        "tags": [
          "Surveyor Organisations"
        ],
        "summary": "Get surveyor organisation",
        "description": "Returns organisation detail by id.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/SurveyorOrganisations/{id}/status": {
      "patch": {
        "tags": [
          "Surveyor Organisations"
        ],
        "summary": "Update organisation status",
        "description": "Activates, suspends, or expires an organisation.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UpdateOrganisationStatusRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UpdateOrganisationStatusRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.UpdateOrganisationStatusRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/SurveyorReports/dashboard-stats": {
      "get": {
        "tags": [
          "Surveyor Reports"
        ],
        "summary": "Get surveyor dashboard stats",
        "description": "Returns KPI tiles for surveyor accreditation module.",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/SurveyorReports/dashboard": {
      "get": {
        "tags": [
          "Surveyor Reports"
        ],
        "summary": "Get surveyor dashboard",
        "description": "Returns surveyor module dashboard data.",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/SurveyorReports/analytics": {
      "get": {
        "tags": [
          "Surveyor Reports"
        ],
        "summary": "Get surveyor analytics report",
        "description": "Returns annual application volume, approval ratio, and renewal KPIs.",
        "parameters": [
          {
            "name": "year",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Surveyors": {
      "get": {
        "tags": [
          "Surveyors"
        ],
        "summary": "List accredited surveyors",
        "description": "Returns approved surveyors with optional status and organisation filters.",
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/MEMS.RegCert.Models.Enums.SurveyorStatus"
            }
          },
          {
            "name": "organisationId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Surveyors/{id}": {
      "get": {
        "tags": [
          "Surveyors"
        ],
        "summary": "Get surveyor",
        "description": "Returns accredited surveyor profile.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Surveyors/{id}/suspend": {
      "post": {
        "tags": [
          "Surveyors"
        ],
        "summary": "Suspend surveyor",
        "description": "Suspends accreditation with reason.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.SuspendSurveyorRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.SuspendSurveyorRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.SuspendSurveyorRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Surveyors/{id}/reinstate": {
      "post": {
        "tags": [
          "Surveyors"
        ],
        "summary": "Reinstate surveyor",
        "description": "Reinstates a suspended surveyor.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Surveyors/{id}/renew": {
      "post": {
        "tags": [
          "Surveyors"
        ],
        "summary": "Renew surveyor accreditation",
        "description": "Extends accreditation expiry date.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.RenewSurveyorRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.RenewSurveyorRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.RenewSurveyorRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Surveyors/{id}/cpd": {
      "get": {
        "tags": [
          "Surveyors"
        ],
        "summary": "List CPD records",
        "description": "Returns continuing professional development hours for a surveyor.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "Surveyors"
        ],
        "summary": "Add CPD record",
        "description": "Records CPD activity hours for a surveyor.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateCPDRecordRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateCPDRecordRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.CreateCPDRecordRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Surveyors/renewals": {
      "get": {
        "tags": [
          "Surveyors"
        ],
        "summary": "List renewal queue",
        "description": "Returns surveyor accreditation renewals pending review.",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/uploads": {
      "post": {
        "tags": [
          "Uploads"
        ],
        "summary": "Register file upload",
        "description": "Registers an uploaded file and returns fileId for form submission.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.DirectUploadRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.DirectUploadRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.DirectUploadRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Verification/{qrToken}": {
      "get": {
        "tags": [
          "Verification"
        ],
        "summary": "Verify certificate (QR)",
        "description": "Public endpoint — verifies certificate authenticity from QR payload.",
        "parameters": [
          {
            "name": "qrToken",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Workflow": {
      "get": {
        "tags": [
          "Workflow"
        ],
        "summary": "List workflow applications",
        "description": "Lists all applications with stage and role-gated action flags.",
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "role",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Workflow/{applicationId}/timeline": {
      "get": {
        "tags": [
          "Workflow"
        ],
        "summary": "Get application timeline",
        "description": "Returns paginated audit trail of workflow stage decisions.",
        "parameters": [
          {
            "name": "applicationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Workflow/{applicationId}/approve": {
      "post": {
        "tags": [
          "Workflow"
        ],
        "summary": "Approve application stage",
        "description": "Approves the current workflow stage (stage-gated by role).",
        "parameters": [
          {
            "name": "applicationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Workflow/{applicationId}/reject": {
      "post": {
        "tags": [
          "Workflow"
        ],
        "summary": "Reject application",
        "description": "Rejects at the current stage and stops the workflow.",
        "parameters": [
          {
            "name": "applicationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.WorkflowRejectRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.WorkflowRejectRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.WorkflowRejectRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/reg-cert/api/v1/Workflow/callback": {
      "post": {
        "tags": [
          "Workflow"
        ],
        "summary": "IAM workflow callback",
        "description": "Receives workflow stage-transition events from IAM (idempotent, no auth required).",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.WorkflowCallbackRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.WorkflowCallbackRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MEMS.RegCert.Models.Requests.WorkflowCallbackRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "MEMS.RegCert.Models.DTOs.FormFieldDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "label": {
            "type": "string",
            "nullable": true
          },
          "type": {
            "type": "string",
            "nullable": true
          },
          "required": {
            "type": "boolean"
          },
          "options": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Enums.ApplicationKind": {
        "enum": [
          "Registration",
          "Service",
          "PreRegistrationService"
        ],
        "type": "string"
      },
      "MEMS.RegCert.Models.Enums.InspectionStatus": {
        "enum": [
          "Scheduled",
          "InProgress",
          "Completed",
          "Overdue",
          "Cancelled"
        ],
        "type": "string"
      },
      "MEMS.RegCert.Models.Enums.OrganisationStatus": {
        "enum": [
          "Active",
          "Pending",
          "Suspended",
          "Expired"
        ],
        "type": "string"
      },
      "MEMS.RegCert.Models.Enums.ServiceCategory": {
        "enum": [
          "PreRegistration",
          "PostRegistration"
        ],
        "type": "string"
      },
      "MEMS.RegCert.Models.Enums.ServiceFrequency": {
        "enum": [
          "OneOff",
          "Annual",
          "PerEvent"
        ],
        "type": "string"
      },
      "MEMS.RegCert.Models.Enums.SurveyorApplicationStatus": {
        "enum": [
          "Pending",
          "UnderReview",
          "ClarificationRequested",
          "Approved",
          "Rejected"
        ],
        "type": "string"
      },
      "MEMS.RegCert.Models.Enums.SurveyorStatus": {
        "enum": [
          "Active",
          "ExpiringSoon",
          "Expired",
          "Suspended"
        ],
        "type": "string"
      },
      "MEMS.RegCert.Models.Requests.AssignSurveyorReviewerRequest": {
        "type": "object",
        "properties": {
          "reviewerId": {
            "type": "string",
            "format": "uuid"
          },
          "reviewerName": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.CompleteInspectionRequest": {
        "type": "object",
        "properties": {
          "findingsText": {
            "type": "string",
            "nullable": true
          },
          "recommendation": {
            "type": "string",
            "nullable": true
          },
          "completedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.ConfirmUploadRequest": {
        "type": "object",
        "properties": {
          "storageKey": {
            "type": "string",
            "nullable": true
          },
          "fileName": {
            "type": "string",
            "nullable": true
          },
          "contentType": {
            "type": "string",
            "nullable": true
          },
          "sizeBytes": {
            "type": "integer",
            "format": "int64"
          },
          "applicationId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.CreateApplicationRequest": {
        "type": "object",
        "properties": {
          "kind": {
            "$ref": "#/components/schemas/MEMS.RegCert.Models.Enums.ApplicationKind"
          },
          "entityId": {
            "type": "string",
            "format": "uuid"
          },
          "serviceId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "formValues": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.CreateCPDRecordRequest": {
        "type": "object",
        "properties": {
          "activityTitle": {
            "type": "string",
            "nullable": true
          },
          "activityType": {
            "type": "string",
            "nullable": true
          },
          "hoursCompleted": {
            "type": "integer",
            "format": "int32"
          },
          "completedDate": {
            "type": "string",
            "format": "date-time"
          },
          "provider": {
            "type": "string",
            "nullable": true
          },
          "notes": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.CreateCurrencyRequest": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "symbol": {
            "type": "string",
            "nullable": true
          },
          "isDefault": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.CreateEntityRequest": {
        "type": "object",
        "properties": {
          "entityTypeDefinitionId": {
            "type": "string",
            "format": "uuid"
          },
          "label": {
            "type": "string",
            "nullable": true
          },
          "ownerCompanyId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "registrationCategoryId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "formValues": {
            "type": "string",
            "nullable": true
          },
          "formSchemaId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.CreateEntityTypeDefinitionRequest": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "defaultRegistrationFee": {
            "type": "number",
            "format": "double"
          },
          "defaultCurrency": {
            "type": "string",
            "nullable": true
          },
          "prerequisiteServiceCodes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "requiresRegulatoryDocCodes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "sortOrder": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.CreateFeeScheduleRequest": {
        "type": "object",
        "properties": {
          "registrationCategoryId": {
            "type": "string",
            "format": "uuid"
          },
          "flatFee": {
            "type": "number",
            "format": "double"
          },
          "bandedJson": {
            "type": "string",
            "nullable": true
          },
          "effectiveFrom": {
            "type": "string",
            "format": "date-time"
          },
          "effectiveTo": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.CreateFormSchemaRequest": {
        "type": "object",
        "properties": {
          "entityTypeDefinitionId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "version": {
            "type": "integer",
            "format": "int32"
          },
          "schemaJson": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.CreateInspectionRequest": {
        "type": "object",
        "properties": {
          "entityId": {
            "type": "string",
            "format": "uuid"
          },
          "applicationId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "vesselOrSiteLabel": {
            "type": "string",
            "nullable": true
          },
          "scheduledDate": {
            "type": "string",
            "format": "date-time"
          },
          "inspectorName": {
            "type": "string",
            "nullable": true
          },
          "inspectorUserId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "notes": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.CreateInvoiceRequest": {
        "type": "object",
        "properties": {
          "applicationId": {
            "type": "string",
            "format": "uuid"
          },
          "entityId": {
            "type": "string",
            "format": "uuid"
          },
          "currency": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.CreateRegistrationCategoryRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "entityTypeDefinitionId": {
            "type": "string",
            "format": "uuid"
          },
          "eligibilityCriteria": {
            "type": "string",
            "nullable": true
          },
          "examples": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.CreateRegistrationRequirementRequest": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "nullable": true
          },
          "entityTypeDefinitionId": {
            "type": "string",
            "format": "uuid"
          },
          "registrationCategoryIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "prerequisiteServiceIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "requiresRegulatoryDocIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.CreateRegulatoryDocumentRequest": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "entityTypeDefinitionId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "isMandatory": {
            "type": "boolean"
          },
          "sortOrder": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.CreateServiceRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "kind": {
            "$ref": "#/components/schemas/MEMS.RegCert.Models.Enums.ApplicationKind"
          },
          "category": {
            "$ref": "#/components/schemas/MEMS.RegCert.Models.Enums.ServiceCategory"
          },
          "serviceTypeId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "workflowTemplateId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "feeAmount": {
            "type": "number",
            "format": "double"
          },
          "currency": {
            "type": "string",
            "nullable": true
          },
          "frequency": {
            "$ref": "#/components/schemas/MEMS.RegCert.Models.Enums.ServiceFrequency"
          },
          "requiresServiceIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "requiresRegulatoryDocIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "isInspectionClass": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.CreateServiceTypeRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "iconCode": {
            "type": "string",
            "nullable": true
          },
          "sortOrder": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.CreateSpecializationRequest": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "sortOrder": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.CreateSurveyorApplicationRequest": {
        "type": "object",
        "properties": {
          "applicantName": {
            "type": "string",
            "nullable": true
          },
          "applicantEmail": {
            "type": "string",
            "nullable": true
          },
          "applicantPhone": {
            "type": "string",
            "nullable": true
          },
          "organisationId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "accreditationType": {
            "type": "string",
            "nullable": true
          },
          "specializations": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "yearsSeaService": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.CreateSurveyorOrganisationRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "shortName": {
            "type": "string",
            "nullable": true
          },
          "organisationType": {
            "type": "string",
            "nullable": true
          },
          "country": {
            "type": "string",
            "nullable": true
          },
          "recognitionScope": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "recognisedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "contactEmail": {
            "type": "string",
            "nullable": true
          },
          "notes": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.CreateWorkflowTemplateRequest": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "stageChain": {
            "type": "string",
            "nullable": true
          },
          "dualExemptionSignoff": {
            "type": "boolean"
          },
          "externalTemplateId": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.DirectUploadRequest": {
        "type": "object",
        "properties": {
          "fileName": {
            "type": "string",
            "nullable": true
          },
          "contentType": {
            "type": "string",
            "nullable": true
          },
          "sizeBytes": {
            "type": "integer",
            "format": "int64"
          },
          "applicationId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.PaymentWebhookRequest": {
        "type": "object",
        "properties": {
          "transactionId": {
            "type": "string",
            "nullable": true
          },
          "invoiceRef": {
            "type": "string",
            "nullable": true
          },
          "amount": {
            "type": "number",
            "format": "double"
          },
          "status": {
            "type": "string",
            "nullable": true
          },
          "signature": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.RecordPaymentRequest": {
        "type": "object",
        "properties": {
          "amount": {
            "type": "number",
            "format": "double"
          },
          "gatewayTransactionId": {
            "type": "string",
            "nullable": true
          },
          "idempotencyKey": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.RegistrationInvoiceRequest": {
        "type": "object",
        "properties": {
          "entityTypeId": {
            "type": "string",
            "nullable": true
          },
          "categoryId": {
            "type": "string",
            "nullable": true
          },
          "entityId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "formValuesJson": {
            "type": "string",
            "nullable": true
          },
          "serviceCode": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.RegistrationSubmitRequest": {
        "type": "object",
        "properties": {
          "entityId": {
            "type": "string",
            "format": "uuid"
          },
          "invoiceId": {
            "type": "string",
            "format": "uuid"
          },
          "formValuesJson": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.RenewSurveyorRequest": {
        "type": "object",
        "properties": {
          "newExpiryDate": {
            "type": "string",
            "format": "date-time"
          },
          "notes": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.RevokeCertificateRequest": {
        "type": "object",
        "properties": {
          "reason": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.SaveDraftRequest": {
        "type": "object",
        "properties": {
          "flowKey": {
            "type": "string",
            "nullable": true
          },
          "payloadJson": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.SaveFormBuilderRequest": {
        "type": "object",
        "properties": {
          "fields": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MEMS.RegCert.Models.DTOs.FormFieldDto"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.ServiceFlowSubmitRequest": {
        "type": "object",
        "properties": {
          "entityId": {
            "type": "string",
            "format": "uuid"
          },
          "serviceCode": {
            "type": "string",
            "nullable": true
          },
          "invoiceId": {
            "type": "string",
            "format": "uuid"
          },
          "formValuesJson": {
            "type": "string",
            "nullable": true
          },
          "categoryId": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.StageDecisionRequest": {
        "type": "object",
        "properties": {
          "decision": {
            "type": "string",
            "nullable": true
          },
          "note": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.SurveyorApplicationDecisionRequest": {
        "type": "object",
        "properties": {
          "status": {
            "$ref": "#/components/schemas/MEMS.RegCert.Models.Enums.SurveyorApplicationStatus"
          },
          "reviewNotes": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.SurveyorClarificationRequest": {
        "type": "object",
        "properties": {
          "note": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.SuspendCertificateRequest": {
        "type": "object",
        "properties": {
          "reason": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.SuspendSurveyorRequest": {
        "type": "object",
        "properties": {
          "reason": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.UpdateCurrencyRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "symbol": {
            "type": "string",
            "nullable": true
          },
          "isDefault": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.UpdateEntityRequest": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string",
            "nullable": true
          },
          "registrationCategoryId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "formValues": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.UpdateEntityTypeDefinitionRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "defaultRegistrationFee": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "defaultCurrency": {
            "type": "string",
            "nullable": true
          },
          "prerequisiteServiceCodes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "requiresRegulatoryDocCodes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "sortOrder": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "isActive": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.UpdateInspectionRequest": {
        "type": "object",
        "properties": {
          "scheduledDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "inspectorName": {
            "type": "string",
            "nullable": true
          },
          "inspectorUserId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "notes": {
            "type": "string",
            "nullable": true
          },
          "findingsJson": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.UpdateInspectionStatusRequest": {
        "type": "object",
        "properties": {
          "status": {
            "$ref": "#/components/schemas/MEMS.RegCert.Models.Enums.InspectionStatus"
          },
          "notes": {
            "type": "string",
            "nullable": true
          },
          "completedDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.UpdateOrganisationStatusRequest": {
        "type": "object",
        "properties": {
          "status": {
            "$ref": "#/components/schemas/MEMS.RegCert.Models.Enums.OrganisationStatus"
          },
          "notes": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.UpdateRegistrationCategoryRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "eligibilityCriteria": {
            "type": "string",
            "nullable": true
          },
          "examples": {
            "type": "string",
            "nullable": true
          },
          "isActive": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.UpdateRegistrationRequirementRequest": {
        "type": "object",
        "properties": {
          "registrationCategoryIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "prerequisiteServiceIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "requiresRegulatoryDocIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.UpdateRegulatoryDocumentRequest": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "entityTypeDefinitionId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "isMandatory": {
            "type": "boolean",
            "nullable": true
          },
          "sortOrder": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.UpdateServiceTypeRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "iconCode": {
            "type": "string",
            "nullable": true
          },
          "sortOrder": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.UpdateWorkflowTemplateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "stageChain": {
            "type": "string",
            "nullable": true
          },
          "dualExemptionSignoff": {
            "type": "boolean",
            "nullable": true
          },
          "externalTemplateId": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.UploadUrlRequest": {
        "type": "object",
        "properties": {
          "fileName": {
            "type": "string",
            "nullable": true
          },
          "contentType": {
            "type": "string",
            "nullable": true
          },
          "sizeBytes": {
            "type": "integer",
            "format": "int64"
          },
          "applicationId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.WorkflowCallbackRequest": {
        "type": "object",
        "properties": {
          "eventType": {
            "type": "string",
            "nullable": true
          },
          "workflowId": {
            "type": "string",
            "format": "uuid"
          },
          "workflowTypeId": {
            "type": "string",
            "format": "uuid"
          },
          "workflowTypeName": {
            "type": "string",
            "nullable": true
          },
          "workspaceId": {
            "type": "string",
            "format": "uuid"
          },
          "referenceType": {
            "type": "string",
            "nullable": true
          },
          "referenceId": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "type": "string",
            "nullable": true
          },
          "currentWorkflowStageId": {
            "type": "string",
            "format": "uuid"
          },
          "currentStageName": {
            "type": "string",
            "nullable": true
          },
          "remark": {
            "type": "string",
            "nullable": true
          },
          "dateOccurred": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "MEMS.RegCert.Models.Requests.WorkflowRejectRequest": {
        "type": "object",
        "properties": {
          "reason": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      }
    },
    "securitySchemes": {
      "Bearer": {
        "type": "http",
        "description": "JWT access token from MEMS IAM. Example: `Bearer {token}`",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    }
  },
  "security": [
    {
      "Bearer": [ ]
    }
  ],
  "tags": [
    {
      "name": "Admin",
      "description": "System configuration: registration categories, services, fees, forms, workflows, and reference data."
    },
    {
      "name": "Applications",
      "description": "Service and registration applications."
    },
    {
      "name": "Audit",
      "description": "System audit trail for compliance and security review."
    },
    {
      "name": "Certificates",
      "description": "Certificate and instrument lifecycle monitoring, suspend, and revoke."
    },
    {
      "name": "Dashboard",
      "description": "Role-specific KPIs, alerts, and recent activity."
    },
    {
      "name": "Documents",
      "description": "MinIO presigned uploads and document metadata."
    },
    {
      "name": "Drafts",
      "description": "Persist wizard state across sessions (reg, svc, prs flows)."
    },
    {
      "name": "Entities",
      "description": "Registered companies, vessels, and assets (draft and active)."
    },
    {
      "name": "Inspections",
      "description": "Vessel and site inspections: schedule, complete, and findings."
    },
    {
      "name": "Invoices",
      "description": "Invoice generation, ledger, payment, and revenue statistics."
    },
    {
      "name": "Notifications",
      "description": "In-app notification bell feed."
    },
    {
      "name": "Payments",
      "description": "Payment recording and gateway webhooks."
    },
    {
      "name": "Pipeline",
      "description": "Per-application approval pipeline stages."
    },
    {
      "name": "Portfolio",
      "description": "Applicant portfolio: entities by type."
    },
    {
      "name": "Post-Registration Services",
      "description": "Post-registration service wizard (SVC-7â€¦SVC-14)."
    },
    {
      "name": "Pre-Registration Services",
      "description": "Pre-registration service wizard (SVC-1â€¦SVC-6)."
    },
    {
      "name": "Registration",
      "description": "8-step entity registration wizard: types, forms, compliance, invoice, submit."
    },
    {
      "name": "Surveyor Applications",
      "description": "Surveyor accreditation applications: submit, review, approve, reject."
    },
    {
      "name": "Surveyor Organisations",
      "description": "Recognised classification societies and survey firms."
    },
    {
      "name": "Surveyor Reports",
      "description": "Surveyor module analytics and dashboard KPIs."
    },
    {
      "name": "Surveyors",
      "description": "Accredited surveyors: register, renew, suspend, and CPD."
    },
    {
      "name": "Uploads",
      "description": "Direct document upload registration (metadata + storage key)."
    },
    {
      "name": "Verification",
      "description": "Public certificate verification via QR token."
    },
    {
      "name": "Workflow",
      "description": "Multi-stage application approvals and external workflow callbacks."
    }
  ]
}