Request Models¶
Request body models used by subscription, source, and provider endpoints. All are Pydantic models with BaseModelConfig as their base (str_strip_whitespace=True, populate_by_name=True, use_enum_values=True). For admin-only request models, see Admin Models.
SourceCreateRequest¶
Used within SourcesAddRequest, SourcesReplaceRequest, and SubscriptionCreateRequest.
class SourceCreateRequest(BaseModelConfig):
data: str
is_hidden: bool | None = None
max_depth: int | None = None # 0-3
| Field | Type | Default | Constraints |
|---|---|---|---|
data |
string | — | Required |
is_hidden |
boolean · null | None |
— |
max_depth |
integer · null | None |
0-3 |
Also accepted as a plain string wherever a list of sources is expected (e.g. "vless://..." instead of {"data": "vless://..."}) — normalized to the object form before validation via a field_validator.
SubscriptionCreateRequest¶
class SubscriptionCreateRequest(BaseModelConfig):
name: str
description: str | None = None
sources: list[SourceCreateRequest] = []
| Field | Type | Default | Constraints |
|---|---|---|---|
name |
string | — | Max 64 chars; stripped and validated non-empty by a field_validator (no Field(min_length=...), but effectively required to be non-blank) |
description |
string · null | None |
Max 64 chars |
sources |
array[string | SourceCreateRequest] | [] |
Max 150 items (settings.max_sources_per_subscription); deduplicated by data before length validation, keeping first occurrence; rejected if the list becomes empty after deduplication and at least one item was originally given |
SubscriptionUpdateRequest¶
class SubscriptionUpdateRequest(BaseModelConfig):
name: str | None = None
description: str | None = None
| Field | Type | Default | Constraints |
|---|---|---|---|
name |
string · null | None |
Max 64 chars; stripped and validated non-empty if provided |
description |
string · null | None |
Max 64 chars |
Both fields are independently optional — there is no cross-field validator requiring at least one to be set.
SourcesAddRequest¶
class SourcesAddRequest(BaseModelConfig):
sources: list[SourceCreateRequest] # min 1, max settings.max_sources_per_subscription
Same normalization/deduplication as SubscriptionCreateRequest.sources, but with a hard minimum: the request itself requires min_length=1, and deduplication down to an empty list raises a validation error.
SourcesReplaceRequest¶
class SourcesReplaceRequest(BaseModelConfig):
sources: list[SourceCreateRequest] = [] # max settings.max_sources_per_subscription
Same shape as SourcesAddRequest, except an empty list is explicitly allowed (default_factory=list, no minimum) — this is what lets Replace All Sources clear every source in one call.
SourcesRemoveRequest¶
class SourcesRemoveRequest(BaseModelConfig):
source_ids: list[str] # min 1 item, each HASH_LENGTH chars
| Field | Type | Constraints |
|---|---|---|
source_ids |
array[string] | At least 1 item; each item exactly 32 hex chars |
IDs are deduplicated (preserving first occurrence) before the minimum-length check; an empty result raises a validation error.
SourceUpdateRequest¶
Backs Update Config. Only fields explicitly present and non-null in the request are applied; everything else is left unchanged server-side.
class SourceUpdateRequest(BaseModelConfig):
config_hash: str # alias: config_id
comment: str | None = None
is_hidden: bool | None = None
max_depth: int | None = None # 0-3
| Field | Type | Constraints |
|---|---|---|
config_hash |
string | Exactly 32 hex chars. Field name aliasing: the request body may use either config_hash or config_id as the JSON key — both populate this same field (AliasChoices) |
comment |
string · null | Max 255 chars |
is_hidden |
boolean · null | — |
max_depth |
integer · null | 0-3 |
CommentUpdateRequest Deprecated¶
Backs the deprecated Update Config Comment endpoint. The class itself is marked @deprecated in source (typing_extensions.deprecated), which some type checkers and IDEs will surface as a warning if you construct it directly.
class CommentUpdateRequest(BaseModelConfig):
config_hash: str # alias: config_id
comment: str | None = None
Same config_hash/config_id aliasing as SourceUpdateRequest.
ProviderConnectionRequest¶
Underlies the path-parameter-driven provider endpoints (Request Access to User, etc.) — in practice user_id arrives via the URL path on those routes rather than this model being used as a JSON body directly, but it defines the same validation constraints.