diff --git a/app/(dashboard)/bank-accounts/page.tsx b/app/(dashboard)/bank-accounts/page.tsx
index 5afe285..8422817 100644
--- a/app/(dashboard)/bank-accounts/page.tsx
+++ b/app/(dashboard)/bank-accounts/page.tsx
@@ -37,9 +37,7 @@ interface BankAccountRow {
id: string
userId: string
ownerType: 'guest' | 'organizer'
- accountHolder: string
iban: string
- bankName: string | null
nationalCode: string | null
verificationStatus: BankAccountVerificationStatus
rejectionReason: string | null
@@ -129,7 +127,8 @@ const BankAccountsPage = () => {
return
}
- showAlert(`حساب «${row.accountHolder}» تأیید شود؟`, () =>
+ const userName = formatPersonName(row.user?.firstName, row.user?.lastName) || row.iban
+ showAlert(`حساب «${userName}» تأیید شود؟`, () =>
runAction(row.id, () => axiosInstance.patch(API_ROUTES.BANK_ACCOUNTS.ADMIN_APPROVE(row.id)), 'حساب بانکی تأیید شد')
)
}
diff --git a/app/(dashboard)/withdrawal-requests/page.tsx b/app/(dashboard)/withdrawal-requests/page.tsx
index 8de23f1..383e691 100644
--- a/app/(dashboard)/withdrawal-requests/page.tsx
+++ b/app/(dashboard)/withdrawal-requests/page.tsx
@@ -35,8 +35,6 @@ interface WithdrawalRequestUserSummary {
interface WithdrawalRequestBankAccountSummary {
iban: string
- bankName: string | null
- accountHolder: string | null
}
interface WithdrawalRequestRow {
@@ -213,16 +211,12 @@ const WithdrawalRequestsPage = () => {
}
return (
-
-
- {bankAccount.iban || '—'}
-
- {bankAccount.bankName ?? '—'}
- {bankAccount.accountHolder ?? '—'}
-
+
+ {bankAccount.iban || '—'}
+
)
},
actions: (row) => {
diff --git a/openapi.json b/openapi.json
index 62b13e0..85a3960 100644
--- a/openapi.json
+++ b/openapi.json
@@ -50,9 +50,7 @@
}
},
"summary": "Request SMS OTP",
- "tags": [
- "Auth"
- ]
+ "tags": ["Auth"]
}
},
"/api/v1/auth/verify-otp": {
@@ -114,9 +112,7 @@
}
},
"summary": "Verify OTP",
- "tags": [
- "Auth"
- ]
+ "tags": ["Auth"]
}
},
"/api/v1/auth/refresh": {
@@ -157,9 +153,7 @@
}
},
"summary": "Refresh JWT tokens",
- "tags": [
- "Auth"
- ]
+ "tags": ["Auth"]
}
},
"/api/v1/auth/logout": {
@@ -225,9 +219,7 @@
}
],
"summary": "Logout current session",
- "tags": [
- "Auth"
- ]
+ "tags": ["Auth"]
}
},
"/api/v1/auth/logout-all": {
@@ -293,9 +285,7 @@
}
],
"summary": "Logout all sessions",
- "tags": [
- "Auth"
- ]
+ "tags": ["Auth"]
}
},
"/api/v1/auth/sessions": {
@@ -364,9 +354,7 @@
}
],
"summary": "List active sessions",
- "tags": [
- "Auth"
- ]
+ "tags": ["Auth"]
}
},
"/api/v1/auth/sessions/{id}": {
@@ -454,9 +442,7 @@
}
],
"summary": "Revoke a session",
- "tags": [
- "Auth"
- ]
+ "tags": ["Auth"]
}
},
"/api/v1/internal/sentry-webhook": {
@@ -492,9 +478,7 @@
}
},
"summary": "Sentry → Telegram alert relay",
- "tags": [
- "Ops"
- ]
+ "tags": ["Ops"]
}
},
"/api/v1/internal/jibit-transaction-webhook": {
@@ -539,9 +523,7 @@
}
},
"summary": "Jibit account-transaction → Telegram relay",
- "tags": [
- "Ops"
- ]
+ "tags": ["Ops"]
}
},
"/api/v1/users/public/{id}": {
@@ -575,9 +557,7 @@
}
],
"summary": "Get a public user profile; hosted events are included only for organizers",
- "tags": [
- "Users"
- ]
+ "tags": ["Users"]
}
},
"/api/v1/users/public/{id}/bootstrap": {
@@ -611,9 +591,7 @@
}
],
"summary": "Get the cacheable public user profile page bootstrap",
- "tags": [
- "Users"
- ]
+ "tags": ["Users"]
}
},
"/api/v1/users/public/{id}/viewer-state": {
@@ -647,9 +625,7 @@
}
],
"summary": "Get private organizer state for the current viewer",
- "tags": [
- "Users"
- ]
+ "tags": ["Users"]
}
},
"/api/v1/users/{id}/attendee-contact-links": {
@@ -687,9 +663,7 @@
}
],
"summary": "Get attendee-only contact links for an organizer",
- "tags": [
- "Users"
- ]
+ "tags": ["Users"]
}
},
"/api/v1/users/me": {
@@ -755,9 +729,7 @@
}
],
"summary": "Get current user profile",
- "tags": [
- "Users"
- ]
+ "tags": ["Users"]
},
"patch": {
"description": "Updates editable profile fields for the authenticated user only.",
@@ -832,9 +804,7 @@
}
],
"summary": "Update current user profile",
- "tags": [
- "Users"
- ]
+ "tags": ["Users"]
}
},
"/api/v1/users/me/complete-profile": {
@@ -921,9 +891,7 @@
}
],
"summary": "Complete user profile after OTP verification",
- "tags": [
- "Users"
- ]
+ "tags": ["Users"]
}
},
"/api/v1/admin/users": {
@@ -989,10 +957,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
},
{
@@ -1076,10 +1041,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -1151,9 +1113,7 @@
}
],
"summary": "Paginated admin users list",
- "tags": [
- "Admin - Users"
- ]
+ "tags": ["Admin - Users"]
}
},
"/api/v1/admin/users/{id}/mobile": {
@@ -1259,9 +1219,7 @@
}
],
"summary": "Change a user's login mobile (admin)",
- "tags": [
- "Admin - Users"
- ]
+ "tags": ["Admin - Users"]
}
},
"/api/v1/admin/users/{id}": {
@@ -1368,9 +1326,7 @@
}
],
"summary": "Edit a user (admin)",
- "tags": [
- "Admin - Users"
- ]
+ "tags": ["Admin - Users"]
},
"get": {
"description": "Staff-only: full profile, identity status, wallet balance, and a summary count for every category (hosted events, bookings, payments, reviews, follows, reports, blocks). See the dedicated sub-endpoints (hosted-events, bookings, payments, reviews, follows, reports, blocks) for the paginated lists themselves.",
@@ -1463,9 +1419,7 @@
}
],
"summary": "Full user detail for admin",
- "tags": [
- "Admin - User Detail"
- ]
+ "tags": ["Admin - User Detail"]
}
},
"/api/v1/users/me/contact-links": {
@@ -1493,9 +1447,7 @@
}
],
"summary": "Current user's contact links (unpaginated)",
- "tags": [
- "users"
- ]
+ "tags": ["users"]
},
"post": {
"operationId": "UserContactLinksController_create",
@@ -1528,9 +1480,7 @@
}
],
"summary": "Add a contact link for the current user",
- "tags": [
- "users"
- ]
+ "tags": ["users"]
}
},
"/api/v1/users/me/contact-links/{id}": {
@@ -1574,9 +1524,7 @@
}
],
"summary": "Update a contact link owned by the current user",
- "tags": [
- "users"
- ]
+ "tags": ["users"]
},
"delete": {
"operationId": "UserContactLinksController_remove",
@@ -1608,9 +1556,7 @@
}
],
"summary": "Remove a contact link owned by the current user",
- "tags": [
- "users"
- ]
+ "tags": ["users"]
}
},
"/api/v1/identity/rejection-reasons": {
@@ -1654,9 +1600,7 @@
}
},
"summary": "List active identity rejection reasons",
- "tags": [
- "Identity"
- ]
+ "tags": ["Identity"]
}
},
"/api/v1/identity/verifications/request-otp": {
@@ -1752,9 +1696,7 @@
}
],
"summary": "Request OTP to confirm host cooperation contract",
- "tags": [
- "Identity"
- ]
+ "tags": ["Identity"]
}
},
"/api/v1/identity/verifications/confirm-otp": {
@@ -1840,9 +1782,7 @@
}
],
"summary": "Confirm host-contract OTP and submit identity verification",
- "tags": [
- "Identity"
- ]
+ "tags": ["Identity"]
}
},
"/api/v1/identity/verifications/me": {
@@ -1911,9 +1851,7 @@
}
],
"summary": "List my identity verification submissions",
- "tags": [
- "Identity"
- ]
+ "tags": ["Identity"]
}
},
"/api/v1/admin/identity/verifications": {
@@ -1975,10 +1913,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
},
{
@@ -2022,10 +1957,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -2097,9 +2029,7 @@
}
],
"summary": "List identity verification review queue",
- "tags": [
- "Admin - Identity"
- ]
+ "tags": ["Admin - Identity"]
}
},
"/api/v1/admin/identity/verifications/{id}/jibit-inquiry": {
@@ -2197,9 +2127,7 @@
}
],
"summary": "Run Jibit national-code/mobile matching inquiry",
- "tags": [
- "Admin - Identity"
- ]
+ "tags": ["Admin - Identity"]
}
},
"/api/v1/admin/identity/verifications/{id}/approve": {
@@ -2297,9 +2225,7 @@
}
],
"summary": "Approve identity verification",
- "tags": [
- "Admin - Identity"
- ]
+ "tags": ["Admin - Identity"]
}
},
"/api/v1/admin/identity/verifications/{id}/reject": {
@@ -2408,9 +2334,7 @@
}
],
"summary": "Reject identity verification",
- "tags": [
- "Admin - Identity"
- ]
+ "tags": ["Admin - Identity"]
}
},
"/api/v1/notifications/me": {
@@ -2472,10 +2396,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
},
{
@@ -2509,10 +2430,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -2564,9 +2482,7 @@
}
],
"summary": "List my in-app notifications",
- "tags": [
- "Notifications"
- ]
+ "tags": ["Notifications"]
}
},
"/api/v1/notifications/me/unread-count": {
@@ -2632,9 +2548,7 @@
}
],
"summary": "Get unread in-app notification count",
- "tags": [
- "Notifications"
- ]
+ "tags": ["Notifications"]
}
},
"/api/v1/notifications/{id}/read": {
@@ -2721,9 +2635,7 @@
}
],
"summary": "Mark an in-app notification as read",
- "tags": [
- "Notifications"
- ]
+ "tags": ["Notifications"]
}
},
"/api/v1/notifications/push/vapid-public-key": {
@@ -2789,9 +2701,7 @@
}
],
"summary": "Get VAPID public key for Web Push subscription",
- "tags": [
- "Notifications"
- ]
+ "tags": ["Notifications"]
}
},
"/api/v1/notifications/push/deliveries/receipt": {
@@ -2877,9 +2787,7 @@
}
],
"summary": "Record a browser Web Push receipt event",
- "tags": [
- "Notifications"
- ]
+ "tags": ["Notifications"]
}
},
"/api/v1/notifications/push/subscribe": {
@@ -2968,9 +2876,7 @@
}
],
"summary": "Register a browser Web Push subscription",
- "tags": [
- "Notifications"
- ]
+ "tags": ["Notifications"]
},
"delete": {
"description": "Called on logout to stop push delivery to all user devices.",
@@ -3037,9 +2943,7 @@
}
],
"summary": "Remove all Web Push subscriptions for current user",
- "tags": [
- "Notifications"
- ]
+ "tags": ["Notifications"]
}
},
"/api/v1/notifications/push/subscribe/{id}": {
@@ -3127,9 +3031,7 @@
}
],
"summary": "Remove a browser Web Push subscription",
- "tags": [
- "Notifications"
- ]
+ "tags": ["Notifications"]
}
},
"/api/v1/admin/sms-messages": {
@@ -3191,10 +3093,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
},
{
@@ -3248,10 +3147,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -3323,9 +3219,7 @@
}
],
"summary": "List SMS delivery records",
- "tags": [
- "Admin - Notifications"
- ]
+ "tags": ["Admin - Notifications"]
}
},
"/api/v1/admin/notification-rules": {
@@ -3353,9 +3247,7 @@
}
],
"summary": "List admin-managed notification rules",
- "tags": [
- "Admin - Notification Rules"
- ]
+ "tags": ["Admin - Notification Rules"]
}
},
"/api/v1/admin/notification-rules/{eventKey}": {
@@ -3399,9 +3291,7 @@
}
],
"summary": "Update delivery and templates for a notification event",
- "tags": [
- "Admin - Notification Rules"
- ]
+ "tags": ["Admin - Notification Rules"]
}
},
"/api/v1/admin/manual-notifications/request-otp": {
@@ -3487,9 +3377,7 @@
}
],
"summary": "Request OTP before sending a group SMS",
- "tags": [
- "Admin - Notifications"
- ]
+ "tags": ["Admin - Notifications"]
}
},
"/api/v1/admin/manual-notifications": {
@@ -3585,9 +3473,7 @@
}
],
"summary": "Send a manual notification to selected users",
- "tags": [
- "Admin - Notifications"
- ]
+ "tags": ["Admin - Notifications"]
}
},
"/api/v1/admin/in-app-notifications": {
@@ -3649,10 +3535,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
},
{
@@ -3716,10 +3599,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -3791,9 +3671,7 @@
}
],
"summary": "List in-app notifications",
- "tags": [
- "Admin - Notifications"
- ]
+ "tags": ["Admin - Notifications"]
}
},
"/api/v1/admin/push-deliveries": {
@@ -3855,10 +3733,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
},
{
@@ -3922,10 +3797,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -3997,9 +3869,7 @@
}
],
"summary": "List Web Push delivery records",
- "tags": [
- "Admin - Notifications"
- ]
+ "tags": ["Admin - Notifications"]
}
},
"/api/v1/event-categories": {
@@ -4022,9 +3892,7 @@
}
},
"summary": "Active event categories (flat list, unpaginated)",
- "tags": [
- "Event Categories"
- ]
+ "tags": ["Event Categories"]
}
},
"/api/v1/event-categories/{slug}": {
@@ -4053,9 +3921,7 @@
}
},
"summary": "Single active category by slug",
- "tags": [
- "Event Categories"
- ]
+ "tags": ["Event Categories"]
}
},
"/api/v1/admin/event-categories/flat": {
@@ -4083,9 +3949,7 @@
}
],
"summary": "Flat list of all categories for admin filters",
- "tags": [
- "Admin - Event Categories"
- ]
+ "tags": ["Admin - Event Categories"]
}
},
"/api/v1/admin/event-categories": {
@@ -4144,10 +4008,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -4171,10 +4032,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -4186,9 +4044,7 @@
}
],
"summary": "Paginated category management list",
- "tags": [
- "Admin - Event Categories"
- ]
+ "tags": ["Admin - Event Categories"]
},
"post": {
"operationId": "AdminEventCategoriesController_create",
@@ -4221,9 +4077,7 @@
}
],
"summary": "Create event category",
- "tags": [
- "Admin - Event Categories"
- ]
+ "tags": ["Admin - Event Categories"]
}
},
"/api/v1/admin/event-categories/{id}": {
@@ -4267,9 +4121,7 @@
}
],
"summary": "Update event category",
- "tags": [
- "Admin - Event Categories"
- ]
+ "tags": ["Admin - Event Categories"]
},
"delete": {
"operationId": "AdminEventCategoriesController_remove",
@@ -4301,9 +4153,7 @@
}
],
"summary": "Soft-delete event category",
- "tags": [
- "Admin - Event Categories"
- ]
+ "tags": ["Admin - Event Categories"]
}
},
"/api/v1/geography/provinces": {
@@ -4326,9 +4176,7 @@
}
},
"summary": "List all provinces (unpaginated)",
- "tags": [
- "Geography"
- ]
+ "tags": ["Geography"]
}
},
"/api/v1/geography/cities": {
@@ -4351,9 +4199,7 @@
}
},
"summary": "List all cities (unpaginated, flat)",
- "tags": [
- "Geography"
- ]
+ "tags": ["Geography"]
}
},
"/api/v1/geography/provinces/{provinceId}/cities": {
@@ -4385,9 +4231,7 @@
}
},
"summary": "List cities in a province (unpaginated)",
- "tags": [
- "Geography"
- ]
+ "tags": ["Geography"]
}
},
"/api/v1/geography/cities/{slug}": {
@@ -4416,9 +4260,7 @@
}
},
"summary": "Single city by slug (SEO city landing pages)",
- "tags": [
- "Geography"
- ]
+ "tags": ["Geography"]
}
},
"/api/v1/my-events": {
@@ -4478,10 +4320,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
},
{
@@ -4491,10 +4330,7 @@
"schema": {
"default": "guest",
"type": "string",
- "enum": [
- "guest",
- "host"
- ]
+ "enum": ["guest", "host"]
}
},
{
@@ -4504,14 +4340,7 @@
"schema": {
"default": "upcoming",
"type": "string",
- "enum": [
- "upcoming",
- "held",
- "cancelled",
- "pending_review",
- "published",
- "rejected"
- ]
+ "enum": ["upcoming", "held", "cancelled", "pending_review", "published", "rejected"]
}
}
],
@@ -4522,32 +4351,15 @@
"application/json": {
"schema": {
"type": "object",
- "required": [
- "role",
- "status",
- "canHost",
- "availableRoles",
- "items",
- "response"
- ],
+ "required": ["role", "status", "canHost", "availableRoles", "items", "response"],
"properties": {
"role": {
"type": "string",
- "enum": [
- "guest",
- "host"
- ]
+ "enum": ["guest", "host"]
},
"status": {
"type": "string",
- "enum": [
- "upcoming",
- "held",
- "cancelled",
- "pending_review",
- "published",
- "rejected"
- ]
+ "enum": ["upcoming", "held", "cancelled", "pending_review", "published", "rejected"]
},
"canHost": {
"type": "boolean"
@@ -4556,10 +4368,7 @@
"type": "array",
"items": {
"type": "string",
- "enum": [
- "guest",
- "host"
- ]
+ "enum": ["guest", "host"]
}
},
"items": {
@@ -4590,9 +4399,7 @@
}
],
"summary": "List the current user’s guest or hosted events by lifecycle",
- "tags": [
- "My Events"
- ]
+ "tags": ["My Events"]
}
},
"/api/v1/events/{eventId}/revisions": {
@@ -4636,9 +4443,7 @@
}
],
"summary": "Submit a pending revision for a published/full event (admin must re-approve before changes go live)",
- "tags": [
- "My Events"
- ]
+ "tags": ["My Events"]
}
},
"/api/v1/events/{eventId}/revisions/pending": {
@@ -4672,9 +4477,7 @@
}
],
"summary": "Get the current pending revision for own live event",
- "tags": [
- "My Events"
- ]
+ "tags": ["My Events"]
},
"delete": {
"operationId": "EventRevisionsController_withdraw",
@@ -4708,9 +4511,7 @@
}
],
"summary": "Withdraw the pending revision for own live event",
- "tags": [
- "My Events"
- ]
+ "tags": ["My Events"]
}
},
"/api/v1/events": {
@@ -4745,9 +4546,7 @@
}
],
"summary": "Create a draft event (verified host)",
- "tags": [
- "My Events"
- ]
+ "tags": ["My Events"]
},
"get": {
"operationId": "EventsController_discovery",
@@ -4808,10 +4607,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -4835,19 +4631,14 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
}
},
"summary": "Public event discovery list",
- "tags": [
- "Events"
- ]
+ "tags": ["Events"]
}
},
"/api/v1/events/mine": {
@@ -4910,10 +4701,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -4937,10 +4725,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -4952,9 +4737,7 @@
}
],
"summary": "Organizer's own events",
- "tags": [
- "My Events"
- ]
+ "tags": ["My Events"]
}
},
"/api/v1/events/{id}/for-edit": {
@@ -4989,9 +4772,7 @@
}
],
"summary": "Full event payload for edit/clone forms",
- "tags": [
- "My Events"
- ]
+ "tags": ["My Events"]
}
},
"/api/v1/events/{id}/owner-insights": {
@@ -5025,9 +4806,7 @@
}
],
"summary": "Get engagement insights for own event",
- "tags": [
- "My Events"
- ]
+ "tags": ["My Events"]
}
},
"/api/v1/events/{id}/management-bootstrap": {
@@ -5061,9 +4840,7 @@
}
],
"summary": "Get all initial data for managing an owned event",
- "tags": [
- "My Events"
- ]
+ "tags": ["My Events"]
}
},
"/api/v1/events/{id}/attendees": {
@@ -5130,10 +4907,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
},
{
@@ -5175,10 +4949,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -5190,9 +4961,7 @@
}
],
"summary": "Search and list registrations for own event attendance desk",
- "tags": [
- "My Events"
- ]
+ "tags": ["My Events"]
}
},
"/api/v1/events/{id}/reserved-capacity": {
@@ -5237,9 +5006,7 @@
}
],
"summary": "Set off-platform reserved seat count for own event",
- "tags": [
- "My Events"
- ]
+ "tags": ["My Events"]
}
},
"/api/v1/events/{id}": {
@@ -5283,9 +5050,7 @@
}
],
"summary": "Update own event",
- "tags": [
- "My Events"
- ]
+ "tags": ["My Events"]
},
"delete": {
"operationId": "MyEventsController_softDelete",
@@ -5317,9 +5082,7 @@
}
],
"summary": "Soft-delete own event when it has no active bookings (booked_count = 0)",
- "tags": [
- "My Events"
- ]
+ "tags": ["My Events"]
},
"get": {
"operationId": "EventsController_findOne",
@@ -5346,9 +5109,7 @@
}
},
"summary": "Single event detail",
- "tags": [
- "Events"
- ]
+ "tags": ["Events"]
}
},
"/api/v1/events/{id}/publish": {
@@ -5382,9 +5143,7 @@
}
],
"summary": "Publish draft event",
- "tags": [
- "My Events"
- ]
+ "tags": ["My Events"]
}
},
"/api/v1/events/{id}/cancel": {
@@ -5418,9 +5177,7 @@
}
],
"summary": "Cancel published/full event",
- "tags": [
- "My Events"
- ]
+ "tags": ["My Events"]
}
},
"/api/v1/events/{id}/complete": {
@@ -5454,9 +5211,7 @@
}
],
"summary": "Mark event completed (creates group chat)",
- "tags": [
- "My Events"
- ]
+ "tags": ["My Events"]
}
},
"/api/v1/events/{id}/clone": {
@@ -5490,9 +5245,7 @@
}
],
"summary": "Clone event to new draft",
- "tags": [
- "My Events"
- ]
+ "tags": ["My Events"]
}
},
"/api/v1/events/bookmarks": {
@@ -5551,10 +5304,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -5578,10 +5328,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -5593,9 +5340,7 @@
}
],
"summary": "List events bookmarked by current user",
- "tags": [
- "Event Bookmarks"
- ]
+ "tags": ["Event Bookmarks"]
}
},
"/api/v1/events/bookmarks/status": {
@@ -5630,9 +5375,7 @@
}
],
"summary": "Get bookmark status for a batch of events",
- "tags": [
- "Event Bookmarks"
- ]
+ "tags": ["Event Bookmarks"]
}
},
"/api/v1/events/{id}/bookmark": {
@@ -5666,9 +5409,7 @@
}
],
"summary": "Get bookmark status for current user",
- "tags": [
- "Event Bookmarks"
- ]
+ "tags": ["Event Bookmarks"]
},
"post": {
"operationId": "EventBookmarksController_bookmark",
@@ -5700,9 +5441,7 @@
}
],
"summary": "Bookmark an event",
- "tags": [
- "Event Bookmarks"
- ]
+ "tags": ["Event Bookmarks"]
},
"delete": {
"operationId": "EventBookmarksController_remove",
@@ -5734,9 +5473,7 @@
}
],
"summary": "Remove an event bookmark",
- "tags": [
- "Event Bookmarks"
- ]
+ "tags": ["Event Bookmarks"]
}
},
"/api/v1/events/by-slug/{slug}/bootstrap": {
@@ -5765,9 +5502,7 @@
}
},
"summary": "Public event landing bootstrap payload",
- "tags": [
- "Events"
- ]
+ "tags": ["Events"]
}
},
"/api/v1/events/by-slug/{slug}": {
@@ -5796,9 +5531,7 @@
}
},
"summary": "Single discoverable event by slug (SEO event landing page)",
- "tags": [
- "Events"
- ]
+ "tags": ["Events"]
}
},
"/api/v1/events/{id}/viewer-state": {
@@ -5827,9 +5560,7 @@
}
},
"summary": "Authenticated viewer state for an event landing",
- "tags": [
- "Events"
- ]
+ "tags": ["Events"]
}
},
"/api/v1/admin/events/{eventId}/revisions/pending": {
@@ -5863,9 +5594,7 @@
}
],
"summary": "Get pending revision for any live event",
- "tags": [
- "Admin - Events"
- ]
+ "tags": ["Admin - Events"]
}
},
"/api/v1/admin/events/{eventId}/revisions/{revisionId}/approve": {
@@ -5907,9 +5636,7 @@
}
],
"summary": "Approve a pending revision and apply it to the live event immediately (no host confirm)",
- "tags": [
- "Admin - Events"
- ]
+ "tags": ["Admin - Events"]
}
},
"/api/v1/admin/events/{eventId}/revisions/{revisionId}/reject": {
@@ -5961,9 +5688,7 @@
}
],
"summary": "Reject a pending revision; live event content stays unchanged",
- "tags": [
- "Admin - Events"
- ]
+ "tags": ["Admin - Events"]
}
},
"/api/v1/admin/events": {
@@ -6026,10 +5751,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -6053,10 +5775,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -6068,9 +5787,7 @@
}
],
"summary": "Paginated admin events list",
- "tags": [
- "Admin - Events"
- ]
+ "tags": ["Admin - Events"]
}
},
"/api/v1/admin/events/{id}": {
@@ -6104,9 +5821,7 @@
}
],
"summary": "Admin event detail including bookmark count",
- "tags": [
- "Admin - Events"
- ]
+ "tags": ["Admin - Events"]
},
"patch": {
"operationId": "AdminEventsController_update",
@@ -6148,9 +5863,7 @@
}
],
"summary": "Update any event as admin (same field locks as host edit)",
- "tags": [
- "Admin - Events"
- ]
+ "tags": ["Admin - Events"]
},
"delete": {
"operationId": "AdminEventsController_softDelete",
@@ -6182,9 +5895,7 @@
}
],
"summary": "Soft-delete any event as admin when it has no active bookings (booked_count = 0)",
- "tags": [
- "Admin - Events"
- ]
+ "tags": ["Admin - Events"]
}
},
"/api/v1/admin/events/{id}/reserved-capacity": {
@@ -6228,9 +5939,7 @@
}
],
"summary": "Set off-platform reserved seat count as admin",
- "tags": [
- "Admin - Events"
- ]
+ "tags": ["Admin - Events"]
}
},
"/api/v1/admin/events/{id}/commission": {
@@ -6275,9 +5984,7 @@
}
],
"summary": "Set or clear this event’s platform commission override",
- "tags": [
- "Admin - Events"
- ]
+ "tags": ["Admin - Events"]
}
},
"/api/v1/admin/events/{id}/insights": {
@@ -6311,9 +6018,7 @@
}
],
"summary": "Get engagement insights for any event as admin",
- "tags": [
- "Admin - Events"
- ]
+ "tags": ["Admin - Events"]
}
},
"/api/v1/admin/events/{id}/approve": {
@@ -6347,9 +6052,7 @@
}
],
"summary": "Approve a draft or pending-review event; publishes once the host has also requested publication",
- "tags": [
- "Admin - Events"
- ]
+ "tags": ["Admin - Events"]
}
},
"/api/v1/admin/events/{id}/publish": {
@@ -6383,9 +6086,7 @@
}
],
"summary": "Force-publish any organizer’s draft or pending-review event as admin, bypassing the request/approve flow entirely",
- "tags": [
- "Admin - Events"
- ]
+ "tags": ["Admin - Events"]
}
},
"/api/v1/admin/events/{id}/reject": {
@@ -6429,9 +6130,7 @@
}
],
"summary": "Reject a pending-review event with a reason",
- "tags": [
- "Admin - Events"
- ]
+ "tags": ["Admin - Events"]
}
},
"/api/v1/admin/events/{id}/cancel": {
@@ -6465,9 +6164,7 @@
}
],
"summary": "Cancel any organizer’s published/full event as admin",
- "tags": [
- "Admin - Events"
- ]
+ "tags": ["Admin - Events"]
}
},
"/api/v1/admin/events/{id}/complete": {
@@ -6501,9 +6198,7 @@
}
],
"summary": "Mark any organizer’s event completed as admin",
- "tags": [
- "Admin - Events"
- ]
+ "tags": ["Admin - Events"]
}
},
"/api/v1/discovery/cities": {
@@ -6526,9 +6221,7 @@
}
},
"summary": "Cached city list for discovery/home",
- "tags": [
- "Events"
- ]
+ "tags": ["Events"]
}
},
"/api/v1/discovery/categories": {
@@ -6551,9 +6244,7 @@
}
},
"summary": "Cached active category tree summary for discovery/home",
- "tags": [
- "Events"
- ]
+ "tags": ["Events"]
}
},
"/api/v1/discovery/home-feed": {
@@ -6583,9 +6274,7 @@
}
},
"summary": "Home page event sections (popular, category previews, city previews)",
- "tags": [
- "Events"
- ]
+ "tags": ["Events"]
}
},
"/api/v1/discovery/bootstrap": {
@@ -6606,9 +6295,7 @@
}
},
"summary": "Legacy combined reference data for event discovery",
- "tags": [
- "Events"
- ]
+ "tags": ["Events"]
}
},
"/api/v1/organizers/me/following": {
@@ -6669,10 +6356,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
},
{
@@ -6705,10 +6389,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -6720,9 +6401,7 @@
}
],
"summary": "Get organizers followed by current user",
- "tags": [
- "Organizer Follows"
- ]
+ "tags": ["Organizer Follows"]
}
},
"/api/v1/organizers/me/following/events": {
@@ -6783,10 +6462,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -6810,10 +6486,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -6825,9 +6498,7 @@
}
],
"summary": "Get upcoming events from followed organizers",
- "tags": [
- "Organizer Follows"
- ]
+ "tags": ["Organizer Follows"]
}
},
"/api/v1/organizers/me/followers": {
@@ -6888,10 +6559,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -6915,10 +6583,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -6930,9 +6595,7 @@
}
],
"summary": "Get followers of the current user (as organizer)",
- "tags": [
- "Organizer Follows"
- ]
+ "tags": ["Organizer Follows"]
}
},
"/api/v1/organizers/{organizerId}/follow": {
@@ -7028,9 +6691,7 @@
}
],
"summary": "Follow an organizer",
- "tags": [
- "Organizer Follows"
- ]
+ "tags": ["Organizer Follows"]
},
"delete": {
"operationId": "OrganizerFollowsController_unfollow",
@@ -7114,9 +6775,7 @@
}
],
"summary": "Unfollow an organizer",
- "tags": [
- "Organizer Follows"
- ]
+ "tags": ["Organizer Follows"]
}
},
"/api/v1/organizers/{organizerId}/followers": {
@@ -7187,10 +6846,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -7214,19 +6870,14 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
}
},
"summary": "Get followers of an organizer",
- "tags": [
- "Organizer Follows"
- ]
+ "tags": ["Organizer Follows"]
}
},
"/api/v1/organizers/{organizerId}/is-following": {
@@ -7268,9 +6919,7 @@
}
],
"summary": "Check if current user is following an organizer",
- "tags": [
- "Organizer Follows"
- ]
+ "tags": ["Organizer Follows"]
}
},
"/api/v1/organizers/{organizerId}/follow-settings": {
@@ -7316,9 +6965,7 @@
}
],
"summary": "Update follow notification settings",
- "tags": [
- "Organizer Follows"
- ]
+ "tags": ["Organizer Follows"]
}
},
"/api/v1/events/{eventId}/media": {
@@ -7350,9 +6997,7 @@
}
},
"summary": "List media for an event (unpaginated)",
- "tags": [
- "Event Extras"
- ]
+ "tags": ["Event Extras"]
},
"post": {
"operationId": "EventMediaController_create",
@@ -7394,9 +7039,7 @@
}
],
"summary": "Add media to own event (or any event as admin)",
- "tags": [
- "Event Extras"
- ]
+ "tags": ["Event Extras"]
}
},
"/api/v1/events/{eventId}/media/{id}": {
@@ -7448,9 +7091,7 @@
}
],
"summary": "Update event media (owner or admin)",
- "tags": [
- "Event Extras"
- ]
+ "tags": ["Event Extras"]
},
"delete": {
"operationId": "EventMediaController_remove",
@@ -7490,9 +7131,7 @@
}
],
"summary": "Remove event media (owner or admin)",
- "tags": [
- "Event Extras"
- ]
+ "tags": ["Event Extras"]
}
},
"/api/v1/events/{eventId}/faqs": {
@@ -7524,9 +7163,7 @@
}
},
"summary": "List FAQs for an event (unpaginated)",
- "tags": [
- "Event Extras"
- ]
+ "tags": ["Event Extras"]
},
"post": {
"operationId": "EventFaqsController_create",
@@ -7568,9 +7205,7 @@
}
],
"summary": "Add FAQ to own event (or any event as admin)",
- "tags": [
- "Event Extras"
- ]
+ "tags": ["Event Extras"]
}
},
"/api/v1/events/{eventId}/faqs/{id}": {
@@ -7622,9 +7257,7 @@
}
],
"summary": "Update event FAQ (owner or admin)",
- "tags": [
- "Event Extras"
- ]
+ "tags": ["Event Extras"]
},
"delete": {
"operationId": "EventFaqsController_remove",
@@ -7664,9 +7297,7 @@
}
],
"summary": "Remove event FAQ (owner or admin)",
- "tags": [
- "Event Extras"
- ]
+ "tags": ["Event Extras"]
}
},
"/api/v1/organizer-guest-lists/previous-attendees": {
@@ -7694,9 +7325,7 @@
}
],
"summary": "Organizer's deduplicated checked-in attendees",
- "tags": [
- "Event Extras"
- ]
+ "tags": ["Event Extras"]
}
},
"/api/v1/organizer-guest-lists": {
@@ -7755,10 +7384,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -7782,10 +7408,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -7797,9 +7420,7 @@
}
],
"summary": "Organizer's own guest lists (paginated)",
- "tags": [
- "Event Extras"
- ]
+ "tags": ["Event Extras"]
},
"post": {
"operationId": "OrganizerGuestListsController_create",
@@ -7832,9 +7453,7 @@
}
],
"summary": "Create a guest list",
- "tags": [
- "Event Extras"
- ]
+ "tags": ["Event Extras"]
}
},
"/api/v1/organizer-guest-lists/{id}": {
@@ -7869,9 +7488,7 @@
}
],
"summary": "Soft-delete a whole guest list",
- "tags": [
- "Event Extras"
- ]
+ "tags": ["Event Extras"]
}
},
"/api/v1/organizer-guest-lists/{id}/items": {
@@ -7940,10 +7557,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -7967,10 +7581,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -7982,9 +7593,7 @@
}
],
"summary": "A guest list's contacts (paginated)",
- "tags": [
- "Event Extras"
- ]
+ "tags": ["Event Extras"]
},
"post": {
"operationId": "OrganizerGuestListsController_addItem",
@@ -8027,9 +7636,7 @@
}
],
"summary": "Add a contact to a guest list",
- "tags": [
- "Event Extras"
- ]
+ "tags": ["Event Extras"]
}
},
"/api/v1/organizer-guest-lists/{id}/items/{itemId}": {
@@ -8073,9 +7680,7 @@
}
],
"summary": "Remove a contact from a guest list",
- "tags": [
- "Event Extras"
- ]
+ "tags": ["Event Extras"]
}
},
"/api/v1/events/{eventId}/guest-list-links/invited-guests": {
@@ -8120,9 +7725,7 @@
}
],
"summary": "Set previous attendees invited to this event",
- "tags": [
- "Event Extras"
- ]
+ "tags": ["Event Extras"]
},
"get": {
"operationId": "EventGuestListLinksController_getInvitedGuests",
@@ -8157,9 +7760,7 @@
}
],
"summary": "Guests selected to invite to this event, for its organizer",
- "tags": [
- "Event Extras"
- ]
+ "tags": ["Event Extras"]
}
},
"/api/v1/events/{eventId}/guest-list-links/invited-guests/notify": {
@@ -8194,9 +7795,7 @@
}
],
"summary": "Send invitation notifications for the event invite set",
- "tags": [
- "Event Extras"
- ]
+ "tags": ["Event Extras"]
}
},
"/api/v1/events/{eventId}/guest-list-links": {
@@ -8235,9 +7834,7 @@
}
],
"summary": "Guest lists linked to this event (unpaginated)",
- "tags": [
- "Event Extras"
- ]
+ "tags": ["Event Extras"]
},
"post": {
"operationId": "EventGuestListLinksController_link",
@@ -8280,9 +7877,7 @@
}
],
"summary": "Attach a guest list to an event (stores link only — call notify to send invitations)",
- "tags": [
- "Event Extras"
- ]
+ "tags": ["Event Extras"]
}
},
"/api/v1/events/{eventId}/guest-list-links/{listId}/notify": {
@@ -8326,9 +7921,7 @@
}
],
"summary": "Send invitation notifications for a guest list linked to this event",
- "tags": [
- "Event Extras"
- ]
+ "tags": ["Event Extras"]
}
},
"/api/v1/events/{eventId}/guest-list-links/{listId}": {
@@ -8372,9 +7965,7 @@
}
],
"summary": "Unlink a guest list from an event",
- "tags": [
- "Event Extras"
- ]
+ "tags": ["Event Extras"]
}
},
"/api/v1/admin/guest-lists": {
@@ -8434,10 +8025,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -8461,10 +8049,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -8476,9 +8061,7 @@
}
],
"summary": "Every organizer's guest lists (paginated)",
- "tags": [
- "Admin - Event Extras"
- ]
+ "tags": ["Admin - Event Extras"]
}
},
"/api/v1/admin/guest-lists/{id}/items": {
@@ -8546,10 +8129,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -8573,10 +8153,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -8588,9 +8165,7 @@
}
],
"summary": "Any guest list's contacts, admin view (paginated)",
- "tags": [
- "Admin - Event Extras"
- ]
+ "tags": ["Admin - Event Extras"]
}
},
"/api/v1/admin/events/{eventId}/guest-list-links": {
@@ -8629,9 +8204,7 @@
}
],
"summary": "Guest lists linked to any event, admin view (unpaginated)",
- "tags": [
- "Admin - Event Extras"
- ]
+ "tags": ["Admin - Event Extras"]
}
},
"/api/v1/admin/events/{eventId}/invited-guests": {
@@ -8670,9 +8243,7 @@
}
],
"summary": "Guests selected to invite to this event (unpaginated)",
- "tags": [
- "Admin - Event Extras"
- ]
+ "tags": ["Admin - Event Extras"]
},
"put": {
"description": "userIds must all be existing platform users. Full replace, not incremental. An empty array clears the invite set. Does not send notifications — use POST .../notify.",
@@ -8719,9 +8290,7 @@
}
],
"summary": "Replace the invite set for this event",
- "tags": [
- "Admin - Event Extras"
- ]
+ "tags": ["Admin - Event Extras"]
}
},
"/api/v1/admin/events/{eventId}/invited-guests/notify": {
@@ -8757,9 +8326,7 @@
}
],
"summary": "Send invitation notifications to the event invite set",
- "tags": [
- "Admin - Event Extras"
- ]
+ "tags": ["Admin - Event Extras"]
}
},
"/api/v1/bookings/{bookingId}/payments": {
@@ -8803,9 +8370,7 @@
}
],
"summary": "Create payment attempt for a booking",
- "tags": [
- "Financial"
- ]
+ "tags": ["Financial"]
}
},
"/api/v1/bookings/{bookingId}/discount-preview": {
@@ -8849,9 +8414,7 @@
}
],
"summary": "Preview a discount code against a booking",
- "tags": [
- "Financial"
- ]
+ "tags": ["Financial"]
}
},
"/api/v1/payments/me": {
@@ -8910,10 +8473,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -8937,10 +8497,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -8952,9 +8509,7 @@
}
],
"summary": "Current user's payments",
- "tags": [
- "Financial"
- ]
+ "tags": ["Financial"]
}
},
"/api/v1/payments/{id}/receipt": {
@@ -8988,9 +8543,7 @@
}
],
"summary": "Payment receipt (owner only)",
- "tags": [
- "Financial"
- ]
+ "tags": ["Financial"]
}
},
"/api/v1/admin/payments": {
@@ -9049,10 +8602,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -9076,10 +8626,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -9091,9 +8638,7 @@
}
],
"summary": "Paginated admin payment list, all users",
- "tags": [
- "Financial"
- ]
+ "tags": ["Financial"]
}
},
"/api/v1/admin/wallet-deposits": {
@@ -9152,10 +8697,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -9179,10 +8721,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -9194,9 +8733,7 @@
}
],
"summary": "Paginated admin wallet deposit list (gateway sessions)",
- "tags": [
- "Financial"
- ]
+ "tags": ["Financial"]
}
},
"/api/v1/users/me/wallet": {
@@ -9221,9 +8758,7 @@
}
],
"summary": "Current user's wallet",
- "tags": [
- "Financial"
- ]
+ "tags": ["Financial"]
}
},
"/api/v1/users/me/wallet/transactions": {
@@ -9282,10 +8817,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -9309,10 +8841,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -9324,9 +8853,7 @@
}
],
"summary": "Current user's wallet transactions",
- "tags": [
- "Financial"
- ]
+ "tags": ["Financial"]
}
},
"/api/v1/users/me/wallet/deposits": {
@@ -9361,9 +8888,7 @@
}
],
"summary": "Start a wallet top-up via payment gateway",
- "tags": [
- "Financial"
- ]
+ "tags": ["Financial"]
}
},
"/api/v1/users/me/wallet/deposits/{id}": {
@@ -9397,9 +8922,7 @@
}
],
"summary": "Get one of the current user wallet deposits",
- "tags": [
- "Financial"
- ]
+ "tags": ["Financial"]
}
},
"/api/v1/wallet/deposits/{id}/gateway-return": {
@@ -9430,9 +8953,7 @@
}
},
"summary": "Jibit browser return (GET) — verifies payment server-side then redirects to the frontend result page",
- "tags": [
- "Financial"
- ]
+ "tags": ["Financial"]
},
"post": {
"operationId": "WalletController_depositGatewayReturnPost",
@@ -9461,9 +8982,7 @@
}
},
"summary": "Jibit browser return (form POST from PPG) — verifies payment server-side then redirects to the frontend result page",
- "tags": [
- "Financial"
- ]
+ "tags": ["Financial"]
}
},
"/api/v1/wallet/deposits/{id}/gateway-callback": {
@@ -9502,9 +9021,7 @@
}
},
"summary": "Payment gateway callback for wallet deposits",
- "tags": [
- "Financial"
- ]
+ "tags": ["Financial"]
}
},
"/api/v1/bank-accounts": {
@@ -9539,9 +9056,7 @@
}
],
"summary": "Create bank account for withdrawals/settlements",
- "tags": [
- "Financial"
- ]
+ "tags": ["Financial"]
}
},
"/api/v1/bank-accounts/me": {
@@ -9569,9 +9084,7 @@
}
],
"summary": "Current user's bank accounts",
- "tags": [
- "Financial"
- ]
+ "tags": ["Financial"]
}
},
"/api/v1/admin/bank-accounts": {
@@ -9630,10 +9143,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -9657,10 +9167,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -9672,9 +9179,7 @@
}
],
"summary": "Paginated admin bank account verification queue",
- "tags": [
- "Financial"
- ]
+ "tags": ["Financial"]
}
},
"/api/v1/admin/bank-accounts/{id}/jibit-inquiry": {
@@ -9709,9 +9214,7 @@
}
],
"summary": "Run Jibit IBAN/national-code/birth-date matching inquiry",
- "tags": [
- "Financial"
- ]
+ "tags": ["Financial"]
}
},
"/api/v1/admin/bank-accounts/{id}/approve": {
@@ -9745,9 +9248,7 @@
}
],
"summary": "Approve bank account after a successful Jibit match",
- "tags": [
- "Financial"
- ]
+ "tags": ["Financial"]
}
},
"/api/v1/admin/bank-accounts/{id}/reject": {
@@ -9791,9 +9292,7 @@
}
],
"summary": "Reject bank account with a reason",
- "tags": [
- "Financial"
- ]
+ "tags": ["Financial"]
}
},
"/api/v1/withdrawal-requests": {
@@ -9828,9 +9327,7 @@
}
],
"summary": "Create withdrawal request from wallet",
- "tags": [
- "Financial"
- ]
+ "tags": ["Financial"]
}
},
"/api/v1/withdrawal-requests/me": {
@@ -9889,10 +9386,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -9916,10 +9410,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -9931,9 +9422,7 @@
}
],
"summary": "Current user's withdrawal requests",
- "tags": [
- "Financial"
- ]
+ "tags": ["Financial"]
}
},
"/api/v1/admin/withdrawal-requests": {
@@ -9992,10 +9481,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -10019,10 +9505,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -10034,9 +9517,7 @@
}
],
"summary": "Paginated admin withdrawal queue",
- "tags": [
- "Financial"
- ]
+ "tags": ["Financial"]
}
},
"/api/v1/admin/withdrawal-requests/{id}/process": {
@@ -10070,9 +9551,7 @@
}
],
"summary": "Mark withdrawal request as processing",
- "tags": [
- "Financial"
- ]
+ "tags": ["Financial"]
}
},
"/api/v1/admin/withdrawal-requests/{id}/complete": {
@@ -10116,9 +9595,7 @@
}
],
"summary": "Complete withdrawal with manual payment evidence",
- "tags": [
- "Financial"
- ]
+ "tags": ["Financial"]
}
},
"/api/v1/admin/withdrawal-requests/{id}/reject": {
@@ -10162,9 +9639,7 @@
}
],
"summary": "Reject withdrawal request and reverse hold",
- "tags": [
- "Financial"
- ]
+ "tags": ["Financial"]
}
},
"/api/v1/organizers/me/earnings": {
@@ -10223,10 +9698,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -10250,10 +9722,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -10265,9 +9734,7 @@
}
],
"summary": "Current organizer's earnings ledger",
- "tags": [
- "Financial"
- ]
+ "tags": ["Financial"]
}
},
"/api/v1/settlements/me": {
@@ -10326,10 +9793,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -10353,10 +9817,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -10368,9 +9829,7 @@
}
],
"summary": "Current organizer's settlement batches",
- "tags": [
- "Financial"
- ]
+ "tags": ["Financial"]
}
},
"/api/v1/admin/settlements": {
@@ -10405,9 +9864,7 @@
}
],
"summary": "Create organizer settlement batch",
- "tags": [
- "Financial"
- ]
+ "tags": ["Financial"]
},
"get": {
"operationId": "AdminSettlementsController_list",
@@ -10464,10 +9921,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -10491,10 +9945,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -10506,9 +9957,7 @@
}
],
"summary": "Paginated settlement batches",
- "tags": [
- "Financial"
- ]
+ "tags": ["Financial"]
}
},
"/api/v1/admin/settlements/{id}": {
@@ -10543,9 +9992,7 @@
}
],
"summary": "Settlement batch detail, with items inlined",
- "tags": [
- "Financial"
- ]
+ "tags": ["Financial"]
}
},
"/api/v1/admin/settlements/{id}/process": {
@@ -10579,9 +10026,7 @@
}
],
"summary": "Mark settlement batch as processing",
- "tags": [
- "Financial"
- ]
+ "tags": ["Financial"]
}
},
"/api/v1/admin/settlements/{id}/complete": {
@@ -10625,9 +10070,7 @@
}
],
"summary": "Complete settlement with manual payment evidence",
- "tags": [
- "Financial"
- ]
+ "tags": ["Financial"]
}
},
"/api/v1/admin/settlements/{id}/fail": {
@@ -10672,9 +10115,7 @@
}
],
"summary": "Mark settlement batch as failed and release its earnings",
- "tags": [
- "Financial"
- ]
+ "tags": ["Financial"]
}
},
"/api/v1/events/{eventId}/discount-codes": {
@@ -10719,9 +10160,7 @@
}
],
"summary": "Bulk-create discount codes for an event (host or admin)",
- "tags": [
- "Discount Codes"
- ]
+ "tags": ["Discount Codes"]
},
"get": {
"operationId": "DiscountCodesController_list",
@@ -10787,10 +10226,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -10814,10 +10250,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -10829,9 +10262,7 @@
}
],
"summary": "An event's discount codes (paginated)",
- "tags": [
- "Discount Codes"
- ]
+ "tags": ["Discount Codes"]
}
},
"/api/v1/events/{eventId}/discount-codes/management-bootstrap": {
@@ -10865,9 +10296,7 @@
}
],
"summary": "All initial data for an event's discount management tab",
- "tags": [
- "Discount Codes"
- ]
+ "tags": ["Discount Codes"]
}
},
"/api/v1/events/{eventId}/discount-codes/report": {
@@ -10902,9 +10331,7 @@
}
],
"summary": "Summary of an event's discount usage",
- "tags": [
- "Discount Codes"
- ]
+ "tags": ["Discount Codes"]
}
},
"/api/v1/events/{eventId}/discount-codes/redemptions": {
@@ -10972,10 +10399,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -10999,10 +10423,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -11014,9 +10435,7 @@
}
],
"summary": "An event's discount redemptions (paginated)",
- "tags": [
- "Discount Codes"
- ]
+ "tags": ["Discount Codes"]
}
},
"/api/v1/discount-codes/{id}": {
@@ -11061,9 +10480,7 @@
}
],
"summary": "Enable/disable a discount code (host or admin)",
- "tags": [
- "Discount Codes"
- ]
+ "tags": ["Discount Codes"]
},
"delete": {
"operationId": "DiscountCodesController_remove",
@@ -11096,9 +10513,7 @@
}
],
"summary": "Delete an unused discount code (host or admin)",
- "tags": [
- "Discount Codes"
- ]
+ "tags": ["Discount Codes"]
}
},
"/api/v1/events/{eventId}/bookings": {
@@ -11142,9 +10557,7 @@
}
],
"summary": "Create a booking for an event",
- "tags": [
- "Bookings"
- ]
+ "tags": ["Bookings"]
}
},
"/api/v1/bookings/me": {
@@ -11203,10 +10616,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -11230,10 +10640,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -11245,9 +10652,7 @@
}
],
"summary": "Current user's booking history",
- "tags": [
- "Bookings"
- ]
+ "tags": ["Bookings"]
}
},
"/api/v1/bookings/{id}": {
@@ -11281,9 +10686,7 @@
}
],
"summary": "Single booking detail (owner only)",
- "tags": [
- "Bookings"
- ]
+ "tags": ["Bookings"]
}
},
"/api/v1/bookings/{id}/cancel": {
@@ -11328,9 +10731,7 @@
}
],
"summary": "Cancel a booking (guest only)",
- "tags": [
- "Bookings"
- ]
+ "tags": ["Bookings"]
}
},
"/api/v1/bookings/{id}/check-in": {
@@ -11364,9 +10765,7 @@
}
],
"summary": "Check in a guest (event organizer only)",
- "tags": [
- "Bookings"
- ]
+ "tags": ["Bookings"]
}
},
"/api/v1/events/{eventId}/waitlist": {
@@ -11410,9 +10809,7 @@
}
],
"summary": "Join the waitlist for a full event",
- "tags": [
- "Waitlist"
- ]
+ "tags": ["Waitlist"]
},
"get": {
"operationId": "WaitlistController_listForEvent",
@@ -11477,10 +10874,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -11504,10 +10898,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -11519,9 +10910,7 @@
}
],
"summary": "Host view of the waiting queue for their own event (used to hand-pick who gets a seat when settings.waitlistAutoOffer is false)",
- "tags": [
- "Waitlist"
- ]
+ "tags": ["Waitlist"]
}
},
"/api/v1/waitlist/me": {
@@ -11580,10 +10969,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -11607,10 +10993,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -11622,9 +11005,7 @@
}
],
"summary": "Current user's waitlist entries",
- "tags": [
- "Waitlist"
- ]
+ "tags": ["Waitlist"]
}
},
"/api/v1/events/{eventId}/waitlist/{entryId}/offer": {
@@ -11666,9 +11047,7 @@
}
],
"summary": "Host manually offers an opened seat to a specific waitlist entry",
- "tags": [
- "Waitlist"
- ]
+ "tags": ["Waitlist"]
}
},
"/api/v1/waitlist/{id}/accept": {
@@ -11702,9 +11081,7 @@
}
],
"summary": "Accept a notified waitlist offer",
- "tags": [
- "Waitlist"
- ]
+ "tags": ["Waitlist"]
}
},
"/api/v1/admin/bookings": {
@@ -11763,10 +11140,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -11790,10 +11164,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -11805,9 +11176,7 @@
}
],
"summary": "Paginated admin bookings list",
- "tags": [
- "Admin - Bookings"
- ]
+ "tags": ["Admin - Bookings"]
}
},
"/api/v1/admin/bookings/{id}/check-in": {
@@ -11841,9 +11210,7 @@
}
],
"summary": "Check in a guest for any organizer’s event as admin",
- "tags": [
- "Admin - Bookings"
- ]
+ "tags": ["Admin - Bookings"]
}
},
"/api/v1/events/{eventId}/reviews": {
@@ -11915,10 +11282,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
},
{
@@ -11952,10 +11316,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -12002,9 +11363,7 @@
}
},
"summary": "List published reviews for an event",
- "tags": [
- "Reviews"
- ]
+ "tags": ["Reviews"]
},
"post": {
"description": "Authenticated guests with a confirmed booking may review once after the event is completed.",
@@ -12109,9 +11468,7 @@
}
],
"summary": "Create a review for a completed event",
- "tags": [
- "Reviews"
- ]
+ "tags": ["Reviews"]
}
},
"/api/v1/users/{userId}/reviews": {
@@ -12183,10 +11540,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -12210,10 +11564,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -12260,9 +11611,7 @@
}
},
"summary": "List published reviews for an organizer",
- "tags": [
- "Reviews"
- ]
+ "tags": ["Reviews"]
}
},
"/api/v1/reviews/{id}": {
@@ -12369,9 +11718,7 @@
}
],
"summary": "Update own review",
- "tags": [
- "Reviews"
- ]
+ "tags": ["Reviews"]
}
},
"/api/v1/reviews/{id}/host-reply": {
@@ -12478,9 +11825,7 @@
}
],
"summary": "Reply to a review as organizer",
- "tags": [
- "Reviews"
- ]
+ "tags": ["Reviews"]
}
},
"/api/v1/admin/reviews": {
@@ -12542,10 +11887,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
},
{
@@ -12596,10 +11938,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -12611,9 +11950,7 @@
}
],
"summary": "Paginated review moderation list",
- "tags": [
- "Admin - Reviews"
- ]
+ "tags": ["Admin - Reviews"]
}
},
"/api/v1/admin/reviews/{id}/hide": {
@@ -12709,9 +12046,7 @@
}
],
"summary": "Hide a review from public view",
- "tags": [
- "Admin - Reviews"
- ]
+ "tags": ["Admin - Reviews"]
}
},
"/api/v1/admin/reviews/{id}/restore": {
@@ -12807,9 +12142,7 @@
}
],
"summary": "Restore a hidden review to published",
- "tags": [
- "Admin - Reviews"
- ]
+ "tags": ["Admin - Reviews"]
}
},
"/api/v1/admin/reviews/{id}": {
@@ -12845,9 +12178,7 @@
}
],
"summary": "Soft-delete a review",
- "tags": [
- "Admin - Reviews"
- ]
+ "tags": ["Admin - Reviews"]
}
},
"/api/v1/conversations/me/unread-count": {
@@ -12923,9 +12254,7 @@
}
],
"summary": "Get total unread message count",
- "tags": [
- "Chat"
- ]
+ "tags": ["Chat"]
}
},
"/api/v1/conversations/me": {
@@ -12987,10 +12316,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
},
{
@@ -13024,10 +12350,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -13089,9 +12412,7 @@
}
],
"summary": "List my conversations",
- "tags": [
- "Chat"
- ]
+ "tags": ["Chat"]
}
},
"/api/v1/conversations/direct/{otherUserId}": {
@@ -13188,9 +12509,7 @@
}
],
"summary": "Get or create a direct conversation",
- "tags": [
- "Chat"
- ]
+ "tags": ["Chat"]
}
},
"/api/v1/conversations/direct/{otherUserId}/messages": {
@@ -13297,9 +12616,7 @@
}
],
"summary": "Send a direct message",
- "tags": [
- "Chat"
- ]
+ "tags": ["Chat"]
}
},
"/api/v1/conversations/{id}": {
@@ -13396,9 +12713,7 @@
}
],
"summary": "Get a conversation",
- "tags": [
- "Chat"
- ]
+ "tags": ["Chat"]
}
},
"/api/v1/conversations/{id}/participants": {
@@ -13470,10 +12785,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -13497,10 +12809,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -13572,9 +12881,7 @@
}
],
"summary": "List conversation participants",
- "tags": [
- "Chat"
- ]
+ "tags": ["Chat"]
}
},
"/api/v1/conversations/{id}/read": {
@@ -13681,9 +12988,7 @@
}
],
"summary": "Mark conversation as read",
- "tags": [
- "Chat"
- ]
+ "tags": ["Chat"]
}
},
"/api/v1/conversations/{id}/messages": {
@@ -13765,10 +13070,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -13840,9 +13142,7 @@
}
],
"summary": "List messages in a conversation",
- "tags": [
- "Chat"
- ]
+ "tags": ["Chat"]
},
"post": {
"description": "Sends a message in an existing conversation (typically an event group chat).",
@@ -13947,9 +13247,7 @@
}
],
"summary": "Send a message in a conversation",
- "tags": [
- "Chat"
- ]
+ "tags": ["Chat"]
}
},
"/api/v1/admin/conversations": {
@@ -14008,10 +13306,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
},
{
@@ -14053,10 +13348,7 @@
"required": false,
"in": "query",
"schema": {
- "enum": [
- "direct",
- "event_group"
- ],
+ "enum": ["direct", "event_group"],
"type": "string"
}
}
@@ -14081,10 +13373,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -14156,9 +13445,7 @@
}
],
"summary": "List all conversations for read-only admin oversight",
- "tags": [
- "Admin - Chat Oversight"
- ]
+ "tags": ["Admin - Chat Oversight"]
}
},
"/api/v1/admin/conversations/{id}": {
@@ -14253,9 +13540,7 @@
}
],
"summary": "Get a conversation without joining or changing read state",
- "tags": [
- "Admin - Chat Oversight"
- ]
+ "tags": ["Admin - Chat Oversight"]
}
},
"/api/v1/admin/conversations/{id}/participants": {
@@ -14323,10 +13608,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -14350,10 +13632,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -14425,9 +13704,7 @@
}
],
"summary": "List conversation participants for admin oversight",
- "tags": [
- "Admin - Chat Oversight"
- ]
+ "tags": ["Admin - Chat Oversight"]
}
},
"/api/v1/admin/conversations/{id}/messages": {
@@ -14506,10 +13783,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -14581,9 +13855,7 @@
}
],
"summary": "Read message history without joining or changing read state",
- "tags": [
- "Admin - Chat Oversight"
- ]
+ "tags": ["Admin - Chat Oversight"]
}
},
"/api/v1/contact-messages": {
@@ -14634,9 +13906,7 @@
}
},
"summary": "Submit a public contact message",
- "tags": [
- "Contact Messages"
- ]
+ "tags": ["Contact Messages"]
}
},
"/api/v1/admin/contact-messages": {
@@ -14698,10 +13968,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
},
{
@@ -14735,10 +14002,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -14810,9 +14074,7 @@
}
],
"summary": "List contact form submissions",
- "tags": [
- "Admin - Contact Messages"
- ]
+ "tags": ["Admin - Contact Messages"]
}
},
"/api/v1/admin/contact-messages/{id}": {
@@ -14909,9 +14171,7 @@
}
],
"summary": "Get one contact message",
- "tags": [
- "Admin - Contact Messages"
- ]
+ "tags": ["Admin - Contact Messages"]
}
},
"/api/v1/admin/contact-messages/{id}/read": {
@@ -15008,9 +14268,7 @@
}
],
"summary": "Mark contact message as read",
- "tags": [
- "Admin - Contact Messages"
- ]
+ "tags": ["Admin - Contact Messages"]
}
},
"/api/v1/traffic-visits": {
@@ -15064,9 +14322,7 @@
}
},
"summary": "Record a unique attributed page visit",
- "tags": [
- "Traffic Visits"
- ]
+ "tags": ["Traffic Visits"]
}
},
"/api/v1/user-blocks": {
@@ -15163,9 +14419,7 @@
}
],
"summary": "Block another user",
- "tags": [
- "User Blocks"
- ]
+ "tags": ["User Blocks"]
}
},
"/api/v1/user-blocks/{blockedId}": {
@@ -15253,9 +14507,7 @@
}
],
"summary": "Unblock a user",
- "tags": [
- "User Blocks"
- ]
+ "tags": ["User Blocks"]
}
},
"/api/v1/user-blocks/me": {
@@ -15317,10 +14569,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
},
{
@@ -15354,10 +14603,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -15409,9 +14655,7 @@
}
],
"summary": "List users I have blocked",
- "tags": [
- "User Blocks"
- ]
+ "tags": ["User Blocks"]
}
},
"/api/v1/report-reasons": {
@@ -15455,9 +14699,7 @@
}
},
"summary": "List active report reasons",
- "tags": [
- "User Reports"
- ]
+ "tags": ["User Reports"]
}
},
"/api/v1/user-reports": {
@@ -15544,9 +14786,7 @@
}
],
"summary": "Report another user",
- "tags": [
- "User Reports"
- ]
+ "tags": ["User Reports"]
}
},
"/api/v1/admin/user-reports": {
@@ -15608,10 +14848,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
},
{
@@ -15665,10 +14902,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -15740,9 +14974,7 @@
}
],
"summary": "List user report review queue",
- "tags": [
- "Admin - User Reports"
- ]
+ "tags": ["Admin - User Reports"]
}
},
"/api/v1/admin/user-reports/{id}/review": {
@@ -15840,9 +15072,7 @@
}
],
"summary": "Mark user report as reviewed",
- "tags": [
- "Admin - User Reports"
- ]
+ "tags": ["Admin - User Reports"]
}
},
"/api/v1/admin/user-reports/{id}/dismiss": {
@@ -15940,9 +15170,7 @@
}
],
"summary": "Dismiss user report",
- "tags": [
- "Admin - User Reports"
- ]
+ "tags": ["Admin - User Reports"]
}
},
"/api/v1/admin/user-reports/{id}/block": {
@@ -16040,9 +15268,7 @@
}
],
"summary": "Block reported user on the reporter's behalf",
- "tags": [
- "Admin - User Reports"
- ]
+ "tags": ["Admin - User Reports"]
}
},
"/api/v1/support-tickets": {
@@ -16137,9 +15363,7 @@
}
],
"summary": "Create a support ticket",
- "tags": [
- "Support Tickets"
- ]
+ "tags": ["Support Tickets"]
}
},
"/api/v1/support-tickets/me": {
@@ -16198,10 +15422,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -16225,10 +15446,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -16240,9 +15458,7 @@
}
],
"summary": "List my support tickets",
- "tags": [
- "Support Tickets"
- ]
+ "tags": ["Support Tickets"]
}
},
"/api/v1/support-tickets/{id}": {
@@ -16276,9 +15492,7 @@
}
],
"summary": "Get my support ticket thread",
- "tags": [
- "Support Tickets"
- ]
+ "tags": ["Support Tickets"]
}
},
"/api/v1/support-tickets/{id}/replies": {
@@ -16322,9 +15536,7 @@
}
],
"summary": "Reply to my support ticket",
- "tags": [
- "Support Tickets"
- ]
+ "tags": ["Support Tickets"]
}
},
"/api/v1/admin/support-tickets": {
@@ -16383,10 +15595,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -16410,10 +15619,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -16485,9 +15691,7 @@
}
],
"summary": "List the support queue",
- "tags": [
- "Admin - Support Tickets"
- ]
+ "tags": ["Admin - Support Tickets"]
}
},
"/api/v1/admin/support-tickets/{id}": {
@@ -16521,9 +15725,7 @@
}
],
"summary": "Get a support ticket thread",
- "tags": [
- "Admin - Support Tickets"
- ]
+ "tags": ["Admin - Support Tickets"]
}
},
"/api/v1/admin/support-tickets/{id}/replies": {
@@ -16567,9 +15769,7 @@
}
],
"summary": "Reply as support and send the user an SMS",
- "tags": [
- "Admin - Support Tickets"
- ]
+ "tags": ["Admin - Support Tickets"]
}
},
"/api/v1/admin/support-tickets/{id}/status": {
@@ -16613,9 +15813,7 @@
}
],
"summary": "Change support ticket status",
- "tags": [
- "Admin - Support Tickets"
- ]
+ "tags": ["Admin - Support Tickets"]
}
},
"/api/v1/admin/reports/overview": {
@@ -16701,9 +15899,7 @@
}
],
"summary": "Platform-wide overview KPIs",
- "tags": [
- "Admin - Reports"
- ]
+ "tags": ["Admin - Reports"]
}
},
"/api/v1/admin/users/{id}/wallet/credit": {
@@ -16808,9 +16004,7 @@
}
],
"summary": "Manually credit a user wallet",
- "tags": [
- "Admin - User Detail"
- ]
+ "tags": ["Admin - User Detail"]
}
},
"/api/v1/admin/users/{id}/identity/attest": {
@@ -16905,9 +16099,7 @@
}
],
"summary": "Verify host identity without a user submission",
- "tags": [
- "Admin - User Detail"
- ]
+ "tags": ["Admin - User Detail"]
}
},
"/api/v1/admin/users/{id}/hosted-events": {
@@ -16974,10 +16166,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -17001,10 +16190,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "events",
- "response"
- ]
+ "required": ["events", "response"]
}
}
}
@@ -17076,9 +16262,7 @@
}
],
"summary": "Events this user has hosted (organizer_id = :id)",
- "tags": [
- "Admin - User Detail"
- ]
+ "tags": ["Admin - User Detail"]
}
},
"/api/v1/admin/users/{id}/bookings": {
@@ -17145,10 +16329,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -17172,10 +16353,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "bookings",
- "response"
- ]
+ "required": ["bookings", "response"]
}
}
}
@@ -17247,9 +16425,7 @@
}
],
"summary": "Bookings this user made as a guest",
- "tags": [
- "Admin - User Detail"
- ]
+ "tags": ["Admin - User Detail"]
}
},
"/api/v1/admin/users/{id}/payments": {
@@ -17316,10 +16492,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -17343,10 +16516,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "payments",
- "response"
- ]
+ "required": ["payments", "response"]
}
}
}
@@ -17418,9 +16588,7 @@
}
],
"summary": "Payments this user made",
- "tags": [
- "Admin - User Detail"
- ]
+ "tags": ["Admin - User Detail"]
}
},
"/api/v1/admin/users/{id}/reviews": {
@@ -17487,10 +16655,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
},
{
@@ -17499,10 +16664,7 @@
"in": "query",
"description": "written (default): authored by this user. received: on events this user organized.",
"schema": {
- "enum": [
- "written",
- "received"
- ],
+ "enum": ["written", "received"],
"type": "string"
}
}
@@ -17527,10 +16689,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "reviews",
- "response"
- ]
+ "required": ["reviews", "response"]
}
}
}
@@ -17602,9 +16761,7 @@
}
],
"summary": "Reviews written by this user or received on their events",
- "tags": [
- "Admin - User Detail"
- ]
+ "tags": ["Admin - User Detail"]
}
},
"/api/v1/admin/users/{id}/follows": {
@@ -17671,10 +16828,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
},
{
@@ -17683,10 +16837,7 @@
"in": "query",
"description": "following (default): organizers this user follows. followers: users following this user.",
"schema": {
- "enum": [
- "following",
- "followers"
- ],
+ "enum": ["following", "followers"],
"type": "string"
}
}
@@ -17711,10 +16862,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "follows",
- "response"
- ]
+ "required": ["follows", "response"]
}
}
}
@@ -17786,9 +16934,7 @@
}
],
"summary": "Organizers this user follows, or users following this user",
- "tags": [
- "Admin - User Detail"
- ]
+ "tags": ["Admin - User Detail"]
}
},
"/api/v1/admin/users/{id}/reports": {
@@ -17855,10 +17001,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
},
{
@@ -17867,10 +17010,7 @@
"in": "query",
"description": "filed (default): reports this user submitted. received: reports submitted about this user.",
"schema": {
- "enum": [
- "filed",
- "received"
- ],
+ "enum": ["filed", "received"],
"type": "string"
}
}
@@ -17895,10 +17035,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "reports",
- "response"
- ]
+ "required": ["reports", "response"]
}
}
}
@@ -17970,9 +17107,7 @@
}
],
"summary": "User reports this user filed, or reports filed about them",
- "tags": [
- "Admin - User Detail"
- ]
+ "tags": ["Admin - User Detail"]
}
},
"/api/v1/admin/users/{id}/blocks": {
@@ -18039,10 +17174,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
},
{
@@ -18051,10 +17183,7 @@
"in": "query",
"description": "blocking (default): users this user blocked. blockedBy: users who blocked this user.",
"schema": {
- "enum": [
- "blocking",
- "blockedBy"
- ],
+ "enum": ["blocking", "blockedBy"],
"type": "string"
}
}
@@ -18079,10 +17208,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "blocks",
- "response"
- ]
+ "required": ["blocks", "response"]
}
}
}
@@ -18154,9 +17280,7 @@
}
],
"summary": "Users this user has blocked, or users who blocked this user",
- "tags": [
- "Admin - User Detail"
- ]
+ "tags": ["Admin - User Detail"]
}
},
"/api/v1/admin/audit-logs": {
@@ -18218,10 +17342,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
},
{
@@ -18273,10 +17394,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -18348,9 +17466,7 @@
}
],
"summary": "List admin action audit trail",
- "tags": [
- "Admin - Audit Logs"
- ]
+ "tags": ["Admin - Audit Logs"]
}
},
"/api/v1/uploads": {
@@ -18364,9 +17480,7 @@
"multipart/form-data": {
"schema": {
"type": "object",
- "required": [
- "file"
- ],
+ "required": ["file"],
"properties": {
"file": {
"type": "string",
@@ -18435,9 +17549,7 @@
}
],
"summary": "Upload an image file",
- "tags": [
- "Uploads"
- ]
+ "tags": ["Uploads"]
}
},
"/api/v1/uploads/identity": {
@@ -18450,9 +17562,7 @@
"multipart/form-data": {
"schema": {
"type": "object",
- "required": [
- "file"
- ],
+ "required": ["file"],
"properties": {
"file": {
"type": "string",
@@ -18481,9 +17591,7 @@
}
],
"summary": "Upload a private identity document image",
- "tags": [
- "Uploads"
- ]
+ "tags": ["Uploads"]
}
},
"/api/v1/uploads/identity/{ownerId}/{filename}": {
@@ -18538,9 +17646,7 @@
}
],
"summary": "Read an authorized private identity document",
- "tags": [
- "Uploads"
- ]
+ "tags": ["Uploads"]
}
},
"/api/v1/uploads/internal": {
@@ -18579,9 +17685,7 @@
"multipart/form-data": {
"schema": {
"type": "object",
- "required": [
- "file"
- ],
+ "required": ["file"],
"properties": {
"file": {
"type": "string",
@@ -18645,9 +17749,7 @@
}
},
"summary": "Internal upload from trusted app instances",
- "tags": [
- "Uploads"
- ]
+ "tags": ["Uploads"]
}
},
"/api/v1/blog-articles": {
@@ -18703,9 +17805,7 @@
}
},
"summary": "Published blog articles (unpaginated, for hub/sitemap pages)",
- "tags": [
- "Blog Articles"
- ]
+ "tags": ["Blog Articles"]
}
},
"/api/v1/blog-articles/{slug}/related": {
@@ -18746,9 +17846,7 @@
}
},
"summary": "Related published articles by slug",
- "tags": [
- "Blog Articles"
- ]
+ "tags": ["Blog Articles"]
}
},
"/api/v1/blog-articles/{slug}": {
@@ -18777,9 +17875,7 @@
}
},
"summary": "Single published article by slug",
- "tags": [
- "Blog Articles"
- ]
+ "tags": ["Blog Articles"]
}
},
"/api/v1/admin/blog-articles": {
@@ -18838,10 +17934,7 @@
"description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).",
"schema": {
"type": "number",
- "enum": [
- 0,
- 1
- ]
+ "enum": [0, 1]
}
}
],
@@ -18865,10 +17958,7 @@
"description": "Pagination metadata for the current query."
}
},
- "required": [
- "items",
- "response"
- ]
+ "required": ["items", "response"]
}
}
}
@@ -18880,9 +17970,7 @@
}
],
"summary": "Paginated article management list",
- "tags": [
- "Admin - Blog Articles"
- ]
+ "tags": ["Admin - Blog Articles"]
},
"post": {
"operationId": "AdminBlogArticlesController_create",
@@ -18915,9 +18003,7 @@
}
],
"summary": "Create blog article",
- "tags": [
- "Admin - Blog Articles"
- ]
+ "tags": ["Admin - Blog Articles"]
}
},
"/api/v1/admin/blog-articles/{id}": {
@@ -18951,9 +18037,7 @@
}
],
"summary": "Single article by id (draft or published)",
- "tags": [
- "Admin - Blog Articles"
- ]
+ "tags": ["Admin - Blog Articles"]
},
"patch": {
"operationId": "AdminBlogArticlesController_update",
@@ -18995,9 +18079,7 @@
}
],
"summary": "Update blog article",
- "tags": [
- "Admin - Blog Articles"
- ]
+ "tags": ["Admin - Blog Articles"]
},
"delete": {
"operationId": "AdminBlogArticlesController_remove",
@@ -19029,9 +18111,7 @@
}
],
"summary": "Soft-delete blog article",
- "tags": [
- "Admin - Blog Articles"
- ]
+ "tags": ["Admin - Blog Articles"]
}
},
"/health": {
@@ -19052,9 +18132,7 @@
}
},
"summary": "Health check",
- "tags": [
- "Health"
- ]
+ "tags": ["Health"]
}
},
"/health/ready": {
@@ -19085,9 +18163,7 @@
}
},
"summary": "Readiness check",
- "tags": [
- "Health"
- ]
+ "tags": ["Health"]
}
}
},
@@ -19223,9 +18299,7 @@
"format": "phone"
}
},
- "required": [
- "mobile"
- ]
+ "required": ["mobile"]
},
"OtpRequestResponseDto": {
"type": "object",
@@ -19233,10 +18307,7 @@
"purpose": {
"type": "string",
"description": "Whether this OTP flow is for an existing or new account.",
- "enum": [
- "login",
- "register"
- ],
+ "enum": ["login", "register"],
"example": "login"
},
"expiresIn": {
@@ -19250,11 +18321,7 @@
"example": false
}
},
- "required": [
- "purpose",
- "expiresIn",
- "alreadySent"
- ]
+ "required": ["purpose", "expiresIn", "alreadySent"]
},
"ApiErrorCode": {
"type": "string",
@@ -19335,9 +18402,7 @@
"type": "object",
"description": "Optional field-level validation errors keyed by request field name.",
"example": {
- "mobile": [
- "mobile must be a valid Iranian mobile number"
- ]
+ "mobile": ["mobile must be a valid Iranian mobile number"]
},
"additionalProperties": {
"type": "array",
@@ -19347,11 +18412,7 @@
}
}
},
- "required": [
- "success",
- "code",
- "message"
- ]
+ "required": ["success", "code", "message"]
},
"VerifyOtpDto": {
"type": "object",
@@ -19392,19 +18453,11 @@
"deprecated": true
}
},
- "required": [
- "mobile",
- "code"
- ]
+ "required": ["mobile", "code"]
},
"UserStatus": {
"type": "string",
- "enum": [
- "active",
- "pending",
- "suspended",
- "deleted"
- ],
+ "enum": ["active", "pending", "suspended", "deleted"],
"description": "Account status after OTP verification; pending users must complete profile."
},
"AuthTokensDto": {
@@ -19437,12 +18490,7 @@
]
}
},
- "required": [
- "accessToken",
- "sessionId",
- "expiresAt",
- "status"
- ]
+ "required": ["accessToken", "sessionId", "expiresAt", "status"]
},
"LoggedOutResponseDto": {
"type": "object",
@@ -19452,9 +18500,7 @@
"example": true
}
},
- "required": [
- "loggedOut"
- ]
+ "required": ["loggedOut"]
},
"SessionResponseDto": {
"type": "object",
@@ -19489,11 +18535,7 @@
"format": "date-time"
}
},
- "required": [
- "id",
- "createdAt",
- "expiresAt"
- ]
+ "required": ["id", "createdAt", "expiresAt"]
},
"RevokedResponseDto": {
"type": "object",
@@ -19503,30 +18545,16 @@
"example": true
}
},
- "required": [
- "revoked"
- ]
+ "required": ["revoked"]
},
"Gender": {
"type": "string",
- "enum": [
- "male",
- "female",
- "other"
- ],
+ "enum": ["male", "female", "other"],
"description": "Gender for placeholder avatars when no photo is set."
},
"ContactChannel": {
"type": "string",
- "enum": [
- "instagram",
- "telegram",
- "twitter",
- "linkedin",
- "youtube",
- "website",
- "support_phone"
- ]
+ "enum": ["instagram", "telegram", "twitter", "linkedin", "youtube", "website", "support_phone"]
},
"PublicOrganizerContactLinkDto": {
"type": "object",
@@ -19550,12 +18578,7 @@
"description": "Raw stored value (username, URL, or phone digits)."
}
},
- "required": [
- "channel",
- "label",
- "url",
- "value"
- ]
+ "required": ["channel", "label", "url", "value"]
},
"PublicOrganizerEventDto": {
"type": "object",
@@ -19596,17 +18619,7 @@
"type": "boolean"
}
},
- "required": [
- "id",
- "slug",
- "title",
- "posterUrl",
- "startsAt",
- "cityName",
- "isFree",
- "price",
- "isPast"
- ]
+ "required": ["id", "slug", "title", "posterUrl", "startsAt", "cityName", "isFree", "price", "isPast"]
},
"PublicOrganizerResponseDto": {
"type": "object",
@@ -19706,11 +18719,7 @@
},
"ReviewStatus": {
"type": "string",
- "enum": [
- "published",
- "hidden",
- "deleted"
- ],
+ "enum": ["published", "hidden", "deleted"],
"description": "Publication status."
},
"ReviewUserSummaryDto": {
@@ -19741,12 +18750,7 @@
"nullable": true
}
},
- "required": [
- "id",
- "firstName",
- "lastName",
- "avatarUrl"
- ]
+ "required": ["id", "firstName", "lastName", "avatarUrl"]
},
"OrganizerReviewResponseDto": {
"type": "object",
@@ -19871,11 +18875,7 @@
"minimum": 0
}
},
- "required": [
- "organizer",
- "reviews",
- "reviewsTotal"
- ]
+ "required": ["organizer", "reviews", "reviewsTotal"]
},
"OrganizerViewerStateResponseDto": {
"type": "object",
@@ -19890,27 +18890,16 @@
}
}
},
- "required": [
- "isFollowing",
- "attendeeContactLinks"
- ]
+ "required": ["isFollowing", "attendeeContactLinks"]
},
"IdentityVerificationStatus": {
"type": "string",
- "enum": [
- "none",
- "pending",
- "verified",
- "rejected"
- ],
+ "enum": ["none", "pending", "verified", "rejected"],
"description": "Host identity verification status; verified users may create events."
},
"UserRole": {
"type": "string",
- "enum": [
- "user",
- "admin"
- ],
+ "enum": ["user", "admin"],
"description": "User role. Admin is staff-only and manually assigned."
},
"UserProfileResponseDto": {
@@ -20149,20 +19138,11 @@
"minimum": 1
}
},
- "required": [
- "firstName",
- "lastName",
- "gender",
- "dateOfBirth",
- "cityId"
- ]
+ "required": ["firstName", "lastName", "gender", "dateOfBirth", "cityId"]
},
"ListResultType": {
"type": "number",
- "enum": [
- 0,
- 1
- ],
+ "enum": [0, 1],
"description": "Result type requested by the client: 0 for JSON list, 1 for Excel export."
},
"PaginationMetaDto": {
@@ -20261,14 +19241,7 @@
"description": "True when newer messages exist beyond this page (pass `newerCursor` as `after`)."
}
},
- "required": [
- "page",
- "pageSize",
- "totalItemsCount",
- "totalPages",
- "sort",
- "filters"
- ]
+ "required": ["page", "pageSize", "totalItemsCount", "totalPages", "sort", "filters"]
},
"AdminChangeUserMobileDto": {
"type": "object",
@@ -20283,9 +19256,7 @@
"format": "phone"
}
},
- "required": [
- "mobile"
- ]
+ "required": ["mobile"]
},
"AdminUpdateUserDto": {
"type": "object",
@@ -20343,19 +19314,13 @@
"status": {
"type": "string",
"description": "Suspend or reactivate the account. 'pending' and 'deleted' are not settable here — see the field-level note in this DTO.",
- "enum": [
- "active",
- "suspended"
- ],
+ "enum": ["active", "suspended"],
"example": "suspended"
},
"hostPlan": {
"type": "string",
"description": "Free hosts can create 10 events; unlimited removes the quota.",
- "enum": [
- "free",
- "unlimited"
- ]
+ "enum": ["free", "unlimited"]
}
}
},
@@ -20368,15 +19333,7 @@
},
"channel": {
"type": "string",
- "enum": [
- "instagram",
- "telegram",
- "twitter",
- "linkedin",
- "youtube",
- "website",
- "support_phone"
- ]
+ "enum": ["instagram", "telegram", "twitter", "linkedin", "youtube", "website", "support_phone"]
},
"value": {
"type": "string"
@@ -20396,30 +19353,14 @@
"type": "string"
}
},
- "required": [
- "id",
- "channel",
- "value",
- "isPublic",
- "displayOrder",
- "createdAt",
- "updatedAt"
- ]
+ "required": ["id", "channel", "value", "isPublic", "displayOrder", "createdAt", "updatedAt"]
},
"CreateUserContactLinkDto": {
"type": "object",
"properties": {
"channel": {
"type": "string",
- "enum": [
- "instagram",
- "telegram",
- "twitter",
- "linkedin",
- "youtube",
- "website",
- "support_phone"
- ],
+ "enum": ["instagram", "telegram", "twitter", "linkedin", "youtube", "website", "support_phone"],
"example": "instagram"
},
"value": {
@@ -20436,10 +19377,7 @@
"example": 0
}
},
- "required": [
- "channel",
- "value"
- ]
+ "required": ["channel", "value"]
},
"UpdateUserContactLinkDto": {
"type": "object",
@@ -20467,9 +19405,7 @@
"example": true
}
},
- "required": [
- "success"
- ]
+ "required": ["success"]
},
"IdentityRejectionReasonResponseDto": {
"type": "object",
@@ -20501,12 +19437,7 @@
"minimum": 0
}
},
- "required": [
- "id",
- "code",
- "label",
- "sortOrder"
- ]
+ "required": ["id", "code", "label", "sortOrder"]
},
"RequestHostContractOtpDto": {
"type": "object",
@@ -20530,11 +19461,7 @@
"description": "Must match the currently published host cooperation contract version."
}
},
- "required": [
- "nationalCode",
- "contractAccepted",
- "contractVersion"
- ]
+ "required": ["nationalCode", "contractAccepted", "contractVersion"]
},
"HostContractOtpRequestedDto": {
"type": "object",
@@ -20555,11 +19482,7 @@
"example": "2026-08-22"
}
},
- "required": [
- "purpose",
- "expiresIn",
- "contractVersion"
- ]
+ "required": ["purpose", "expiresIn", "contractVersion"]
},
"ConfirmHostContractOtpDto": {
"type": "object",
@@ -20572,16 +19495,11 @@
"maxLength": 4
}
},
- "required": [
- "code"
- ]
+ "required": ["code"]
},
"IdentityVerificationSource": {
"type": "string",
- "enum": [
- "host_submission",
- "admin_attested"
- ],
+ "enum": ["host_submission", "admin_attested"],
"description": "host_submission means the user sent KYC fields; admin_attested means staff verified the user without a host request."
},
"IdentityVerificationResponseDto": {
@@ -20721,14 +19639,7 @@
"format": "date-time"
}
},
- "required": [
- "id",
- "userId",
- "status",
- "source",
- "createdAt",
- "updatedAt"
- ]
+ "required": ["id", "userId", "status", "source", "createdAt", "updatedAt"]
},
"AdminIdentityVerificationResponseDto": {
"type": "object",
@@ -20876,15 +19787,7 @@
}
}
},
- "required": [
- "id",
- "userId",
- "status",
- "source",
- "createdAt",
- "updatedAt",
- "user"
- ]
+ "required": ["id", "userId", "status", "source", "createdAt", "updatedAt", "user"]
},
"RejectIdentityVerificationDto": {
"type": "object",
@@ -20905,12 +19808,7 @@
},
"NotificationStatus": {
"type": "string",
- "enum": [
- "pending",
- "sent",
- "failed",
- "cancelled"
- ],
+ "enum": ["pending", "sent", "failed", "cancelled"],
"description": "Parent notification delivery status."
},
"NotificationResponseDto": {
@@ -20984,14 +19882,7 @@
"format": "date-time"
}
},
- "required": [
- "id",
- "category",
- "title",
- "body",
- "status",
- "createdAt"
- ]
+ "required": ["id", "category", "title", "body", "status", "createdAt"]
},
"NotificationUnreadCountResponseDto": {
"type": "object",
@@ -21002,9 +19893,7 @@
"example": 2
}
},
- "required": [
- "totalUnread"
- ]
+ "required": ["totalUnread"]
},
"PushVapidPublicKeyResponseDto": {
"type": "object",
@@ -21020,10 +19909,7 @@
"example": true
}
},
- "required": [
- "publicKey",
- "enabled"
- ]
+ "required": ["publicKey", "enabled"]
},
"PushDeliveryReceiptDto": {
"type": "object",
@@ -21043,10 +19929,7 @@
"eventType": {
"type": "string",
"description": "displayed = browser showed the notification, opened = user tapped it.",
- "enum": [
- "displayed",
- "opened"
- ],
+ "enum": ["displayed", "opened"],
"example": "opened"
},
"receiptHmac": {
@@ -21055,12 +19938,7 @@
"example": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}
},
- "required": [
- "notificationId",
- "subscriptionId",
- "eventType",
- "receiptHmac"
- ]
+ "required": ["notificationId", "subscriptionId", "eventType", "receiptHmac"]
},
"PushDeliveryReceiptResponseDto": {
"type": "object",
@@ -21097,11 +19975,7 @@
"nullable": true
}
},
- "required": [
- "recorded",
- "notificationId",
- "subscriptionId"
- ]
+ "required": ["recorded", "notificationId", "subscriptionId"]
},
"PushSubscribeDto": {
"type": "object",
@@ -21124,11 +19998,7 @@
"description": "Browser user-agent string for debugging multi-device subscriptions."
}
},
- "required": [
- "endpoint",
- "p256dh",
- "auth"
- ]
+ "required": ["endpoint", "p256dh", "auth"]
},
"PushSubscriptionResponseDto": {
"type": "object",
@@ -21149,12 +20019,7 @@
"type": "string"
}
},
- "required": [
- "id",
- "userId",
- "endpoint",
- "createdAt"
- ]
+ "required": ["id", "userId", "endpoint", "createdAt"]
},
"DeletedResponseDto": {
"type": "object",
@@ -21164,9 +20029,7 @@
"example": true
}
},
- "required": [
- "deleted"
- ]
+ "required": ["deleted"]
},
"DeletedCountResponseDto": {
"type": "object",
@@ -21177,18 +20040,11 @@
"minimum": 0
}
},
- "required": [
- "deletedCount"
- ]
+ "required": ["deletedCount"]
},
"SmsStatus": {
"type": "string",
- "enum": [
- "pending",
- "sent",
- "failed",
- "delivered"
- ],
+ "enum": ["pending", "sent", "failed", "delivered"],
"description": "SMS delivery status."
},
"SmsRecipientDto": {
@@ -21207,10 +20063,7 @@
"nullable": true
}
},
- "required": [
- "firstName",
- "lastName"
- ]
+ "required": ["firstName", "lastName"]
},
"SmsMessageResponseDto": {
"type": "object",
@@ -21303,16 +20156,7 @@
]
}
},
- "required": [
- "id",
- "notificationId",
- "userId",
- "mobile",
- "messageBody",
- "status",
- "createdAt",
- "updatedAt"
- ]
+ "required": ["id", "notificationId", "userId", "mobile", "messageBody", "status", "createdAt", "updatedAt"]
},
"NotificationRuleResponseDto": {
"type": "object",
@@ -21332,11 +20176,7 @@
},
"channel": {
"type": "string",
- "enum": [
- "in_app",
- "sms",
- "both"
- ]
+ "enum": ["in_app", "sms", "both"]
},
"titleTemplate": {
"type": "string"
@@ -21390,11 +20230,7 @@
},
"channel": {
"type": "string",
- "enum": [
- "in_app",
- "sms",
- "both"
- ]
+ "enum": ["in_app", "sms", "both"]
},
"titleTemplate": {
"type": "string"
@@ -21414,9 +20250,7 @@
"purpose": {
"type": "string",
"description": "OTP purpose used when confirming a bulk SMS send.",
- "enum": [
- "admin_bulk_sms"
- ],
+ "enum": ["admin_bulk_sms"],
"example": "admin_bulk_sms"
},
"expiresIn": {
@@ -21425,18 +20259,11 @@
"example": 300
}
},
- "required": [
- "purpose",
- "expiresIn"
- ]
+ "required": ["purpose", "expiresIn"]
},
"NotificationChannel": {
"type": "string",
- "enum": [
- "in_app",
- "sms",
- "both"
- ],
+ "enum": ["in_app", "sms", "both"],
"description": "Delivery channel. `in_app` also dispatches Web Push when the user has an active subscription. Defaults to `in_app`."
},
"AdminSendManualNotificationDto": {
@@ -21472,9 +20299,7 @@
},
"userIds": {
"description": "Recipient user ids. At least one of userIds or mobiles must be provided.",
- "example": [
- "c3c921d5-4418-42ed-bf39-0f04b1d5123b"
- ],
+ "example": ["c3c921d5-4418-42ed-bf39-0f04b1d5123b"],
"type": "array",
"items": {
"type": "string"
@@ -21482,10 +20307,7 @@
},
"mobiles": {
"description": "Recipient mobile numbers (0912..., 98912..., or +98912...). At least one of userIds or mobiles must be provided.",
- "example": [
- "09153641196",
- "989121234567"
- ],
+ "example": ["09153641196", "989121234567"],
"type": "array",
"items": {
"type": "string"
@@ -21498,9 +20320,7 @@
"maxLength": 10
}
},
- "required": [
- "body"
- ]
+ "required": ["body"]
},
"AdminManualNotificationRecipientDto": {
"type": "object",
@@ -21535,11 +20355,7 @@
"format": "uuid"
}
},
- "required": [
- "userId",
- "mobile",
- "notificationId"
- ]
+ "required": ["userId", "mobile", "notificationId"]
},
"AdminManualNotificationResponseDto": {
"type": "object",
@@ -21558,9 +20374,7 @@
},
"missingUserIds": {
"description": "Requested user ids that did not resolve to a user row.",
- "example": [
- "11111111-1111-1111-1111-111111111111"
- ],
+ "example": ["11111111-1111-1111-1111-111111111111"],
"type": "array",
"items": {
"type": "string"
@@ -21568,21 +20382,14 @@
},
"missingMobiles": {
"description": "Requested mobile numbers that did not resolve to a user row after normalization.",
- "example": [
- "989199999999"
- ],
+ "example": ["989199999999"],
"type": "array",
"items": {
"type": "string"
}
}
},
- "required": [
- "recipientCount",
- "recipients",
- "missingUserIds",
- "missingMobiles"
- ]
+ "required": ["recipientCount", "recipients", "missingUserIds", "missingMobiles"]
},
"AdminInAppRecipientDto": {
"type": "object",
@@ -21600,10 +20407,7 @@
"nullable": true
}
},
- "required": [
- "firstName",
- "lastName"
- ]
+ "required": ["firstName", "lastName"]
},
"AdminInAppNotificationResponseDto": {
"type": "object",
@@ -21677,16 +20481,7 @@
]
}
},
- "required": [
- "id",
- "userId",
- "mobile",
- "category",
- "title",
- "body",
- "status",
- "createdAt"
- ]
+ "required": ["id", "userId", "mobile", "category", "title", "body", "status", "createdAt"]
},
"PushDeliveryRecipientDto": {
"type": "object",
@@ -21704,10 +20499,7 @@
"nullable": true
}
},
- "required": [
- "firstName",
- "lastName"
- ]
+ "required": ["firstName", "lastName"]
},
"PushDeliveryResponseDto": {
"type": "object",
@@ -21808,18 +20600,7 @@
]
}
},
- "required": [
- "id",
- "notificationId",
- "userId",
- "subscriptionId",
- "mobile",
- "category",
- "title",
- "body",
- "status",
- "createdAt"
- ]
+ "required": ["id", "notificationId", "userId", "subscriptionId", "mobile", "category", "title", "body", "status", "createdAt"]
},
"EventCategoryResponseDto": {
"type": "object",
@@ -21940,10 +20721,7 @@
"example": "موسیقی"
}
},
- "required": [
- "id",
- "name"
- ]
+ "required": ["id", "name"]
},
"CreateEventCategoryDto": {
"type": "object",
@@ -22018,10 +20796,7 @@
"nullable": true
}
},
- "required": [
- "name",
- "slug"
- ]
+ "required": ["name", "slug"]
},
"UpdateEventCategoryDto": {
"type": "object",
@@ -22117,12 +20892,7 @@
"example": 51.389
}
},
- "required": [
- "id",
- "name",
- "lat",
- "lng"
- ]
+ "required": ["id", "name", "lat", "lng"]
},
"CityResponseDto": {
"type": "object",
@@ -22152,12 +20922,7 @@
"example": 51.389
}
},
- "required": [
- "id",
- "provinceId",
- "name",
- "slug"
- ]
+ "required": ["id", "provinceId", "name", "slug"]
},
"CityDetailResponseDto": {
"type": "object",
@@ -22195,26 +20960,11 @@
"example": "tehran-province"
}
},
- "required": [
- "id",
- "provinceId",
- "name",
- "slug",
- "provinceName",
- "provinceSlug"
- ]
+ "required": ["id", "provinceId", "name", "slug", "provinceName", "provinceSlug"]
},
"EventStatus": {
"type": "string",
- "enum": [
- "draft",
- "pending_review",
- "published",
- "full",
- "rejected",
- "cancelled",
- "completed"
- ]
+ "enum": ["draft", "pending_review", "published", "full", "rejected", "cancelled", "completed"]
},
"MyEventsHostItemDto": {
"type": "object",
@@ -22300,14 +21050,7 @@
},
"BookingStatus": {
"type": "string",
- "enum": [
- "pending_payment",
- "confirmed",
- "cancelled",
- "expired",
- "refunded",
- "no_show"
- ]
+ "enum": ["pending_payment", "confirmed", "cancelled", "expired", "refunded", "no_show"]
},
"MyEventsGuestItemDto": {
"type": "object",
@@ -22403,20 +21146,11 @@
},
"EventGenderRestriction": {
"type": "string",
- "enum": [
- "open",
- "female_only",
- "male_only"
- ]
+ "enum": ["open", "female_only", "male_only"]
},
"EventAgeRestriction": {
"type": "string",
- "enum": [
- "open",
- "age_15_19",
- "age_20_24",
- "age_25_plus"
- ]
+ "enum": ["open", "age_15_19", "age_20_24", "age_25_plus"]
},
"EventSettingsDto": {
"type": "object",
@@ -22433,10 +21167,7 @@
},
"addressVisibility": {
"type": "string",
- "enum": [
- "public",
- "attendees_only"
- ],
+ "enum": ["public", "attendees_only"],
"default": "public",
"description": "When 'attendees_only', only the organizer/admin and guests with a confirmed booking see the exact address/lat/lng; everyone else sees generalArea instead."
},
@@ -22462,10 +21193,7 @@
"properties": {
"mediaType": {
"type": "string",
- "enum": [
- "image",
- "video"
- ],
+ "enum": ["image", "video"],
"example": "image"
},
"url": {
@@ -22491,10 +21219,7 @@
"description": "Marks the 1:1 square card poster. Exactly one image per event."
}
},
- "required": [
- "mediaType",
- "url"
- ]
+ "required": ["mediaType", "url"]
},
"CreateEventFaqDto": {
"type": "object",
@@ -22515,10 +21240,7 @@
"minimum": 0
}
},
- "required": [
- "question",
- "answer"
- ]
+ "required": ["question", "answer"]
},
"SubmitEventRevisionDto": {
"type": "object",
@@ -22620,9 +21342,7 @@
}
}
},
- "required": [
- "media"
- ]
+ "required": ["media"]
},
"EventRevisionResponseDto": {
"type": "object",
@@ -22635,12 +21355,7 @@
},
"status": {
"type": "string",
- "enum": [
- "pending",
- "approved",
- "rejected",
- "superseded"
- ]
+ "enum": ["pending", "approved", "rejected", "superseded"]
},
"payload": {
"type": "object",
@@ -22663,14 +21378,7 @@
"type": "object"
}
},
- "required": [
- "id",
- "eventId",
- "status",
- "payload",
- "createdBy",
- "submittedAt"
- ]
+ "required": ["id", "eventId", "status", "payload", "createdBy", "submittedAt"]
},
"CreateEventDto": {
"type": "object",
@@ -22800,10 +21508,7 @@
},
"addressVisibility": {
"type": "string",
- "enum": [
- "public",
- "attendees_only"
- ]
+ "enum": ["public", "attendees_only"]
},
"generalArea": {
"type": "string",
@@ -22817,14 +21522,7 @@
"description": "When true, review_request after completion is sent as in-app + SMS; otherwise in-app only."
}
},
- "required": [
- "isDiscoverable",
- "autoCreateGroup",
- "addressVisibility",
- "generalArea",
- "waitlistAutoOffer",
- "sendReviewRequestSms"
- ]
+ "required": ["isDiscoverable", "autoCreateGroup", "addressVisibility", "generalArea", "waitlistAutoOffer", "sendReviewRequestSms"]
},
"EventDiscoveryPlacementDto": {
"type": "object",
@@ -22837,10 +21535,7 @@
"minimum": 0
}
},
- "required": [
- "placement",
- "priority"
- ]
+ "required": ["placement", "priority"]
},
"EventResponseDto": {
"type": "object",
@@ -23165,15 +21860,7 @@
"minimum": 0
}
},
- "required": [
- "grossAmount",
- "commissionAmount",
- "guestRefundAmount",
- "netAmount",
- "heldAmount",
- "availableAmount",
- "settledAmount"
- ]
+ "required": ["grossAmount", "commissionAmount", "guestRefundAmount", "netAmount", "heldAmount", "availableAmount", "settledAmount"]
},
"OwnerEventTrafficChannelInsightsDto": {
"type": "object",
@@ -23187,10 +21874,7 @@
"minimum": 0
}
},
- "required": [
- "uniqueVisits",
- "confirmedBookings"
- ]
+ "required": ["uniqueVisits", "confirmedBookings"]
},
"OwnerEventTrafficInsightsDto": {
"type": "object",
@@ -23202,10 +21886,7 @@
"$ref": "#/components/schemas/OwnerEventTrafficChannelInsightsDto"
}
},
- "required": [
- "instagram",
- "telegram"
- ]
+ "required": ["instagram", "telegram"]
},
"OwnerEventInsightsResponseDto": {
"type": "object",
@@ -23224,19 +21905,11 @@
"$ref": "#/components/schemas/OwnerEventTrafficInsightsDto"
}
},
- "required": [
- "bookmarkCount",
- "registrations",
- "financial",
- "traffic"
- ]
+ "required": ["bookmarkCount", "registrations", "financial", "traffic"]
},
"EventMediaType": {
"type": "string",
- "enum": [
- "image",
- "video"
- ]
+ "enum": ["image", "video"]
},
"EventMediaResponseDto": {
"type": "object",
@@ -23279,17 +21952,7 @@
"type": "string"
}
},
- "required": [
- "id",
- "eventId",
- "mediaType",
- "url",
- "thumbnailUrl",
- "sortOrder",
- "isPoster",
- "isSquarePoster",
- "createdAt"
- ]
+ "required": ["id", "eventId", "mediaType", "url", "thumbnailUrl", "sortOrder", "isPoster", "isSquarePoster", "createdAt"]
},
"EventFaqResponseDto": {
"type": "object",
@@ -23320,15 +21983,7 @@
"type": "string"
}
},
- "required": [
- "id",
- "eventId",
- "question",
- "answer",
- "sortOrder",
- "createdAt",
- "updatedAt"
- ]
+ "required": ["id", "eventId", "question", "answer", "sortOrder", "createdAt", "updatedAt"]
},
"EventManagementBootstrapResponseDto": {
"type": "object",
@@ -23361,15 +22016,7 @@
}
}
},
- "required": [
- "event",
- "insights",
- "categoryName",
- "cityName",
- "provinceName",
- "media",
- "faqs"
- ]
+ "required": ["event", "insights", "categoryName", "cityName", "provinceName", "media", "faqs"]
},
"EventAttendeeResponseDto": {
"type": "object",
@@ -23423,25 +22070,11 @@
"type": "string"
}
},
- "required": [
- "bookingId",
- "userId",
- "bookingCode",
- "status",
- "mobile",
- "createdAt"
- ]
+ "required": ["bookingId", "userId", "bookingCode", "status", "mobile", "createdAt"]
},
"EventAttendeeFilter": {
"type": "string",
- "enum": [
- "all",
- "confirmed",
- "checked_in",
- "not_checked_in",
- "pending_payment",
- "cancelled"
- ]
+ "enum": ["all", "confirmed", "checked_in", "not_checked_in", "pending_payment", "cancelled"]
},
"UpdateEventReservedCapacityDto": {
"type": "object",
@@ -23453,9 +22086,7 @@
"description": "Absolute off-platform reserved seat count. Occupancy is bookedCount + reservedCapacity and cannot exceed capacity. Pending payments already occupy seats."
}
},
- "required": [
- "reservedCapacity"
- ]
+ "required": ["reservedCapacity"]
},
"UpdateEventDto": {
"type": "object",
@@ -23556,9 +22187,7 @@
}
}
},
- "required": [
- "eventIds"
- ]
+ "required": ["eventIds"]
},
"BookmarkBatchStatusResponseDto": {
"type": "object",
@@ -23571,9 +22200,7 @@
}
}
},
- "required": [
- "bookmarkedEventIds"
- ]
+ "required": ["bookmarkedEventIds"]
},
"BookmarkStateResponseDto": {
"type": "object",
@@ -23582,9 +22209,7 @@
"type": "boolean"
}
},
- "required": [
- "isBookmarked"
- ]
+ "required": ["isBookmarked"]
},
"DiscoveryEventOrganizerDto": {
"type": "object",
@@ -23598,10 +22223,7 @@
"nullable": true
}
},
- "required": [
- "firstName",
- "lastName"
- ]
+ "required": ["firstName", "lastName"]
},
"DiscoveryEventResponseDto": {
"type": "object",
@@ -23837,11 +22459,7 @@
"type": "string"
}
},
- "required": [
- "id",
- "name",
- "slug"
- ]
+ "required": ["id", "name", "slug"]
},
"EventLandingCityDto": {
"type": "object",
@@ -23853,10 +22471,7 @@
"type": "string"
}
},
- "required": [
- "id",
- "name"
- ]
+ "required": ["id", "name"]
},
"EventLandingOrganizerContactLinkDto": {
"type": "object",
@@ -23871,11 +22486,7 @@
"type": "string"
}
},
- "required": [
- "channel",
- "label",
- "url"
- ]
+ "required": ["channel", "label", "url"]
},
"EventLandingOrganizerDto": {
"type": "object",
@@ -23896,11 +22507,7 @@
},
"gender": {
"type": "string",
- "enum": [
- "male",
- "female",
- "other"
- ],
+ "enum": ["male", "female", "other"],
"nullable": true
},
"bio": {
@@ -24033,18 +22640,7 @@
]
}
},
- "required": [
- "id",
- "eventId",
- "userId",
- "bookingId",
- "rating",
- "body",
- "status",
- "createdAt",
- "updatedAt",
- "user"
- ]
+ "required": ["id", "eventId", "userId", "bookingId", "rating", "body", "status", "createdAt", "updatedAt", "user"]
},
"EventLandingBootstrapResponseDto": {
"type": "object",
@@ -24083,16 +22679,7 @@
"type": "number"
}
},
- "required": [
- "event",
- "category",
- "city",
- "media",
- "faqs",
- "organizer",
- "reviews",
- "reviewsTotal"
- ]
+ "required": ["event", "category", "city", "media", "faqs", "organizer", "reviews", "reviewsTotal"]
},
"EventViewerBookingDto": {
"type": "object",
@@ -24103,20 +22690,10 @@
},
"status": {
"type": "string",
- "enum": [
- "pending_payment",
- "confirmed",
- "cancelled",
- "expired",
- "refunded",
- "no_show"
- ]
+ "enum": ["pending_payment", "confirmed", "cancelled", "expired", "refunded", "no_show"]
}
},
- "required": [
- "id",
- "status"
- ]
+ "required": ["id", "status"]
},
"EventViewerWaitlistDto": {
"type": "object",
@@ -24127,20 +22704,10 @@
},
"status": {
"type": "string",
- "enum": [
- "waiting",
- "notified",
- "accepted",
- "expired",
- "cancelled",
- "converted"
- ]
+ "enum": ["waiting", "notified", "accepted", "expired", "cancelled", "converted"]
}
},
- "required": [
- "id",
- "status"
- ]
+ "required": ["id", "status"]
},
"EventViewerLocationDto": {
"type": "object",
@@ -24155,11 +22722,7 @@
"type": "number"
}
},
- "required": [
- "address",
- "lat",
- "lng"
- ]
+ "required": ["address", "lat", "lng"]
},
"EventViewerStateResponseDto": {
"type": "object",
@@ -24209,11 +22772,7 @@
"description": "Empty when canJoinAudience is true.",
"items": {
"type": "string",
- "enum": [
- "gender",
- "age",
- "city"
- ]
+ "enum": ["gender", "age", "city"]
}
}
},
@@ -24237,9 +22796,7 @@
"maxLength": 2000
}
},
- "required": [
- "rejectionReason"
- ]
+ "required": ["rejectionReason"]
},
"AdminEventRelationSummaryDto": {
"type": "object",
@@ -24251,10 +22808,7 @@
"type": "string"
}
},
- "required": [
- "id",
- "name"
- ]
+ "required": ["id", "name"]
},
"AdminEventOrganizerSummaryDto": {
"type": "object",
@@ -24276,9 +22830,7 @@
"nullable": true
}
},
- "required": [
- "id"
- ]
+ "required": ["id"]
},
"AdminEventResponseDto": {
"type": "object",
@@ -24320,18 +22872,7 @@
"$ref": "#/components/schemas/AdminEventOrganizerSummaryDto"
}
},
- "required": [
- "id",
- "title",
- "startsAt",
- "status",
- "isFree",
- "price",
- "category",
- "province",
- "city",
- "organizer"
- ]
+ "required": ["id", "title", "startsAt", "status", "isFree", "price", "category", "province", "city", "organizer"]
},
"AdminEventDetailResponseDto": {
"type": "object",
@@ -24583,9 +23124,7 @@
"maxLength": 2000
}
},
- "required": [
- "rejectionReason"
- ]
+ "required": ["rejectionReason"]
},
"DiscoveryCategorySummaryDto": {
"type": "object",
@@ -24616,14 +23155,7 @@
"example": true
}
},
- "required": [
- "id",
- "name",
- "slug",
- "parentId",
- "sortOrder",
- "isActive"
- ]
+ "required": ["id", "name", "slug", "parentId", "sortOrder", "isActive"]
},
"HomeFeedOrganizerDto": {
"type": "object",
@@ -24665,14 +23197,7 @@
"$ref": "#/components/schemas/HomeFeedOrganizerDto"
}
},
- "required": [
- "id",
- "title",
- "slug",
- "posterUrl",
- "squarePosterUrl",
- "organizer"
- ]
+ "required": ["id", "title", "slug", "posterUrl", "squarePosterUrl", "organizer"]
},
"HomeCategoryPreviewEventDto": {
"type": "object",
@@ -24706,15 +23231,7 @@
"nullable": true
}
},
- "required": [
- "id",
- "title",
- "slug",
- "startsAt",
- "endsAt",
- "posterUrl",
- "squarePosterUrl"
- ]
+ "required": ["id", "title", "slug", "startsAt", "endsAt", "posterUrl", "squarePosterUrl"]
},
"HomeFeedCategoryPreviewGroupDto": {
"type": "object",
@@ -24730,10 +23247,7 @@
}
}
},
- "required": [
- "categoryId",
- "items"
- ]
+ "required": ["categoryId", "items"]
},
"HomeCityPreviewEventDto": {
"type": "object",
@@ -24837,10 +23351,7 @@
}
}
},
- "required": [
- "cityId",
- "items"
- ]
+ "required": ["cityId", "items"]
},
"HomeFeedResponseDto": {
"type": "object",
@@ -24864,11 +23375,7 @@
}
}
},
- "required": [
- "popular",
- "categoryPreviews",
- "cityPreviews"
- ]
+ "required": ["popular", "categoryPreviews", "cityPreviews"]
},
"DiscoveryBootstrapResponseDto": {
"type": "object",
@@ -24886,10 +23393,7 @@
}
}
},
- "required": [
- "categories",
- "cities"
- ]
+ "required": ["categories", "cities"]
},
"FollowUserSummaryDto": {
"type": "object",
@@ -24928,10 +23432,7 @@
]
}
},
- "required": [
- "firstName",
- "lastName"
- ]
+ "required": ["firstName", "lastName"]
},
"FollowResponseDto": {
"type": "object",
@@ -24957,10 +23458,7 @@
"status": {
"type": "string",
"description": "Follow status.",
- "enum": [
- "active",
- "muted"
- ],
+ "enum": ["active", "muted"],
"example": "active"
},
"notifyNewEvents": {
@@ -24983,14 +23481,7 @@
]
}
},
- "required": [
- "id",
- "followerId",
- "organizerId",
- "status",
- "notifyNewEvents",
- "createdAt"
- ]
+ "required": ["id", "followerId", "organizerId", "status", "notifyNewEvents", "createdAt"]
},
"UpdateFollowSettingsDto": {
"type": "object",
@@ -25007,10 +23498,7 @@
"properties": {
"mediaType": {
"type": "string",
- "enum": [
- "image",
- "video"
- ]
+ "enum": ["image", "video"]
},
"url": {
"type": "string"
@@ -25063,11 +23551,7 @@
"nullable": true
}
},
- "required": [
- "userId",
- "firstName",
- "lastName"
- ]
+ "required": ["userId", "firstName", "lastName"]
},
"OrganizerGuestListResponseDto": {
"type": "object",
@@ -25089,10 +23573,7 @@
},
"kind": {
"type": "string",
- "enum": [
- "manual",
- "previous_attendees"
- ]
+ "enum": ["manual", "previous_attendees"]
},
"createdAt": {
"format": "date-time",
@@ -25103,15 +23584,7 @@
"type": "string"
}
},
- "required": [
- "id",
- "organizerId",
- "name",
- "description",
- "kind",
- "createdAt",
- "updatedAt"
- ]
+ "required": ["id", "organizerId", "name", "description", "kind", "createdAt", "updatedAt"]
},
"CreateOrganizerGuestListDto": {
"type": "object",
@@ -25126,9 +23599,7 @@
"example": "مهمانان رویدادهای قبلی و مخاطبین میزبان"
}
},
- "required": [
- "name"
- ]
+ "required": ["name"]
},
"GuestListItemResponseDto": {
"type": "object",
@@ -25166,16 +23637,7 @@
"type": "string"
}
},
- "required": [
- "id",
- "listId",
- "mobile",
- "firstName",
- "lastName",
- "userId",
- "note",
- "createdAt"
- ]
+ "required": ["id", "listId", "mobile", "firstName", "lastName", "userId", "note", "createdAt"]
},
"AddGuestListItemDto": {
"type": "object",
@@ -25200,27 +23662,21 @@
"type": "string"
}
},
- "required": [
- "mobile"
- ]
+ "required": ["mobile"]
},
"SetEventInvitedGuestsDto": {
"type": "object",
"properties": {
"userIds": {
"description": "Full replacement set of platform user ids invited to this event from the host guest list. An empty array clears the invite set.",
- "example": [
- "b3f1c2a0-1111-4111-8111-b3f1c2a01111"
- ],
+ "example": ["b3f1c2a0-1111-4111-8111-b3f1c2a01111"],
"type": "array",
"items": {
"type": "string"
}
}
},
- "required": [
- "userIds"
- ]
+ "required": ["userIds"]
},
"InvitedGuestResponseDto": {
"type": "object",
@@ -25242,12 +23698,7 @@
"nullable": true
}
},
- "required": [
- "userId",
- "mobile",
- "firstName",
- "lastName"
- ]
+ "required": ["userId", "mobile", "firstName", "lastName"]
},
"GuestListNotifyResultDto": {
"type": "object",
@@ -25265,11 +23716,7 @@
"type": "string"
}
},
- "required": [
- "sent",
- "skipped",
- "notifiedAt"
- ]
+ "required": ["sent", "skipped", "notifiedAt"]
},
"GuestListLinkResponseDto": {
"type": "object",
@@ -25295,12 +23742,7 @@
"type": "string"
}
},
- "required": [
- "eventId",
- "listId",
- "notifiedAt",
- "createdAt"
- ]
+ "required": ["eventId", "listId", "notifiedAt", "createdAt"]
},
"LinkGuestListToEventDto": {
"type": "object",
@@ -25310,9 +23752,7 @@
"description": "Guest list to attach to the event"
}
},
- "required": [
- "listId"
- ]
+ "required": ["listId"]
},
"CreatePaymentDto": {
"type": "object",
@@ -25332,21 +23772,11 @@
},
"PaymentMethod": {
"type": "string",
- "enum": [
- "gateway",
- "wallet",
- "mixed"
- ]
+ "enum": ["gateway", "wallet", "mixed"]
},
"PaymentStatus": {
"type": "string",
- "enum": [
- "pending",
- "processing",
- "succeeded",
- "failed",
- "cancelled"
- ]
+ "enum": ["pending", "processing", "succeeded", "failed", "cancelled"]
},
"PaymentCheckoutResponseDto": {
"type": "object",
@@ -25359,10 +23789,7 @@
"format": "uri"
}
},
- "required": [
- "trackingId",
- "paymentUrl"
- ]
+ "required": ["trackingId", "paymentUrl"]
},
"CreatePaymentResponseDto": {
"type": "object",
@@ -25506,9 +23933,7 @@
"example": "SAVE20AB"
}
},
- "required": [
- "code"
- ]
+ "required": ["code"]
},
"DiscountPreviewResponseDto": {
"type": "object",
@@ -25519,10 +23944,7 @@
},
"type": {
"type": "string",
- "enum": [
- "percent",
- "fixed"
- ]
+ "enum": ["percent", "fixed"]
},
"value": {
"type": "number",
@@ -25541,14 +23963,7 @@
"example": 80000
}
},
- "required": [
- "code",
- "type",
- "value",
- "listAmount",
- "discountAmount",
- "payableAmount"
- ]
+ "required": ["code", "type", "value", "listAmount", "discountAmount", "payableAmount"]
},
"PaymentResponseDto": {
"type": "object",
@@ -25686,16 +24101,7 @@
"type": "string"
}
},
- "required": [
- "id",
- "paymentId",
- "userId",
- "bookingId",
- "eventId",
- "receiptCode",
- "snapshot",
- "issuedAt"
- ]
+ "required": ["id", "paymentId", "userId", "bookingId", "eventId", "receiptCode", "snapshot", "issuedAt"]
},
"FinancialUserSummaryDto": {
"type": "object",
@@ -25716,10 +24122,7 @@
"nullable": true
}
},
- "required": [
- "id",
- "mobile"
- ]
+ "required": ["id", "mobile"]
},
"AdminPaymentResponseDto": {
"type": "object",
@@ -25854,10 +24257,7 @@
},
"purpose": {
"type": "string",
- "enum": [
- "top_up",
- "booking_checkout"
- ]
+ "enum": ["top_up", "booking_checkout"]
},
"amount": {
"type": "number",
@@ -25875,13 +24275,7 @@
},
"status": {
"type": "string",
- "enum": [
- "pending",
- "processing",
- "succeeded",
- "failed",
- "cancelled"
- ]
+ "enum": ["pending", "processing", "succeeded", "failed", "cancelled"]
},
"gatewayProvider": {
"type": "string",
@@ -25960,23 +24354,11 @@
"type": "string"
}
},
- "required": [
- "id",
- "userId",
- "balance",
- "createdAt",
- "updatedAt"
- ]
+ "required": ["id", "userId", "balance", "createdAt", "updatedAt"]
},
"WalletTransactionType": {
"type": "string",
- "enum": [
- "booking_payment",
- "refund_guest_cancel",
- "refund_event_cancel",
- "withdrawal",
- "deposit"
- ]
+ "enum": ["booking_payment", "refund_guest_cancel", "refund_event_cancel", "withdrawal", "deposit"]
},
"WalletTransactionResponseDto": {
"type": "object",
@@ -26029,16 +24411,7 @@
"type": "string"
}
},
- "required": [
- "id",
- "walletId",
- "userId",
- "transactionCode",
- "type",
- "amount",
- "balanceAfter",
- "createdAt"
- ]
+ "required": ["id", "walletId", "userId", "transactionCode", "type", "amount", "balanceAfter", "createdAt"]
},
"CreateWalletDepositDto": {
"type": "object",
@@ -26049,9 +24422,7 @@
"minimum": 10000
}
},
- "required": [
- "amount"
- ]
+ "required": ["amount"]
},
"CreateWalletDepositResponseDto": {
"type": "object",
@@ -26073,10 +24444,7 @@
},
"purpose": {
"type": "string",
- "enum": [
- "top_up",
- "booking_checkout"
- ]
+ "enum": ["top_up", "booking_checkout"]
},
"amount": {
"type": "number",
@@ -26094,13 +24462,7 @@
},
"status": {
"type": "string",
- "enum": [
- "pending",
- "processing",
- "succeeded",
- "failed",
- "cancelled"
- ]
+ "enum": ["pending", "processing", "succeeded", "failed", "cancelled"]
},
"gatewayProvider": {
"type": "string",
@@ -26186,10 +24548,7 @@
},
"purpose": {
"type": "string",
- "enum": [
- "top_up",
- "booking_checkout"
- ]
+ "enum": ["top_up", "booking_checkout"]
},
"amount": {
"type": "number",
@@ -26207,13 +24566,7 @@
},
"status": {
"type": "string",
- "enum": [
- "pending",
- "processing",
- "succeeded",
- "failed",
- "cancelled"
- ]
+ "enum": ["pending", "processing", "succeeded", "failed", "cancelled"]
},
"gatewayProvider": {
"type": "string",
@@ -26269,10 +24622,7 @@
"properties": {
"status": {
"type": "string",
- "enum": [
- "succeeded",
- "failed"
- ]
+ "enum": ["succeeded", "failed"]
},
"signature": {
"type": "string"
@@ -26297,63 +24647,30 @@
"type": "string"
}
},
- "required": [
- "status",
- "signature",
- "timestamp",
- "nonce"
- ]
+ "required": ["status", "signature", "timestamp", "nonce"]
},
"CreateBankAccountDto": {
"type": "object",
"properties": {
- "ownerType": {
- "type": "string",
- "enum": [
- "guest",
- "organizer"
- ]
- },
- "accountHolder": {
- "type": "string"
- },
"iban": {
"type": "string",
"example": "IR123456789012345678901234"
},
"nationalCode": {
"type": "string",
- "description": "Required when ownerType=guest. Organizer national code is taken from identity submission.",
+ "description": "Required unless the user has a verified host identity (national code is then taken from identity).",
"example": "0012345678"
- },
- "bankName": {
- "type": "string"
- },
- "isDefault": {
- "type": "boolean",
- "default": false
}
},
- "required": [
- "ownerType",
- "accountHolder",
- "iban"
- ]
+ "required": ["iban"]
},
"BankAccountOwnerType": {
"type": "string",
- "enum": [
- "guest",
- "organizer"
- ]
+ "enum": ["guest", "organizer"]
},
"BankAccountVerificationStatus": {
"type": "string",
- "enum": [
- "pending_review",
- "approved",
- "rejected"
- ]
+ "enum": ["pending_review", "approved", "rejected"]
},
"BankAccountResponseDto": {
"type": "object",
@@ -26373,16 +24690,9 @@
}
]
},
- "accountHolder": {
- "type": "string"
- },
"iban": {
"type": "string"
},
- "bankName": {
- "type": "string",
- "nullable": true
- },
"isDefault": {
"type": "boolean"
},
@@ -26436,9 +24746,7 @@
"id",
"userId",
"ownerType",
- "accountHolder",
"iban",
- "bankName",
"isDefault",
"nationalCode",
"verificationStatus",
@@ -26459,9 +24767,7 @@
"minLength": 3
}
},
- "required": [
- "reason"
- ]
+ "required": ["reason"]
},
"CreateWithdrawalRequestDto": {
"type": "object",
@@ -26475,19 +24781,11 @@
"description": "Amount in Toman"
}
},
- "required": [
- "bankAccountId",
- "amount"
- ]
+ "required": ["bankAccountId", "amount"]
},
"WithdrawalStatus": {
"type": "string",
- "enum": [
- "pending",
- "processing",
- "completed",
- "rejected"
- ]
+ "enum": ["pending", "processing", "completed", "rejected"]
},
"WithdrawalUserSummaryDto": {
"type": "object",
@@ -26504,28 +24802,16 @@
"nullable": true
}
},
- "required": [
- "mobile"
- ]
+ "required": ["mobile"]
},
"WithdrawalBankAccountSummaryDto": {
"type": "object",
"properties": {
"iban": {
"type": "string"
- },
- "bankName": {
- "type": "object",
- "nullable": true
- },
- "accountHolder": {
- "type": "string"
}
},
- "required": [
- "iban",
- "accountHolder"
- ]
+ "required": ["iban"]
},
"WithdrawalResponseDto": {
"type": "object",
@@ -26633,10 +24919,7 @@
"description": "Optional admin note shown to the recipient"
}
},
- "required": [
- "trackingCode",
- "receiptUrl"
- ]
+ "required": ["trackingCode", "receiptUrl"]
},
"RejectWithdrawalRequestDto": {
"type": "object",
@@ -26645,18 +24928,11 @@
"type": "string"
}
},
- "required": [
- "reason"
- ]
+ "required": ["reason"]
},
"OrganizerEarningStatus": {
"type": "string",
- "enum": [
- "held",
- "available",
- "settled",
- "cancelled"
- ]
+ "enum": ["held", "available", "settled", "cancelled"]
},
"OrganizerEarningResponseDto": {
"type": "object",
@@ -26740,12 +25016,7 @@
},
"SettlementBatchStatus": {
"type": "string",
- "enum": [
- "pending",
- "processing",
- "completed",
- "failed"
- ]
+ "enum": ["pending", "processing", "completed", "failed"]
},
"SettlementItemResponseDto": {
"type": "object",
@@ -26769,13 +25040,7 @@
"type": "string"
}
},
- "required": [
- "id",
- "amount",
- "organizerEarningId",
- "eventId",
- "eventTitle"
- ]
+ "required": ["id", "amount", "organizerEarningId", "eventId", "eventTitle"]
},
"SettlementResponseDto": {
"type": "object",
@@ -26881,12 +25146,7 @@
"example": "2026-07-07"
}
},
- "required": [
- "organizerId",
- "bankAccountId",
- "periodStart",
- "periodEnd"
- ]
+ "required": ["organizerId", "bankAccountId", "periodStart", "periodEnd"]
},
"FailSettlementDto": {
"type": "object",
@@ -26895,19 +25155,14 @@
"type": "string"
}
},
- "required": [
- "reason"
- ]
+ "required": ["reason"]
},
"CreateDiscountCodesDto": {
"type": "object",
"properties": {
"type": {
"type": "string",
- "enum": [
- "percent",
- "fixed"
- ],
+ "enum": ["percent", "fixed"],
"example": "percent"
},
"value": {
@@ -26947,19 +25202,12 @@
},
"bearer": {
"type": "string",
- "enum": [
- "organizer",
- "platform"
- ],
+ "enum": ["organizer", "platform"],
"description": "Who absorbs the discount. Admin-only; host requests are always forced to \"organizer\".",
"example": "organizer"
}
},
- "required": [
- "type",
- "value",
- "quantity"
- ]
+ "required": ["type", "value", "quantity"]
},
"DiscountCodeResponseDto": {
"type": "object",
@@ -26978,10 +25226,7 @@
},
"type": {
"type": "string",
- "enum": [
- "percent",
- "fixed"
- ]
+ "enum": ["percent", "fixed"]
},
"value": {
"type": "number",
@@ -26989,10 +25234,7 @@
},
"bearer": {
"type": "string",
- "enum": [
- "organizer",
- "platform"
- ]
+ "enum": ["organizer", "platform"]
},
"maxUses": {
"type": "number",
@@ -27063,10 +25305,7 @@
},
"codes": {
"description": "The generated codes, ready to share",
- "example": [
- "SAVE20AB",
- "SAVE20CD"
- ],
+ "example": ["SAVE20AB", "SAVE20CD"],
"type": "array",
"items": {
"type": "string"
@@ -27079,12 +25318,7 @@
}
}
},
- "required": [
- "batchId",
- "count",
- "codes",
- "items"
- ]
+ "required": ["batchId", "count", "codes", "items"]
},
"DiscountCodePageDto": {
"type": "object",
@@ -27096,9 +25330,7 @@
}
}
},
- "required": [
- "items"
- ]
+ "required": ["items"]
},
"DiscountReportSummaryDto": {
"type": "object",
@@ -27127,13 +25359,7 @@
"example": 70000
}
},
- "required": [
- "totalCodes",
- "totalRedemptions",
- "totalDiscountAmount",
- "totalPlatformAbsorbed",
- "totalOrganizerAbsorbed"
- ]
+ "required": ["totalCodes", "totalRedemptions", "totalDiscountAmount", "totalPlatformAbsorbed", "totalOrganizerAbsorbed"]
},
"DiscountRedemptionResponseDto": {
"type": "object",
@@ -27181,10 +25407,7 @@
},
"bearer": {
"type": "string",
- "enum": [
- "organizer",
- "platform"
- ]
+ "enum": ["organizer", "platform"]
},
"platformAbsorbedAmount": {
"type": "number",
@@ -27225,9 +25448,7 @@
}
}
},
- "required": [
- "items"
- ]
+ "required": ["items"]
},
"DiscountManagementBootstrapResponseDto": {
"type": "object",
@@ -27242,11 +25463,7 @@
"$ref": "#/components/schemas/DiscountRedemptionPageDto"
}
},
- "required": [
- "codes",
- "report",
- "redemptions"
- ]
+ "required": ["codes", "report", "redemptions"]
},
"UpdateDiscountCodeDto": {
"type": "object",
@@ -27257,16 +25474,11 @@
"example": false
}
},
- "required": [
- "isActive"
- ]
+ "required": ["isActive"]
},
"TrafficSource": {
"type": "string",
- "enum": [
- "instagram",
- "telegram"
- ],
+ "enum": ["instagram", "telegram"],
"description": "First-touch attribution from a tagged share link. Ignored if invalid."
},
"CreateBookingDto": {
@@ -27421,9 +25633,7 @@
"description": "Cancellation reason — mandatory (booking-cancellation-refund.md: required from the product’s point of view, previously only optional in this DTO)."
}
},
- "required": [
- "cancellationReason"
- ]
+ "required": ["cancellationReason"]
},
"JoinWaitlistDto": {
"type": "object",
@@ -27440,14 +25650,7 @@
},
"WaitlistStatus": {
"type": "string",
- "enum": [
- "waiting",
- "notified",
- "accepted",
- "expired",
- "cancelled",
- "converted"
- ]
+ "enum": ["waiting", "notified", "accepted", "expired", "cancelled", "converted"]
},
"WaitlistResponseDto": {
"type": "object",
@@ -27495,14 +25698,7 @@
"type": "string"
}
},
- "required": [
- "id",
- "eventId",
- "userId",
- "status",
- "createdAt",
- "updatedAt"
- ]
+ "required": ["id", "eventId", "userId", "status", "createdAt", "updatedAt"]
},
"WaitlistAcceptedBookingDto": {
"type": "object",
@@ -27567,16 +25763,7 @@
"type": "string"
}
},
- "required": [
- "id",
- "eventId",
- "userId",
- "bookingCode",
- "status",
- "cancellationReason",
- "createdAt",
- "updatedAt"
- ]
+ "required": ["id", "eventId", "userId", "bookingCode", "status", "cancellationReason", "createdAt", "updatedAt"]
},
"WaitlistAcceptResponseDto": {
"type": "object",
@@ -27589,10 +25776,7 @@
"$ref": "#/components/schemas/WaitlistAcceptedBookingDto"
}
},
- "required": [
- "waitlistEntryId",
- "booking"
- ]
+ "required": ["waitlistEntryId", "booking"]
},
"AdminBookingEventDto": {
"type": "object",
@@ -27620,13 +25804,7 @@
"format": "uuid"
}
},
- "required": [
- "id",
- "title",
- "startsAt",
- "status",
- "organizerId"
- ]
+ "required": ["id", "title", "startsAt", "status", "organizerId"]
},
"AdminBookingUserDto": {
"type": "object",
@@ -27647,10 +25825,7 @@
"nullable": true
}
},
- "required": [
- "id",
- "mobile"
- ]
+ "required": ["id", "mobile"]
},
"AdminBookingResponseDto": {
"type": "object",
@@ -27815,10 +25990,7 @@
"maxLength": 5000
}
},
- "required": [
- "bookingId",
- "rating"
- ]
+ "required": ["bookingId", "rating"]
},
"UpdateReviewDto": {
"type": "object",
@@ -27866,10 +26038,7 @@
"example": "Tehran hiking meetup"
}
},
- "required": [
- "id",
- "title"
- ]
+ "required": ["id", "title"]
},
"AdminReviewResponseDto": {
"type": "object",
@@ -27962,19 +26131,7 @@
]
}
},
- "required": [
- "id",
- "eventId",
- "userId",
- "bookingId",
- "rating",
- "body",
- "status",
- "createdAt",
- "updatedAt",
- "user",
- "event"
- ]
+ "required": ["id", "eventId", "userId", "bookingId", "rating", "body", "status", "createdAt", "updatedAt", "user", "event"]
},
"UnreadCountResponseDto": {
"type": "object",
@@ -27985,16 +26142,11 @@
"example": 3
}
},
- "required": [
- "totalUnread"
- ]
+ "required": ["totalUnread"]
},
"ConversationType": {
"type": "string",
- "enum": [
- "event_group",
- "direct"
- ],
+ "enum": ["event_group", "direct"],
"description": "Conversation type."
},
"ConversationResponseDto": {
@@ -28089,14 +26241,7 @@
"format": "date-time"
}
},
- "required": [
- "id",
- "type",
- "unreadCount",
- "memberCount",
- "messagingBlocked",
- "createdAt"
- ]
+ "required": ["id", "type", "unreadCount", "memberCount", "messagingBlocked", "createdAt"]
},
"SendMessageDto": {
"type": "object",
@@ -28155,13 +26300,7 @@
"description": "True when the parent cannot be jumped to (soft-deleted, missing, or wrong conversation)."
}
},
- "required": [
- "id",
- "senderId",
- "senderDisplayName",
- "hasImage",
- "isUnavailable"
- ]
+ "required": ["id", "senderId", "senderDisplayName", "hasImage", "isUnavailable"]
},
"MessageResponseDto": {
"type": "object",
@@ -28243,12 +26382,7 @@
"format": "date-time"
}
},
- "required": [
- "id",
- "conversationId",
- "senderId",
- "createdAt"
- ]
+ "required": ["id", "conversationId", "senderId", "createdAt"]
},
"ConversationParticipantResponseDto": {
"type": "object",
@@ -28295,10 +26429,7 @@
"format": "date-time"
}
},
- "required": [
- "userId",
- "joinedAt"
- ]
+ "required": ["userId", "joinedAt"]
},
"MarkConversationReadDto": {
"type": "object",
@@ -28309,9 +26440,7 @@
"format": "uuid"
}
},
- "required": [
- "lastSeenMessageId"
- ]
+ "required": ["lastSeenMessageId"]
},
"AdminChatUserDto": {
"type": "object",
@@ -28359,12 +26488,7 @@
"format": "date-time"
}
},
- "required": [
- "userId",
- "mobile",
- "status",
- "joinedAt"
- ]
+ "required": ["userId", "mobile", "status", "joinedAt"]
},
"AdminConversationResponseDto": {
"type": "object",
@@ -28418,13 +26542,7 @@
"format": "date-time"
}
},
- "required": [
- "id",
- "type",
- "participantPreview",
- "memberCount",
- "createdAt"
- ]
+ "required": ["id", "type", "participantPreview", "memberCount", "createdAt"]
},
"AdminMessageResponseDto": {
"type": "object",
@@ -28490,13 +26608,7 @@
"format": "date-time"
}
},
- "required": [
- "id",
- "conversationId",
- "senderId",
- "senderMobile",
- "createdAt"
- ]
+ "required": ["id", "conversationId", "senderId", "senderMobile", "createdAt"]
},
"CreateContactMessageDto": {
"type": "object",
@@ -28535,13 +26647,7 @@
"maxLength": 4096
}
},
- "required": [
- "fullName",
- "mobile",
- "subject",
- "message",
- "arcaptchaToken"
- ]
+ "required": ["fullName", "mobile", "subject", "message", "arcaptchaToken"]
},
"ContactMessageResponseDto": {
"type": "object",
@@ -28593,24 +26699,14 @@
"format": "date-time"
}
},
- "required": [
- "id",
- "fullName",
- "mobile",
- "subject",
- "message",
- "createdAt"
- ]
+ "required": ["id", "fullName", "mobile", "subject", "message", "createdAt"]
},
"CreateTrafficVisitDto": {
"type": "object",
"properties": {
"pageKind": {
"type": "string",
- "enum": [
- "home",
- "event"
- ]
+ "enum": ["home", "event"]
},
"eventId": {
"type": "string",
@@ -28630,11 +26726,7 @@
"description": "Durable anonymous visitor id from the browser localStorage."
}
},
- "required": [
- "pageKind",
- "source",
- "visitorKey"
- ]
+ "required": ["pageKind", "source", "visitorKey"]
},
"CreateUserBlockDto": {
"type": "object",
@@ -28646,9 +26738,7 @@
"format": "uuid"
}
},
- "required": [
- "blockedId"
- ]
+ "required": ["blockedId"]
},
"UserBlockUserSummaryDto": {
"type": "object",
@@ -28671,11 +26761,7 @@
"nullable": true
}
},
- "required": [
- "mobile",
- "firstName",
- "lastName"
- ]
+ "required": ["mobile", "firstName", "lastName"]
},
"UserBlockResponseDto": {
"type": "object",
@@ -28713,13 +26799,7 @@
]
}
},
- "required": [
- "id",
- "blockerId",
- "blockedId",
- "createdAt",
- "blockedUser"
- ]
+ "required": ["id", "blockerId", "blockedId", "createdAt", "blockedUser"]
},
"ReportReasonResponseDto": {
"type": "object",
@@ -28751,12 +26831,7 @@
"minimum": 0
}
},
- "required": [
- "id",
- "code",
- "label",
- "sortOrder"
- ]
+ "required": ["id", "code", "label", "sortOrder"]
},
"CreateUserReportDto": {
"type": "object",
@@ -28786,17 +26861,11 @@
"format": "uuid"
}
},
- "required": [
- "reportedId"
- ]
+ "required": ["reportedId"]
},
"ReportStatus": {
"type": "string",
- "enum": [
- "pending",
- "reviewed",
- "dismissed"
- ],
+ "enum": ["pending", "reviewed", "dismissed"],
"description": "Report review status."
},
"UserReportResponseDto": {
@@ -28889,13 +26958,7 @@
"format": "date-time"
}
},
- "required": [
- "id",
- "reporterId",
- "reportedId",
- "status",
- "createdAt"
- ]
+ "required": ["id", "reporterId", "reportedId", "status", "createdAt"]
},
"UserReportUserSummaryDto": {
"type": "object",
@@ -28918,11 +26981,7 @@
"nullable": true
}
},
- "required": [
- "mobile",
- "firstName",
- "lastName"
- ]
+ "required": ["mobile", "firstName", "lastName"]
},
"AdminUserReportResponseDto": {
"type": "object",
@@ -29038,15 +27097,7 @@
]
}
},
- "required": [
- "id",
- "reporterId",
- "reportedId",
- "status",
- "createdAt",
- "reporter",
- "reported"
- ]
+ "required": ["id", "reporterId", "reportedId", "status", "createdAt", "reporter", "reported"]
},
"AdminUserReportBlockResponseDto": {
"type": "object",
@@ -29068,10 +27119,7 @@
]
}
},
- "required": [
- "report",
- "block"
- ]
+ "required": ["report", "block"]
},
"CreateSupportTicketDto": {
"type": "object",
@@ -29082,24 +27130,12 @@
},
"category": {
"type": "string",
- "enum": [
- "general",
- "account",
- "event",
- "booking",
- "payment",
- "technical"
- ],
+ "enum": ["general", "account", "event", "booking", "payment", "technical"],
"example": "payment"
},
"priority": {
"type": "string",
- "enum": [
- "low",
- "normal",
- "high",
- "urgent"
- ],
+ "enum": ["low", "normal", "high", "urgent"],
"example": "normal"
},
"message": {
@@ -29107,12 +27143,7 @@
"example": "پرداخت انجام شد اما رزرو ثبت نشده است."
}
},
- "required": [
- "subject",
- "category",
- "priority",
- "message"
- ]
+ "required": ["subject", "category", "priority", "message"]
},
"SupportTicketUserResponseDto": {
"type": "object",
@@ -29127,9 +27158,7 @@
"example": "علی رضایی"
}
},
- "required": [
- "mobile"
- ]
+ "required": ["mobile"]
},
"SupportTicketMessageResponseDto": {
"type": "object",
@@ -29153,13 +27182,7 @@
"format": "date-time"
}
},
- "required": [
- "id",
- "senderId",
- "body",
- "isAdmin",
- "createdAt"
- ]
+ "required": ["id", "senderId", "body", "isAdmin", "createdAt"]
},
"SupportTicketResponseDto": {
"type": "object",
@@ -29177,32 +27200,15 @@
},
"category": {
"type": "string",
- "enum": [
- "general",
- "account",
- "event",
- "booking",
- "payment",
- "technical"
- ]
+ "enum": ["general", "account", "event", "booking", "payment", "technical"]
},
"priority": {
"type": "string",
- "enum": [
- "low",
- "normal",
- "high",
- "urgent"
- ]
+ "enum": ["low", "normal", "high", "urgent"]
},
"status": {
"type": "string",
- "enum": [
- "open",
- "waiting_admin",
- "waiting_user",
- "closed"
- ]
+ "enum": ["open", "waiting_admin", "waiting_user", "closed"]
},
"lastMessageAt": {
"type": "string",
@@ -29227,18 +27233,7 @@
}
}
},
- "required": [
- "id",
- "userId",
- "subject",
- "category",
- "priority",
- "status",
- "lastMessageAt",
- "createdAt",
- "user",
- "messages"
- ]
+ "required": ["id", "userId", "subject", "category", "priority", "status", "lastMessageAt", "createdAt", "user", "messages"]
},
"ReplySupportTicketDto": {
"type": "object",
@@ -29248,26 +27243,17 @@
"example": "درخواست شما در حال بررسی است."
}
},
- "required": [
- "message"
- ]
+ "required": ["message"]
},
"UpdateSupportTicketStatusDto": {
"type": "object",
"properties": {
"status": {
"type": "string",
- "enum": [
- "open",
- "waiting_admin",
- "waiting_user",
- "closed"
- ]
+ "enum": ["open", "waiting_admin", "waiting_user", "closed"]
}
},
- "required": [
- "status"
- ]
+ "required": ["status"]
},
"UserCountsDto": {
"type": "object",
@@ -29289,12 +27275,7 @@
"example": 12
}
},
- "required": [
- "total",
- "active",
- "pending",
- "suspended"
- ]
+ "required": ["total", "active", "pending", "suspended"]
},
"EventStatusCountsDto": {
"type": "object",
@@ -29328,15 +27309,7 @@
"example": 210
}
},
- "required": [
- "draft",
- "pending_review",
- "published",
- "full",
- "rejected",
- "cancelled",
- "completed"
- ]
+ "required": ["draft", "pending_review", "published", "full", "rejected", "cancelled", "completed"]
},
"EventCountsDto": {
"type": "object",
@@ -29359,12 +27332,7 @@
"$ref": "#/components/schemas/EventStatusCountsDto"
}
},
- "required": [
- "total",
- "active",
- "totalHeld",
- "byStatus"
- ]
+ "required": ["total", "active", "totalHeld", "byStatus"]
},
"BookingStatusCountsDto": {
"type": "object",
@@ -29394,14 +27362,7 @@
"example": 25
}
},
- "required": [
- "pending_payment",
- "confirmed",
- "cancelled",
- "expired",
- "refunded",
- "no_show"
- ]
+ "required": ["pending_payment", "confirmed", "cancelled", "expired", "refunded", "no_show"]
},
"BookingCountsDto": {
"type": "object",
@@ -29414,10 +27375,7 @@
"$ref": "#/components/schemas/BookingStatusCountsDto"
}
},
- "required": [
- "total",
- "byStatus"
- ]
+ "required": ["total", "byStatus"]
},
"IdentityVerificationCountsDto": {
"type": "object",
@@ -29439,12 +27397,7 @@
"example": 29
}
},
- "required": [
- "none",
- "pending",
- "verified",
- "rejected"
- ]
+ "required": ["none", "pending", "verified", "rejected"]
},
"FinancialTotalsDto": {
"type": "object",
@@ -29460,10 +27413,7 @@
"description": "Sum of wallets.balance across all wallets (Toman, as a string)."
}
},
- "required": [
- "totalCommissionCollected",
- "totalWalletBalance"
- ]
+ "required": ["totalCommissionCollected", "totalWalletBalance"]
},
"AdminReportsOverviewDto": {
"type": "object",
@@ -29484,13 +27434,7 @@
"$ref": "#/components/schemas/FinancialTotalsDto"
}
},
- "required": [
- "users",
- "events",
- "bookings",
- "identityVerifications",
- "financial"
- ]
+ "required": ["users", "events", "bookings", "identityVerifications", "financial"]
},
"AdminUserContactLinkDto": {
"type": "object",
@@ -29523,22 +27467,11 @@
"type": "number"
}
},
- "required": [
- "id",
- "channel",
- "label",
- "value",
- "url",
- "isPublic",
- "displayOrder"
- ]
+ "required": ["id", "channel", "label", "value", "url", "isPublic", "displayOrder"]
},
"HostPlan": {
"type": "string",
- "enum": [
- "free",
- "unlimited"
- ]
+ "enum": ["free", "unlimited"]
},
"AdminUserSummaryCountsDto": {
"type": "object",
@@ -29672,12 +27605,7 @@
},
"identityStatus": {
"type": "string",
- "enum": [
- "none",
- "pending",
- "verified",
- "rejected"
- ]
+ "enum": ["none", "pending", "verified", "rejected"]
},
"identityVerifiedAt": {
"type": "string",
@@ -29751,9 +27679,7 @@
"description": "Optional admin note (Toman credit reason)"
}
},
- "required": [
- "amount"
- ]
+ "required": ["amount"]
},
"AdminCreditWalletResponseDto": {
"type": "object",
@@ -29766,10 +27692,7 @@
"$ref": "#/components/schemas/WalletTransactionResponseDto"
}
},
- "required": [
- "walletBalance",
- "transaction"
- ]
+ "required": ["walletBalance", "transaction"]
},
"AdminUserHostedEventDto": {
"type": "object",
@@ -29813,18 +27736,7 @@
"type": "string"
}
},
- "required": [
- "id",
- "title",
- "status",
- "startsAt",
- "endsAt",
- "capacity",
- "bookedCount",
- "isFree",
- "price",
- "createdAt"
- ]
+ "required": ["id", "title", "status", "startsAt", "endsAt", "capacity", "bookedCount", "isFree", "price", "createdAt"]
},
"AdminUserBookingDto": {
"type": "object",
@@ -29870,14 +27782,7 @@
"type": "string"
}
},
- "required": [
- "id",
- "bookingCode",
- "status",
- "eventId",
- "eventTitle",
- "createdAt"
- ]
+ "required": ["id", "bookingCode", "status", "eventId", "eventTitle", "createdAt"]
},
"AdminUserPaymentDto": {
"type": "object",
@@ -29994,15 +27899,7 @@
"type": "string"
}
},
- "required": [
- "id",
- "rating",
- "status",
- "eventId",
- "eventTitle",
- "authorId",
- "createdAt"
- ]
+ "required": ["id", "rating", "status", "eventId", "eventTitle", "authorId", "createdAt"]
},
"AdminUserFollowDto": {
"type": "object",
@@ -30030,13 +27927,7 @@
"type": "string"
}
},
- "required": [
- "id",
- "userId",
- "mobile",
- "notifyNewEvents",
- "createdAt"
- ]
+ "required": ["id", "userId", "mobile", "notifyNewEvents", "createdAt"]
},
"AdminUserReportDto": {
"type": "object",
@@ -30076,13 +27967,7 @@
"type": "string"
}
},
- "required": [
- "id",
- "status",
- "otherUserId",
- "otherUserMobile",
- "createdAt"
- ]
+ "required": ["id", "status", "otherUserId", "otherUserMobile", "createdAt"]
},
"AdminUserBlockDto": {
"type": "object",
@@ -30107,12 +27992,7 @@
"type": "string"
}
},
- "required": [
- "id",
- "otherUserId",
- "otherUserMobile",
- "createdAt"
- ]
+ "required": ["id", "otherUserId", "otherUserMobile", "createdAt"]
},
"AdminAuditLogResponseDto": {
"type": "object",
@@ -30168,14 +28048,7 @@
"format": "date-time"
}
},
- "required": [
- "id",
- "method",
- "path",
- "params",
- "statusCode",
- "createdAt"
- ]
+ "required": ["id", "method", "path", "params", "statusCode", "createdAt"]
},
"UploadFileResponseDto": {
"type": "object",
@@ -30191,10 +28064,7 @@
"example": "http://localhost:3000/uploads/files/550e8400-e29b-41d4-a716-446655440000.jpg"
}
},
- "required": [
- "id",
- "url"
- ]
+ "required": ["id", "url"]
},
"BlogArticleCitySummaryDto": {
"type": "object",
@@ -30212,11 +28082,7 @@
"example": "اهواز"
}
},
- "required": [
- "id",
- "slug",
- "name"
- ]
+ "required": ["id", "slug", "name"]
},
"BlogArticleEventCategorySummaryDto": {
"type": "object",
@@ -30234,11 +28100,7 @@
"example": "عکاسی"
}
},
- "required": [
- "id",
- "slug",
- "name"
- ]
+ "required": ["id", "slug", "name"]
},
"BlogArticleSummaryResponseDto": {
"type": "object",
@@ -30468,12 +28330,7 @@
},
"categorySlug": {
"type": "string",
- "enum": [
- "attendee-guide",
- "hosting",
- "city-guides",
- "event-selection"
- ],
+ "enum": ["attendee-guide", "hosting", "city-guides", "event-selection"],
"example": "city-guides"
},
"categoryName": {
@@ -30511,14 +28368,7 @@
"format": "date-time"
}
},
- "required": [
- "slug",
- "title",
- "excerpt",
- "categorySlug",
- "categoryName",
- "bodyHtml"
- ]
+ "required": ["slug", "title", "excerpt", "categorySlug", "categoryName", "bodyHtml"]
},
"UpdateBlogArticleDto": {
"type": "object",
@@ -30547,12 +28397,7 @@
},
"categorySlug": {
"type": "string",
- "enum": [
- "attendee-guide",
- "hosting",
- "city-guides",
- "event-selection"
- ],
+ "enum": ["attendee-guide", "hosting", "city-guides", "event-selection"],
"example": "city-guides"
},
"categoryName": {
@@ -30600,9 +28445,7 @@
"example": "ok"
}
},
- "required": [
- "status"
- ]
+ "required": ["status"]
}
}
}
diff --git a/texts/wallet.ts b/texts/wallet.ts
index 025a679..e798eea 100644
--- a/texts/wallet.ts
+++ b/texts/wallet.ts
@@ -10,8 +10,8 @@ export const wallet = {
tabTransactions: 'تراکنشها',
tabSettlements: 'تسویههای میزبانی',
addAccount: 'افزودن حساب',
+ editAccount: 'ویرایش حساب',
noBankAccounts: 'هنوز حساب بانکی ثبت نکردهاید',
- defaultBadge: 'پیشفرض',
noWithdrawals: 'درخواست برداشتی ثبت نشده است',
noTransactions: 'تراکنشی ثبت نشده است',
noSettlements: 'هنوز تسویهای برای شما ثبت نشده است',
@@ -19,23 +19,17 @@ export const wallet = {
viewPaymentReceipt: 'مشاهده رسید پرداخت',
addBankAccountTitle: 'افزودن حساب بانکی',
- ownerTypeLabel: 'نوع حساب',
- nationalCodeHint: 'برای حساب مهمان، کد ملی لازم است. حساب میزبان از احراز هویت خوانده میشود.',
- hostIdentityRequired: 'برای ثبت حساب میزبانی، ابتدا کد ملی را در احراز هویت ارسال کنید.',
- rejectedHint: 'رد شده',
- onlyApprovedWithdrawal: 'فقط حساب تأییدشده قابل برداشت است',
+ editBankAccountTitle: 'ویرایش حساب بانکی',
+ nationalCodeHint: 'کد ملی برای استعلام شبا لازم است. پس از تأیید احراز هویت میزبان، از روی پرونده هویت خوانده میشود.',
withdrawalNeedsBankAccount: 'ابتدا یک حساب بانکی ثبت کنید؛ پس از تأیید حساب میتوانید درخواست برداشت بدهید',
withdrawalNeedsApprovedBankAccount: 'حساب بانکی شما هنوز تأیید نشده است؛ پس از تأیید ادمین میتوانید درخواست برداشت بدهید',
submitAccount: 'ثبت حساب',
- accountHolder: 'نام صاحب حساب',
- accountHolderPlaceholder: 'نام و نام خانوادگی',
+ saveAccount: 'ذخیره تغییرات',
iban: 'شماره شبا',
- bankNameOptional: 'نام بانک (اختیاری)',
- bankNamePlaceholder: 'مثلاً ملت',
submitRequest: 'ثبت درخواست',
bankAccount: 'حساب بانکی',
- bankAccountOption: '{holder} — {iban}',
+ bankAccountOption: '{iban}',
maxAmount: 'حداکثر: {amount}',
amountToman: 'مبلغ (تومان)',
@@ -45,6 +39,7 @@ export const wallet = {
txDeposit: 'واریز',
bankAccountCreated: 'حساب بانکی ثبت شد',
+ bankAccountUpdated: 'حساب بانکی بهروز شد و دوباره در صف بررسی قرار گرفت',
bankAccountCreateFailed: 'ثبت حساب بانکی ناموفق بود',
addBankAccountFirst: 'ابتدا یک حساب بانکی اضافه کنید',
withdrawalCreated: 'درخواست برداشت ثبت شد',
diff --git a/validation/withdrawal.test.ts b/validation/withdrawal.test.ts
index a176316..2bb31c4 100644
--- a/validation/withdrawal.test.ts
+++ b/validation/withdrawal.test.ts
@@ -4,18 +4,33 @@ import { CreateBankAccountFormValidation, CreateWithdrawalRequestFormValidation
describe('financial form validation', () => {
it('normalizes and validates Iranian IBAN values', () => {
- const result = CreateBankAccountFormValidation.parse({
- ownerType: 'organizer',
- accountHolder: 'علی رضایی',
+ const result = CreateBankAccountFormValidation(false).parse({
iban: 'ir12 3456 7890 1234 5678 9012 34',
- bankName: 'بانک',
+ nationalCode: '',
})
expect(result.iban).toBe('IR123456789012345678901234')
})
it.each(['IR123', 'DE123456789012345678901234', 'IR12345678901234567890123A'])('rejects an invalid IBAN: %s', (iban) => {
- expect(CreateBankAccountFormValidation.safeParse({ ownerType: 'organizer', accountHolder: 'علی رضایی', iban }).success).toBe(false)
+ expect(CreateBankAccountFormValidation(false).safeParse({ iban, nationalCode: '' }).success).toBe(false)
+ })
+
+ it('normalizes Persian digits for IBAN and nationalCode', () => {
+ const result = CreateBankAccountFormValidation(true).parse({
+ iban: 'ir۱۲ ۳۴۵۶ ۷۸۹۰ ۱۲۳۴ ۵۶۷۸ ۹۰۱۲ ۳۴',
+ nationalCode: '۰۰۱۲۳۴۵۶۷۸',
+ })
+
+ expect(result.iban).toBe('IR123456789012345678901234')
+ expect(result.nationalCode).toBe('0012345678')
+ })
+
+ it('requires nationalCode when identity is not verified', () => {
+ expect(CreateBankAccountFormValidation(true).safeParse({ iban: 'IR123456789012345678901234' }).success).toBe(false)
+ expect(
+ CreateBankAccountFormValidation(true).safeParse({ iban: 'IR123456789012345678901234', nationalCode: '0012345678' }).success
+ ).toBe(true)
})
it('accepts only positive integer withdrawal amounts', () => {
diff --git a/validation/withdrawal.ts b/validation/withdrawal.ts
index 5b76681..947c773 100644
--- a/validation/withdrawal.ts
+++ b/validation/withdrawal.ts
@@ -1,38 +1,37 @@
import { z } from 'zod'
+import { convertPersianToEnglish } from '@/helpers'
import { texts } from '@/texts'
const v = texts.validation.withdrawal
const nationalId = texts.validation.nationalId
-export const CreateBankAccountFormValidation = z
- .object({
- ownerType: z.enum(['guest', 'organizer']),
- accountHolder: z.string().trim().min(3, v.accountHolderRequired).max(200, v.accountHolderMax),
- iban: z
- .string()
- .trim()
- .transform((value) => value.toUpperCase().replace(/\s+/g, ''))
- .refine((value) => /^IR\d{24}$/.test(value), v.ibanInvalid),
- nationalCode: z.string().trim().optional().or(z.literal('')),
- bankName: z.string().trim().max(100, v.bankNameMax).optional().or(z.literal('')),
- })
- .superRefine((value, ctx) => {
- if (value.ownerType !== 'guest') return
+const toEnglishDigits = (value: string) => convertPersianToEnglish(value).trim()
- const nationalCode = value.nationalCode ?? ''
+export const CreateBankAccountFormValidation = (requiresNationalCode: boolean) =>
+ z
+ .object({
+ iban: z
+ .string()
+ .trim()
+ .transform((value) => toEnglishDigits(value).toUpperCase().replace(/\s+/g, ''))
+ .refine((value) => /^IR\d{24}$/.test(value), v.ibanInvalid),
+ nationalCode: z.string().trim().transform((value) => toEnglishDigits(value)),
+ })
+ .superRefine((value, ctx) => {
+ if (!requiresNationalCode) return
- if (!nationalCode) {
- ctx.addIssue({ code: 'custom', path: ['nationalCode'], message: nationalId.nationalCodeRequired })
+ if (!value.nationalCode) {
+ ctx.addIssue({ code: 'custom', path: ['nationalCode'], message: nationalId.nationalCodeRequired })
- return
- }
- if (!/^\d{10}$/.test(nationalCode)) {
- ctx.addIssue({ code: 'custom', path: ['nationalCode'], message: nationalId.nationalCodeDigits })
- }
- })
+ return
+ }
+ if (!/^\d{10}$/.test(value.nationalCode)) {
+ ctx.addIssue({ code: 'custom', path: ['nationalCode'], message: nationalId.nationalCodeDigits })
+ }
+ })
-export type CreateBankAccountFormValues = z.infer
+export type CreateBankAccountFormValues = z.infer>
export const CreateWithdrawalRequestFormValidation = z.object({
bankAccountId: z.string().min(1, v.bankAccountRequired),
@@ -40,6 +39,7 @@ export const CreateWithdrawalRequestFormValidation = z.object({
.string()
.trim()
.min(1, v.amountRequired)
+ .transform((value) => toEnglishDigits(value))
.refine((value) => /^\d+$/.test(value), v.amountInteger)
.refine((value) => Number(value) > 0, v.amountPositive),
})