{
  "openapi": "3.0.4",
  "info": {
    "title": "Rafflex Public API",
    "description": "Project-scoped API for Pro project owners and their team. Send X-Api-Key. 60 requests/minute per project, including at most 10 writes. JSON enums use integer values. Manage keys in your project's API access tab.",
    "version": "v1"
  },
  "paths": {
    "/api/v1/projects": {
      "get": {
        "tags": [
          "Projects"
        ],
        "summary": "Get the single project accessible to this key.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Rafflex.Api.Models.PublicProjectResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Rafflex.Api.Models.PublicProjectResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Rafflex.Api.Models.PublicProjectResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{projectId}": {
      "get": {
        "tags": [
          "Projects"
        ],
        "summary": "Get project details.",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicProjectResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicProjectResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicProjectResponse"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Projects"
        ],
        "summary": "Replace editable project details. Requires the creator to remain an owner or admin.",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Rafflex.Application.Projects.Dtos.UpdateProjectRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Rafflex.Application.Projects.Dtos.UpdateProjectRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Rafflex.Application.Projects.Dtos.UpdateProjectRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicProjectResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicProjectResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicProjectResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{projectId}/reward-projects": {
      "get": {
        "tags": [
          "Projects"
        ],
        "summary": "Search public reward projects by name or X handle before creating a raffle.",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "search",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Rafflex.Api.Models.PublicRewardProjectResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Rafflex.Api.Models.PublicRewardProjectResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Rafflex.Api.Models.PublicRewardProjectResponse"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Projects"
        ],
        "summary": "Find or create a public reward project using its X profile. Does not create a host project.",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Rafflex.Application.Projects.Dtos.AddCommunityProjectRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Rafflex.Application.Projects.Dtos.AddCommunityProjectRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Rafflex.Application.Projects.Dtos.AddCommunityProjectRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicRewardProjectResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicRewardProjectResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicRewardProjectResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{projectId}/stats": {
      "get": {
        "tags": [
          "Projects"
        ],
        "summary": "Read project campaign statistics for up to 90 days.",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "days",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 30
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicProjectStatsResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicProjectStatsResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicProjectStatsResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{projectId}/raffles": {
      "get": {
        "tags": [
          "Raffles"
        ],
        "summary": "List this project's raffles, including drafts. Supports page, pageSize, search, statuses and start-date filters.",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "NewestFirst",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "Search",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ProjectIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid"
              }
            }
          },
          {
            "name": "HostProjectIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid"
              }
            }
          },
          {
            "name": "RewardProjectIds",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid"
              }
            }
          },
          {
            "name": "Types",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/Rafflex.Core.Raffles.Enums.RaffleTypeEnum"
              }
            }
          },
          {
            "name": "Statuses",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/Rafflex.Core.Raffles.Enums.RaffleStatusEnum"
              }
            }
          },
          {
            "name": "Visibilities",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/Rafflex.Core.Raffles.Enums.RaffleVisibilityEnum"
              }
            }
          },
          {
            "name": "RequiresPremiumSubscription",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "OnlyWithAvailableEntries",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "IncludeUpcoming",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "IncludeLive",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "IncludeEnded",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "StartsFrom",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "StartsTo",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "Page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Application.Abstractions.PagedResult_Rafflex.Application.Raffles.Dtos.RaffleSummaryResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Application.Abstractions.PagedResult_Rafflex.Application.Raffles.Dtos.RaffleSummaryResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Application.Abstractions.PagedResult_Rafflex.Application.Raffles.Dtos.RaffleSummaryResponse"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Raffles"
        ],
        "summary": "Create a draft. HostProjectId must match the project in the route and key.",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.AddRaffleDraftRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.AddRaffleDraftRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.AddRaffleDraftRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicRaffleResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicRaffleResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicRaffleResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/raffles/{raffleId}": {
      "get": {
        "tags": [
          "Raffles"
        ],
        "summary": "Read raffle configuration and lifecycle status, without private winner information or share tokens.",
        "parameters": [
          {
            "name": "raffleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicRaffleResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicRaffleResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicRaffleResponse"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Raffles"
        ],
        "summary": "Replace a draft's configuration. Published raffles use the patch endpoint.",
        "parameters": [
          {
            "name": "raffleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.UpdateRaffleDraftRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.UpdateRaffleDraftRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.UpdateRaffleDraftRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicRaffleResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicRaffleResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicRaffleResponse"
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "Raffles"
        ],
        "summary": "Partially update a raffle. Omitted fields are preserved; null clears nullable fields. Published raffle restrictions still apply.",
        "parameters": [
          {
            "name": "raffleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": { }
            },
            "text/json": {
              "schema": { }
            },
            "application/*+json": {
              "schema": { }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicRaffleResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicRaffleResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicRaffleResponse"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Raffles"
        ],
        "summary": "Delete a draft. Published raffles cannot be deleted.",
        "parameters": [
          {
            "name": "raffleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/raffles/{raffleId}/publish": {
      "post": {
        "tags": [
          "Raffles"
        ],
        "summary": "Publish a draft using its configured opening and closing times.",
        "parameters": [
          {
            "name": "raffleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicRaffleResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicRaffleResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicRaffleResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/raffles/{raffleId}/finalize": {
      "post": {
        "tags": [
          "Raffles"
        ],
        "summary": "Finalize a raffle early, applying Rafflex's normal winner selection rules.",
        "parameters": [
          {
            "name": "raffleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicRaffleResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicRaffleResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicRaffleResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/raffles/{raffleId}/image": {
      "post": {
        "tags": [
          "Raffles"
        ],
        "summary": "Upload the raffle image, up to 10 MB.",
        "parameters": [
          {
            "name": "raffleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary"
                  }
                }
              },
              "encoding": {
                "file": {
                  "style": "form"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.RaffleAssetUploadResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.RaffleAssetUploadResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.RaffleAssetUploadResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/raffles/{raffleId}/entries": {
      "get": {
        "tags": [
          "Raffles"
        ],
        "summary": "Read paginated entries. UpdatedSince includes status changes to existing registrations.",
        "parameters": [
          {
            "name": "raffleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "Page",
            "in": "query",
            "schema": {
              "maximum": 1000000,
              "minimum": 1,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "schema": {
              "maximum": 100,
              "minimum": 1,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "UpdatedSince",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Application.Abstractions.PagedResult_Rafflex.Application.Raffles.Dtos.RaffleEntryResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Application.Abstractions.PagedResult_Rafflex.Application.Raffles.Dtos.RaffleEntryResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Application.Abstractions.PagedResult_Rafflex.Application.Raffles.Dtos.RaffleEntryResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/raffles/{raffleId}/winners": {
      "get": {
        "tags": [
          "Raffles"
        ],
        "summary": "Read finalized, active winners. Returns 409 before finalization. Includes winner wallet and social fields, never private instructions or share tokens.",
        "parameters": [
          {
            "name": "raffleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "Page",
            "in": "query",
            "schema": {
              "maximum": 1000000,
              "minimum": 1,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "schema": {
              "maximum": 100,
              "minimum": 1,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "UpdatedSince",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Application.Abstractions.PagedResult_Rafflex.Application.Raffles.Dtos.RaffleWinnerResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Application.Abstractions.PagedResult_Rafflex.Application.Raffles.Dtos.RaffleWinnerResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Application.Abstractions.PagedResult_Rafflex.Application.Raffles.Dtos.RaffleWinnerResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/raffles/{raffleId}/stats": {
      "get": {
        "tags": [
          "Raffles"
        ],
        "summary": "Read aggregate entry and winner counts without participant identities.",
        "parameters": [
          {
            "name": "raffleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicRaffleStatsResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicRaffleStatsResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicRaffleStatsResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/raffles/{raffleId}/winner-deliveries": {
      "get": {
        "tags": [
          "Raffles"
        ],
        "summary": "Read automatic winner delivery status. Returns an empty array when delivery is not configured.",
        "parameters": [
          {
            "name": "raffleId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Rafflex.Api.Models.PublicWinnerDeliveryResponse"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Rafflex.Api.Models.PublicWinnerDeliveryResponse"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Rafflex.Api.Models.PublicWinnerDeliveryResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{projectId}/raffle-templates": {
      "get": {
        "tags": [
          "Templates"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "Search",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Application.Abstractions.PagedResult_Rafflex.Application.Raffles.Dtos.RaffleTemplateResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Application.Abstractions.PagedResult_Rafflex.Application.Raffles.Dtos.RaffleTemplateResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Application.Abstractions.PagedResult_Rafflex.Application.Raffles.Dtos.RaffleTemplateResponse"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Templates"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.SaveRaffleTemplateRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.SaveRaffleTemplateRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.SaveRaffleTemplateRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.RaffleTemplateResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.RaffleTemplateResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.RaffleTemplateResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{projectId}/raffle-templates/{templateId}": {
      "get": {
        "tags": [
          "Templates"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "templateId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.RaffleTemplateResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.RaffleTemplateResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.RaffleTemplateResponse"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Templates"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "templateId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.SaveRaffleTemplateRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.SaveRaffleTemplateRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.SaveRaffleTemplateRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.RaffleTemplateResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.RaffleTemplateResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.RaffleTemplateResponse"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Templates"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "templateId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/v1/projects/{projectId}/raffle-templates/default": {
      "get": {
        "tags": [
          "Templates"
        ],
        "summary": "Get the project's default template, or 204 when no default is configured.",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.RaffleTemplateResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.RaffleTemplateResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.RaffleTemplateResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/projects/{projectId}/raffle-templates/{templateId}/raffles": {
      "post": {
        "tags": [
          "Templates"
        ],
        "summary": "Create a draft from a saved template, overriding its name, reward project, network, absolute schedule and optionally winner count.",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "templateId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Rafflex.Api.Models.CreateRaffleFromTemplateRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Rafflex.Api.Models.CreateRaffleFromTemplateRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Rafflex.Api.Models.CreateRaffleFromTemplateRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicRaffleResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicRaffleResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicRaffleResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/usage": {
      "get": {
        "tags": [
          "Usage"
        ],
        "summary": "Read project API usage and shared project verification allowances. This request counts toward API usage.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicApiUsageResponse"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicApiUsageResponse"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rafflex.Api.Models.PublicApiUsageResponse"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Rafflex.Api.Models.CreateRaffleFromTemplateRequest": {
        "required": [
          "name"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          },
          "rewardProjectId": {
            "type": "string",
            "format": "uuid"
          },
          "networkId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "startsAt": {
            "type": "string",
            "format": "date-time"
          },
          "endsAt": {
            "type": "string",
            "format": "date-time"
          },
          "winnerCount": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Api.Models.PublicApiUsageResponse": {
        "type": "object",
        "properties": {
          "projectId": {
            "type": "string",
            "format": "uuid"
          },
          "monthStartsAt": {
            "type": "string",
            "format": "date-time"
          },
          "monthlyRequests": {
            "type": "integer",
            "format": "int64"
          },
          "requestsPerMinute": {
            "type": "integer",
            "format": "int32"
          },
          "writesPerMinute": {
            "type": "integer",
            "format": "int32"
          },
          "requestsRemaining": {
            "type": "integer",
            "format": "int32"
          },
          "writesRemaining": {
            "type": "integer",
            "format": "int32"
          },
          "windowResetsAt": {
            "type": "string",
            "format": "date-time"
          },
          "xChecksUsed": {
            "type": "integer",
            "format": "int32"
          },
          "xChecksLimit": {
            "type": "integer",
            "format": "int32"
          },
          "onChainChecksUsed": {
            "type": "integer",
            "format": "int32"
          },
          "onChainChecksLimit": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Api.Models.PublicProjectResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "slug": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "supply": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "networkId": {
            "type": "string",
            "format": "uuid"
          },
          "logoUrl": {
            "type": "string",
            "nullable": true
          },
          "bannerUrl": {
            "type": "string",
            "nullable": true
          },
          "socialLinks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Rafflex.Application.Projects.Dtos.ProjectSocialLinkResponse"
            },
            "nullable": true
          },
          "events": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Rafflex.Application.Projects.Dtos.ProjectEventResponse"
            },
            "nullable": true
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Api.Models.PublicProjectStatsResponse": {
        "type": "object",
        "properties": {
          "from": {
            "type": "string",
            "format": "date-time"
          },
          "to": {
            "type": "string",
            "format": "date-time"
          },
          "totalRafflesCreated": {
            "type": "integer",
            "format": "int32"
          },
          "totalEntries": {
            "type": "number",
            "format": "double"
          },
          "totalWinners": {
            "type": "integer",
            "format": "int32"
          },
          "topRaffles": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Rafflex.Application.Projects.Dtos.NamedCountStatResponse"
            },
            "nullable": true
          },
          "entriesPerHour": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Rafflex.Application.Projects.Dtos.TimeCountStatResponse"
            },
            "nullable": true
          },
          "entrySources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Rafflex.Application.Projects.Dtos.EntrySourceCountStatResponse"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Api.Models.PublicRaffleResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "hostProjectId": {
            "type": "string",
            "format": "uuid"
          },
          "rewardProjectId": {
            "type": "string",
            "format": "uuid"
          },
          "networkId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "slug": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "shortDescription": {
            "type": "string",
            "nullable": true
          },
          "imageUrl": {
            "type": "string",
            "nullable": true
          },
          "type": {
            "$ref": "#/components/schemas/Rafflex.Core.Raffles.Enums.RaffleTypeEnum"
          },
          "status": {
            "$ref": "#/components/schemas/Rafflex.Core.Raffles.Enums.RaffleStatusEnum"
          },
          "visibility": {
            "$ref": "#/components/schemas/Rafflex.Core.Raffles.Enums.RaffleVisibilityEnum"
          },
          "startsAt": {
            "type": "string",
            "format": "date-time"
          },
          "endsAt": {
            "type": "string",
            "format": "date-time"
          },
          "winnerCount": {
            "type": "integer",
            "format": "int32"
          },
          "entryCount": {
            "type": "integer",
            "format": "int32"
          },
          "maximumTotalEntries": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "startDelayMinutes": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "durationMinutes": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "hasPassword": {
            "type": "boolean"
          },
          "hideEntryCount": {
            "type": "boolean"
          },
          "requiresPremiumSubscription": {
            "type": "boolean"
          },
          "publicWinnerInformation": {
            "type": "string",
            "nullable": true
          },
          "finalizedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "requirements": {
            "$ref": "#/components/schemas/Rafflex.Core.Competitions.Models.Requirements.Requirements"
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Api.Models.PublicRaffleStatsResponse": {
        "type": "object",
        "properties": {
          "raffleId": {
            "type": "string",
            "format": "uuid"
          },
          "totalEntries": {
            "type": "integer",
            "format": "int32"
          },
          "activeWinners": {
            "type": "integer",
            "format": "int32"
          },
          "entriesByStatus": {
            "type": "object",
            "properties": {
              "PendingValidation": {
                "type": "integer",
                "format": "int32"
              },
              "Validating": {
                "type": "integer",
                "format": "int32"
              },
              "Eligible": {
                "type": "integer",
                "format": "int32"
              },
              "Ineligible": {
                "type": "integer",
                "format": "int32"
              },
              "NeedsReview": {
                "type": "integer",
                "format": "int32"
              },
              "Withdrawn": {
                "type": "integer",
                "format": "int32"
              },
              "Disqualified": {
                "type": "integer",
                "format": "int32"
              }
            },
            "additionalProperties": false,
            "nullable": true
          },
          "entriesBySource": {
            "type": "object",
            "properties": {
              "Web": {
                "type": "integer",
                "format": "int32"
              },
              "Discord": {
                "type": "integer",
                "format": "int32"
              },
              "AdministrativeImport": {
                "type": "integer",
                "format": "int32"
              },
              "Manual": {
                "type": "integer",
                "format": "int32"
              }
            },
            "additionalProperties": false,
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Api.Models.PublicRewardProjectResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "slug": {
            "type": "string",
            "nullable": true
          },
          "networkId": {
            "type": "string",
            "format": "uuid"
          },
          "xHandle": {
            "type": "string",
            "nullable": true
          },
          "logoUrl": {
            "type": "string",
            "nullable": true
          },
          "isCommunitySubmitted": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Api.Models.PublicWinnerDeliveryResponse": {
        "type": "object",
        "properties": {
          "status": {
            "$ref": "#/components/schemas/Rafflex.Core.Raffles.Enums.RaffleWinnerDeliveryStatusEnum"
          },
          "attemptCount": {
            "type": "integer",
            "format": "int32"
          },
          "queuedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "lastAttemptAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "deliveredAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "errorCode": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Application.Abstractions.PagedResult_Rafflex.Application.Raffles.Dtos.RaffleEntryResponse": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.RaffleEntryResponse"
            },
            "nullable": true
          },
          "page": {
            "type": "integer",
            "format": "int32"
          },
          "pageSize": {
            "type": "integer",
            "format": "int32"
          },
          "totalCount": {
            "type": "integer",
            "format": "int32"
          },
          "totalPages": {
            "type": "integer",
            "format": "int32",
            "readOnly": true
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Application.Abstractions.PagedResult_Rafflex.Application.Raffles.Dtos.RaffleSummaryResponse": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.RaffleSummaryResponse"
            },
            "nullable": true
          },
          "page": {
            "type": "integer",
            "format": "int32"
          },
          "pageSize": {
            "type": "integer",
            "format": "int32"
          },
          "totalCount": {
            "type": "integer",
            "format": "int32"
          },
          "totalPages": {
            "type": "integer",
            "format": "int32",
            "readOnly": true
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Application.Abstractions.PagedResult_Rafflex.Application.Raffles.Dtos.RaffleTemplateResponse": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.RaffleTemplateResponse"
            },
            "nullable": true
          },
          "page": {
            "type": "integer",
            "format": "int32"
          },
          "pageSize": {
            "type": "integer",
            "format": "int32"
          },
          "totalCount": {
            "type": "integer",
            "format": "int32"
          },
          "totalPages": {
            "type": "integer",
            "format": "int32",
            "readOnly": true
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Application.Abstractions.PagedResult_Rafflex.Application.Raffles.Dtos.RaffleWinnerResponse": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.RaffleWinnerResponse"
            },
            "nullable": true
          },
          "page": {
            "type": "integer",
            "format": "int32"
          },
          "pageSize": {
            "type": "integer",
            "format": "int32"
          },
          "totalCount": {
            "type": "integer",
            "format": "int32"
          },
          "totalPages": {
            "type": "integer",
            "format": "int32",
            "readOnly": true
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Application.Projects.Dtos.AddCommunityProjectRequest": {
        "type": "object",
        "properties": {
          "supply": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "events": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Rafflex.Application.Projects.Dtos.AddProjectEventRequest"
            },
            "nullable": true
          },
          "xHandle": {
            "type": "string",
            "nullable": true
          },
          "networkId": {
            "type": "string",
            "format": "uuid"
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Application.Projects.Dtos.AddProjectEventRequest": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "allocationMode": {
            "$ref": "#/components/schemas/Rafflex.Core.Projects.Enums.AllocationModeEnum"
          },
          "startsAt": {
            "type": "string",
            "format": "date-time"
          },
          "price": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "currency": {
            "type": "string",
            "nullable": true
          },
          "supply": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Application.Projects.Dtos.EntrySourceCountStatResponse": {
        "type": "object",
        "properties": {
          "source": {
            "$ref": "#/components/schemas/Rafflex.Core.Raffles.Enums.RaffleEntrySourceEnum"
          },
          "count": {
            "type": "number",
            "format": "double"
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Application.Projects.Dtos.NamedCountStatResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "count": {
            "type": "number",
            "format": "double"
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Application.Projects.Dtos.ProjectEventResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "type": {
            "$ref": "#/components/schemas/Rafflex.Core.Projects.Enums.ProjectEventTypeEnum"
          },
          "allocationMode": {
            "$ref": "#/components/schemas/Rafflex.Core.Projects.Enums.AllocationModeEnum"
          },
          "startsAt": {
            "type": "string",
            "format": "date-time"
          },
          "endsAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "price": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "currency": {
            "type": "string",
            "nullable": true
          },
          "supply": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "eventUrl": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Application.Projects.Dtos.ProjectSocialLinkRequest": {
        "type": "object",
        "properties": {
          "platform": {
            "$ref": "#/components/schemas/Rafflex.Core.Projects.Enums.ProjectSocialPlatformEnum"
          },
          "url": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Application.Projects.Dtos.ProjectSocialLinkResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "platform": {
            "$ref": "#/components/schemas/Rafflex.Core.Projects.Enums.ProjectSocialPlatformEnum"
          },
          "url": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Application.Projects.Dtos.TimeCountStatResponse": {
        "type": "object",
        "properties": {
          "time": {
            "type": "string",
            "format": "date-time"
          },
          "count": {
            "type": "number",
            "format": "double"
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Application.Projects.Dtos.UpdateProjectRequest": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string",
            "nullable": true
          },
          "supply": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "networkId": {
            "type": "string",
            "format": "uuid"
          },
          "socialLinks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Rafflex.Application.Projects.Dtos.ProjectSocialLinkRequest"
            },
            "nullable": true
          },
          "events": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Rafflex.Application.Projects.Dtos.AddProjectEventRequest"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Application.Raffles.Dtos.AddRaffleDraftRequest": {
        "type": "object",
        "properties": {
          "hostProjectId": {
            "type": "string",
            "format": "uuid"
          },
          "rewardProjectId": {
            "type": "string",
            "format": "uuid"
          },
          "networkId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "shortDescription": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "tutorialVideoUrl": {
            "type": "string",
            "nullable": true
          },
          "type": {
            "$ref": "#/components/schemas/Rafflex.Core.Raffles.Enums.RaffleTypeEnum"
          },
          "visibility": {
            "$ref": "#/components/schemas/Rafflex.Core.Raffles.Enums.RaffleVisibilityEnum"
          },
          "hideEntryCount": {
            "type": "boolean"
          },
          "requiresPremiumSubscription": {
            "type": "boolean"
          },
          "startDelayMinutes": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "startsAt": {
            "type": "string",
            "format": "date-time"
          },
          "durationMinutes": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "endsAt": {
            "type": "string",
            "format": "date-time"
          },
          "winnerCount": {
            "type": "integer",
            "format": "int32"
          },
          "maximumTotalEntries": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "publicWinnerInformation": {
            "type": "string",
            "nullable": true
          },
          "privateWinnerInformation": {
            "type": "string",
            "nullable": true
          },
          "password": {
            "type": "string",
            "nullable": true
          },
          "clearPassword": {
            "type": "boolean"
          },
          "discordSettings": {
            "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.RaffleDiscordSettingsRequest"
          },
          "winnerDelivery": {
            "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.RaffleWinnerDeliveryRequest"
          },
          "requirements": {
            "$ref": "#/components/schemas/Rafflex.Core.Competitions.Models.Requirements.Requirements"
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Application.Raffles.Dtos.RaffleAssetUploadResponse": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Application.Raffles.Dtos.RaffleDiscordSettingsRequest": {
        "type": "object",
        "properties": {
          "discordServerId": {
            "type": "string",
            "description": "Required when Discord announcements are enabled. Use a managed server ID from get_discord_configuration.",
            "nullable": true
          },
          "announcementChannelId": {
            "type": "string",
            "description": "Required when Discord announcements are enabled. Channel ID used for raffle announcements.",
            "nullable": true
          },
          "winnersChannelId": {
            "type": "string",
            "description": "Required when Discord announcements are enabled. Channel ID used for winner announcements.",
            "nullable": true
          },
          "mintReminderChannelId": {
            "type": "string",
            "description": "Required when Discord announcements are enabled. Channel ID used for mint reminders.",
            "nullable": true
          },
          "mentionRoleId": {
            "type": "string",
            "description": "Optional mention role ID; @everyone uses the server ID and @here uses 'here'.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Application.Raffles.Dtos.RaffleEntryResponse": {
        "type": "object",
        "properties": {
          "requirements": {
            "$ref": "#/components/schemas/Rafflex.Core.Competitions.Models.Requirements.Requirements"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "raffleId": {
            "type": "string",
            "format": "uuid"
          },
          "userId": {
            "type": "string",
            "format": "uuid"
          },
          "status": {
            "$ref": "#/components/schemas/Rafflex.Core.Raffles.Enums.RaffleEntryStatusEnum"
          },
          "source": {
            "$ref": "#/components/schemas/Rafflex.Core.Raffles.Enums.RaffleEntrySourceEnum"
          },
          "walletAddress": {
            "type": "string",
            "nullable": true
          },
          "totalWeight": {
            "type": "number",
            "format": "double"
          },
          "registeredAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Application.Raffles.Dtos.RaffleSummaryResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "hostProjectId": {
            "type": "string",
            "format": "uuid"
          },
          "hostProjectName": {
            "type": "string",
            "nullable": true
          },
          "rewardProjectId": {
            "type": "string",
            "format": "uuid"
          },
          "rewardProjectName": {
            "type": "string",
            "nullable": true
          },
          "networkId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "networkName": {
            "type": "string",
            "nullable": true
          },
          "networkIsEvm": {
            "type": "boolean"
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "slug": {
            "type": "string",
            "nullable": true
          },
          "shortDescription": {
            "type": "string",
            "nullable": true
          },
          "imageUrl": {
            "type": "string",
            "nullable": true
          },
          "type": {
            "$ref": "#/components/schemas/Rafflex.Core.Raffles.Enums.RaffleTypeEnum"
          },
          "status": {
            "$ref": "#/components/schemas/Rafflex.Core.Raffles.Enums.RaffleStatusEnum"
          },
          "visibility": {
            "$ref": "#/components/schemas/Rafflex.Core.Raffles.Enums.RaffleVisibilityEnum"
          },
          "startsAt": {
            "type": "string",
            "format": "date-time"
          },
          "endsAt": {
            "type": "string",
            "format": "date-time"
          },
          "winnerCount": {
            "type": "integer",
            "format": "int32"
          },
          "maximumTotalEntries": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "entryCount": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Application.Raffles.Dtos.RaffleTemplateConfiguration": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "shortDescription": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "tutorialVideoUrl": {
            "type": "string",
            "nullable": true
          },
          "type": {
            "$ref": "#/components/schemas/Rafflex.Core.Raffles.Enums.RaffleTypeEnum"
          },
          "visibility": {
            "$ref": "#/components/schemas/Rafflex.Core.Raffles.Enums.RaffleVisibilityEnum"
          },
          "hideEntryCount": {
            "type": "boolean"
          },
          "requiresPremiumSubscription": {
            "type": "boolean"
          },
          "startDelayMinutes": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "durationMinutes": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "winnerCount": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "maximumTotalEntries": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "publicWinnerInformation": {
            "type": "string",
            "nullable": true
          },
          "privateWinnerInformation": {
            "type": "string",
            "nullable": true
          },
          "discordSettings": {
            "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.RaffleDiscordSettingsRequest"
          },
          "winnerDelivery": {
            "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.RaffleWinnerDeliveryRequest"
          },
          "requirements": {
            "$ref": "#/components/schemas/Rafflex.Core.Competitions.Models.Requirements.Requirements"
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Application.Raffles.Dtos.RaffleTemplateResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "projectId": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "isDefault": {
            "type": "boolean"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "createdBy": {
            "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.RaffleTemplateUserResponse"
          },
          "lastUpdatedBy": {
            "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.RaffleTemplateUserResponse"
          },
          "configuration": {
            "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.RaffleTemplateConfiguration"
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Application.Raffles.Dtos.RaffleTemplateUserResponse": {
        "type": "object",
        "properties": {
          "userId": {
            "type": "string",
            "format": "uuid"
          },
          "displayName": {
            "type": "string",
            "nullable": true
          },
          "profileImageUrl": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Application.Raffles.Dtos.RaffleWinnerDeliveryRequest": {
        "type": "object",
        "properties": {
          "recipientXHandle": {
            "type": "string",
            "nullable": true
          },
          "message": {
            "type": "string",
            "nullable": true
          },
          "dataFields": {
            "$ref": "#/components/schemas/Rafflex.Core.Raffles.Enums.RaffleWinnerDeliveryDataFieldEnum"
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Application.Raffles.Dtos.RaffleWinnerResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "raffleEntryId": {
            "type": "string",
            "format": "uuid"
          },
          "userId": {
            "type": "string",
            "format": "uuid"
          },
          "username": {
            "type": "string",
            "nullable": true
          },
          "walletAddress": {
            "type": "string",
            "nullable": true
          },
          "discordPing": {
            "type": "string",
            "nullable": true
          },
          "xHandle": {
            "type": "string",
            "nullable": true
          },
          "selectionMethod": {
            "$ref": "#/components/schemas/Rafflex.Core.Raffles.Enums.RaffleWinnerSelectionMethodEnum"
          },
          "status": {
            "$ref": "#/components/schemas/Rafflex.Core.Raffles.Enums.RaffleWinnerStatusEnum"
          },
          "slotNumber": {
            "type": "integer",
            "format": "int32"
          },
          "selectionRound": {
            "type": "integer",
            "format": "int32"
          },
          "selectedAt": {
            "type": "string",
            "format": "date-time"
          },
          "finalizedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Application.Raffles.Dtos.SaveRaffleTemplateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "isDefault": {
            "type": "boolean"
          },
          "configuration": {
            "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.RaffleTemplateConfiguration"
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Application.Raffles.Dtos.UpdateRaffleDraftRequest": {
        "type": "object",
        "properties": {
          "hostProjectId": {
            "type": "string",
            "format": "uuid"
          },
          "rewardProjectId": {
            "type": "string",
            "format": "uuid"
          },
          "networkId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "shortDescription": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "tutorialVideoUrl": {
            "type": "string",
            "nullable": true
          },
          "type": {
            "$ref": "#/components/schemas/Rafflex.Core.Raffles.Enums.RaffleTypeEnum"
          },
          "visibility": {
            "$ref": "#/components/schemas/Rafflex.Core.Raffles.Enums.RaffleVisibilityEnum"
          },
          "hideEntryCount": {
            "type": "boolean"
          },
          "requiresPremiumSubscription": {
            "type": "boolean"
          },
          "startDelayMinutes": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "startsAt": {
            "type": "string",
            "format": "date-time"
          },
          "durationMinutes": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "endsAt": {
            "type": "string",
            "format": "date-time"
          },
          "winnerCount": {
            "type": "integer",
            "format": "int32"
          },
          "maximumTotalEntries": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "publicWinnerInformation": {
            "type": "string",
            "nullable": true
          },
          "privateWinnerInformation": {
            "type": "string",
            "nullable": true
          },
          "password": {
            "type": "string",
            "nullable": true
          },
          "clearPassword": {
            "type": "boolean"
          },
          "discordSettings": {
            "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.RaffleDiscordSettingsRequest"
          },
          "winnerDelivery": {
            "$ref": "#/components/schemas/Rafflex.Application.Raffles.Dtos.RaffleWinnerDeliveryRequest"
          },
          "requirements": {
            "$ref": "#/components/schemas/Rafflex.Core.Competitions.Models.Requirements.Requirements"
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Core.Competitions.Enums.ContractTypeEnum": {
        "enum": [
          1,
          2
        ],
        "type": "integer",
        "format": "int32"
      },
      "Rafflex.Core.Competitions.Enums.EntryTypeEnum": {
        "enum": [
          1,
          2
        ],
        "type": "integer",
        "format": "int32"
      },
      "Rafflex.Core.Competitions.Enums.XRequirementTypeEnum": {
        "enum": [
          1,
          2,
          3,
          4,
          5
        ],
        "type": "integer",
        "format": "int32"
      },
      "Rafflex.Core.Competitions.Models.Requirements.DiscordCondition": {
        "type": "object",
        "properties": {
          "server": {
            "$ref": "#/components/schemas/Rafflex.Core.Discord.Models.DiscordServer"
          },
          "roles": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Rafflex.Core.Discord.Models.DiscordRole"
            },
            "nullable": true
          },
          "inviteLink": {
            "type": "string",
            "nullable": true
          },
          "isFulfilled": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Core.Competitions.Models.Requirements.NftCryptoCondition": {
        "type": "object",
        "properties": {
          "network": {
            "$ref": "#/components/schemas/Rafflex.Core.Shared.Models.Network"
          },
          "contractAddress": {
            "type": "string",
            "nullable": true
          },
          "requiredAmount": {
            "type": "integer",
            "format": "int64"
          },
          "contractType": {
            "$ref": "#/components/schemas/Rafflex.Core.Competitions.Enums.ContractTypeEnum"
          },
          "tokenName": {
            "type": "string",
            "nullable": true
          },
          "entries": {
            "type": "integer",
            "format": "int32"
          },
          "isFulfilled": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Core.Competitions.Models.Requirements.PlatformEntryRequirement": {
        "type": "object",
        "properties": {
          "entryType": {
            "$ref": "#/components/schemas/Rafflex.Core.Competitions.Enums.EntryTypeEnum"
          },
          "price": {
            "type": "integer",
            "format": "int64"
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Core.Competitions.Models.Requirements.RequirementBlock_Rafflex.Core.Competitions.Models.Requirements.DiscordCondition": {
        "type": "object",
        "properties": {
          "conditions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Rafflex.Core.Competitions.Models.Requirements.DiscordCondition"
            },
            "nullable": true
          },
          "isFulfilled": {
            "type": "boolean",
            "nullable": true
          },
          "isFulfilledWithPremium": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Core.Competitions.Models.Requirements.RequirementBlock_Rafflex.Core.Competitions.Models.Requirements.NftCryptoCondition": {
        "type": "object",
        "properties": {
          "conditions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Rafflex.Core.Competitions.Models.Requirements.NftCryptoCondition"
            },
            "nullable": true
          },
          "isFulfilled": {
            "type": "boolean",
            "nullable": true
          },
          "isFulfilledWithPremium": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Core.Competitions.Models.Requirements.RequirementBlock_Rafflex.Core.Competitions.Models.Requirements.XCondition": {
        "type": "object",
        "properties": {
          "conditions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Rafflex.Core.Competitions.Models.Requirements.XCondition"
            },
            "nullable": true
          },
          "isFulfilled": {
            "type": "boolean",
            "nullable": true
          },
          "isFulfilledWithPremium": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Core.Competitions.Models.Requirements.Requirements": {
        "type": "object",
        "properties": {
          "entryAggregationMode": {
            "$ref": "#/components/schemas/Rafflex.Core.Raffles.Enums.RequirementEntryAggregationModeEnum"
          },
          "nftCryptoRequirements": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Rafflex.Core.Competitions.Models.Requirements.RequirementBlock_Rafflex.Core.Competitions.Models.Requirements.NftCryptoCondition"
            },
            "nullable": true
          },
          "discordRequirements": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Rafflex.Core.Competitions.Models.Requirements.RequirementBlock_Rafflex.Core.Competitions.Models.Requirements.DiscordCondition"
            },
            "nullable": true
          },
          "xRequirements": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Rafflex.Core.Competitions.Models.Requirements.RequirementBlock_Rafflex.Core.Competitions.Models.Requirements.XCondition"
            },
            "nullable": true
          },
          "whitelistAddresses": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "platformEntryRequirement": {
            "$ref": "#/components/schemas/Rafflex.Core.Competitions.Models.Requirements.PlatformEntryRequirement"
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Core.Competitions.Models.Requirements.XCondition": {
        "type": "object",
        "properties": {
          "type": {
            "$ref": "#/components/schemas/Rafflex.Core.Competitions.Enums.XRequirementTypeEnum"
          },
          "value": {
            "type": "string",
            "nullable": true
          },
          "isFulfilled": {
            "type": "boolean",
            "nullable": true
          },
          "isFulfilledWithPremium": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Core.Discord.Models.DiscordRole": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "color": {
            "type": "string",
            "nullable": true
          },
          "entries": {
            "type": "integer",
            "format": "int32"
          },
          "isFulfilled": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Core.Discord.Models.DiscordServer": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "canManage": {
            "type": "boolean"
          },
          "mentionRoleId": {
            "type": "string",
            "nullable": true
          },
          "mentionRoleName": {
            "type": "string",
            "nullable": true
          },
          "inviteLink": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Core.Projects.Enums.AllocationModeEnum": {
        "enum": [
          1,
          2
        ],
        "type": "integer",
        "format": "int32"
      },
      "Rafflex.Core.Projects.Enums.ProjectEventTypeEnum": {
        "enum": [
          1
        ],
        "type": "integer",
        "format": "int32"
      },
      "Rafflex.Core.Projects.Enums.ProjectSocialPlatformEnum": {
        "enum": [
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9,
          99
        ],
        "type": "integer",
        "format": "int32"
      },
      "Rafflex.Core.Raffles.Enums.RaffleEntrySourceEnum": {
        "enum": [
          1,
          2,
          3,
          4
        ],
        "type": "integer",
        "format": "int32"
      },
      "Rafflex.Core.Raffles.Enums.RaffleEntryStatusEnum": {
        "enum": [
          1,
          2,
          3,
          4,
          5,
          6,
          7
        ],
        "type": "integer",
        "format": "int32"
      },
      "Rafflex.Core.Raffles.Enums.RaffleStatusEnum": {
        "enum": [
          1,
          2,
          3,
          4,
          5,
          6
        ],
        "type": "integer",
        "format": "int32"
      },
      "Rafflex.Core.Raffles.Enums.RaffleTypeEnum": {
        "enum": [
          1,
          2
        ],
        "type": "integer",
        "format": "int32"
      },
      "Rafflex.Core.Raffles.Enums.RaffleVisibilityEnum": {
        "enum": [
          1,
          2,
          3,
          4
        ],
        "type": "integer",
        "format": "int32"
      },
      "Rafflex.Core.Raffles.Enums.RaffleWinnerDeliveryDataFieldEnum": {
        "enum": [
          0,
          1,
          2,
          4
        ],
        "type": "integer",
        "format": "int32"
      },
      "Rafflex.Core.Raffles.Enums.RaffleWinnerDeliveryStatusEnum": {
        "enum": [
          1,
          2,
          3,
          4,
          5
        ],
        "type": "integer",
        "format": "int32"
      },
      "Rafflex.Core.Raffles.Enums.RaffleWinnerSelectionMethodEnum": {
        "enum": [
          1,
          2,
          3,
          5
        ],
        "type": "integer",
        "format": "int32"
      },
      "Rafflex.Core.Raffles.Enums.RaffleWinnerStatusEnum": {
        "enum": [
          1,
          2,
          3,
          4,
          5
        ],
        "type": "integer",
        "format": "int32"
      },
      "Rafflex.Core.Raffles.Enums.RequirementEntryAggregationModeEnum": {
        "enum": [
          1,
          2
        ],
        "type": "integer",
        "format": "int32"
      },
      "Rafflex.Core.Shared.Enums.RpcProviderEnum": {
        "enum": [
          0,
          1,
          2,
          3
        ],
        "type": "integer",
        "format": "int32"
      },
      "Rafflex.Core.Shared.Models.Network": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "networkId": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "shortName": {
            "type": "string",
            "nullable": true
          },
          "isTestnet": {
            "type": "boolean"
          },
          "isEvm": {
            "type": "boolean"
          },
          "hasRpcs": {
            "type": "boolean"
          },
          "rpcs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Rafflex.Core.Shared.Models.Rpc"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Core.Shared.Models.Rpc": {
        "type": "object",
        "properties": {
          "rpcProvider": {
            "$ref": "#/components/schemas/Rafflex.Core.Shared.Models.RpcProvider"
          },
          "url": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Rafflex.Core.Shared.Models.RpcProvider": {
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/Rafflex.Core.Shared.Enums.RpcProviderEnum"
          },
          "name": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      }
    },
    "securitySchemes": {
      "ApiKey": {
        "type": "apiKey",
        "name": "X-Api-Key",
        "in": "header"
      }
    }
  },
  "security": [
    {
      "ApiKey": [ ]
    }
  ],
  "tags": [
    {
      "name": "Projects"
    },
    {
      "name": "Raffles"
    },
    {
      "name": "Templates"
    },
    {
      "name": "Usage"
    }
  ]
}