{
  "version": "1.0",
  "modules": [
    {
      "name": "Submissions",
      "prefix": "/submissions",
      "endpoints": [
        {
          "method": "POST",
          "path": "/",
          "summary": "Create New Submission",
          "description": "Creates a new submission record with name and email. Validates that name contains at least 2 characters and does not exceed 100 characters, and that email does not exceed 255 characters. Returns 400 if validation constraints are violated.",
          "request_body": {
            "schema_name": "SubmissionCreate",
            "fields": [
              {
                "name": "name",
                "type": "str",
                "required": false
              },
              {
                "name": "email",
                "type": "EmailStr",
                "required": false
              }
            ]
          },
          "response": {
            "schema_name": "SubmissionResponse",
            "fields": [
              {
                "name": "name",
                "type": "str",
                "required": false
              },
              {
                "name": "email",
                "type": "EmailStr",
                "required": false
              },
              {
                "name": "id",
                "type": "StrId",
                "required": true
              },
              {
                "name": "created_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "updated_at",
                "type": "datetime",
                "required": true
              }
            ],
            "is_list": false
          },
          "status_code": 201
        },
        {
          "method": "GET",
          "path": "/",
          "summary": "List All Submissions",
          "description": "Returns a paginated list of all submissions ordered by creation date descending (newest first). Supports optional email filter and pagination via limit and offset parameters.",
          "query_params": [
            {
              "name": "limit",
              "type": "int",
              "required": false,
              "default": 20
            },
            {
              "name": "offset",
              "type": "int",
              "required": false,
              "default": 0
            },
            {
              "name": "email",
              "type": "str | None",
              "required": false
            }
          ],
          "response": {
            "schema_name": "PaginatedSubmissionResponse",
            "fields": [
              {
                "name": "items",
                "type": "list[SubmissionResponse]",
                "required": true
              },
              {
                "name": "total",
                "type": "int",
                "required": true
              },
              {
                "name": "limit",
                "type": "int",
                "required": true
              },
              {
                "name": "offset",
                "type": "int",
                "required": true
              }
            ],
            "is_list": false
          },
          "status_code": 200
        },
        {
          "method": "GET",
          "path": "/{submission_id}",
          "summary": "Get Submission By ID",
          "description": "Retrieves a single submission by its unique identifier. Returns 404 if the submission does not exist.",
          "path_params": [
            {
              "name": "submission_id",
              "type": "str"
            }
          ],
          "response": {
            "schema_name": "SubmissionResponse",
            "fields": [
              {
                "name": "name",
                "type": "str",
                "required": false
              },
              {
                "name": "email",
                "type": "EmailStr",
                "required": false
              },
              {
                "name": "id",
                "type": "StrId",
                "required": true
              },
              {
                "name": "created_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "updated_at",
                "type": "datetime",
                "required": true
              }
            ],
            "is_list": false
          },
          "status_code": 200
        },
        {
          "method": "PATCH",
          "path": "/{submission_id}",
          "summary": "Update Submission",
          "description": "Updates an existing submission record. Only provided fields are updated. Returns 404 if submission not found, 400 if validation constraints are violated.",
          "path_params": [
            {
              "name": "submission_id",
              "type": "str"
            }
          ],
          "request_body": {
            "schema_name": "SubmissionUpdate",
            "fields": [
              {
                "name": "name",
                "type": "str | None",
                "required": false
              },
              {
                "name": "email",
                "type": "EmailStr | None",
                "required": false
              }
            ]
          },
          "response": {
            "schema_name": "SubmissionResponse",
            "fields": [
              {
                "name": "name",
                "type": "str",
                "required": false
              },
              {
                "name": "email",
                "type": "EmailStr",
                "required": false
              },
              {
                "name": "id",
                "type": "StrId",
                "required": true
              },
              {
                "name": "created_at",
                "type": "datetime",
                "required": true
              },
              {
                "name": "updated_at",
                "type": "datetime",
                "required": true
              }
            ],
            "is_list": false
          },
          "status_code": 200
        },
        {
          "method": "DELETE",
          "path": "/{submission_id}",
          "summary": "Delete Submission",
          "description": "Deletes an existing submission record. Returns 404 if submission not found, 409 if deletion would violate referential integrity.",
          "path_params": [
            {
              "name": "submission_id",
              "type": "str"
            }
          ],
          "status_code": 204
        }
      ]
    }
  ],
  "enums": {}
}