From 1da7df0786817d0ddeeecff680fb882db720cc5f Mon Sep 17 00:00:00 2001 From: alisaza Date: Wed, 9 Sep 2026 18:53:08 +0330 Subject: [PATCH] fix(openapi): format tags in openapi.json for consistency Updated the formatting of tags in the openapi.json file to use array notation consistently across all endpoints. This change improves readability and maintains a uniform structure in the API documentation. --- openapi.json | 3587 +++++++++++++++++++++++++++++++++++-------- texts/events.ts | 4 +- texts/validation.ts | 2 +- 3 files changed, 2907 insertions(+), 686 deletions(-) diff --git a/openapi.json b/openapi.json index 25513fe..1d0cda4 100644 --- a/openapi.json +++ b/openapi.json @@ -50,7 +50,9 @@ } }, "summary": "Request SMS OTP", - "tags": ["Auth"] + "tags": [ + "Auth" + ] } }, "/api/v1/auth/verify-otp": { @@ -112,7 +114,9 @@ } }, "summary": "Verify OTP", - "tags": ["Auth"] + "tags": [ + "Auth" + ] } }, "/api/v1/auth/refresh": { @@ -153,7 +157,9 @@ } }, "summary": "Refresh JWT tokens", - "tags": ["Auth"] + "tags": [ + "Auth" + ] } }, "/api/v1/auth/logout": { @@ -219,7 +225,9 @@ } ], "summary": "Logout current session", - "tags": ["Auth"] + "tags": [ + "Auth" + ] } }, "/api/v1/auth/logout-all": { @@ -285,7 +293,9 @@ } ], "summary": "Logout all sessions", - "tags": ["Auth"] + "tags": [ + "Auth" + ] } }, "/api/v1/auth/sessions": { @@ -354,7 +364,9 @@ } ], "summary": "List active sessions", - "tags": ["Auth"] + "tags": [ + "Auth" + ] } }, "/api/v1/auth/sessions/{id}": { @@ -442,7 +454,9 @@ } ], "summary": "Revoke a session", - "tags": ["Auth"] + "tags": [ + "Auth" + ] } }, "/api/v1/internal/sentry-webhook": { @@ -478,7 +492,9 @@ } }, "summary": "Sentry → Telegram alert relay", - "tags": ["Ops"] + "tags": [ + "Ops" + ] } }, "/api/v1/internal/jibit-transaction-webhook": { @@ -523,7 +539,9 @@ } }, "summary": "Jibit account-transaction → Telegram relay", - "tags": ["Ops"] + "tags": [ + "Ops" + ] } }, "/api/v1/users/public/{id}": { @@ -557,7 +575,9 @@ } ], "summary": "Get a public user profile; host stats are included only for verified hosts", - "tags": ["Users"] + "tags": [ + "Users" + ] } }, "/api/v1/users/public/{id}/events": { @@ -625,7 +645,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -635,7 +658,10 @@ "schema": { "default": "upcoming", "type": "string", - "enum": ["upcoming", "held"] + "enum": [ + "upcoming", + "held" + ] } } ], @@ -659,7 +685,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -671,7 +700,9 @@ } ], "summary": "List discoverable events for a verified public host", - "tags": ["Users"] + "tags": [ + "Users" + ] } }, "/api/v1/users/public/{id}/viewer-state": { @@ -705,7 +736,9 @@ } ], "summary": "Get private organizer state for the current viewer", - "tags": ["Users"] + "tags": [ + "Users" + ] } }, "/api/v1/users/me": { @@ -771,7 +804,9 @@ } ], "summary": "Get current user profile", - "tags": ["Users"] + "tags": [ + "Users" + ] }, "patch": { "description": "Updates editable profile fields for the authenticated user only.", @@ -846,7 +881,9 @@ } ], "summary": "Update current user profile", - "tags": ["Users"] + "tags": [ + "Users" + ] } }, "/api/v1/users/me/profile-summary": { @@ -922,7 +959,9 @@ } ], "summary": "Get current user profile hub summary", - "tags": ["Users"] + "tags": [ + "Users" + ] } }, "/api/v1/users/{id}/attendee-contact-links": { @@ -960,7 +999,9 @@ } ], "summary": "Get attendee-only contact links for an organizer", - "tags": ["Users"] + "tags": [ + "Users" + ] } }, "/api/v1/users/me/complete-profile": { @@ -1047,7 +1088,9 @@ } ], "summary": "Complete user profile after OTP verification", - "tags": ["Users"] + "tags": [ + "Users" + ] } }, "/api/v1/admin/users": { @@ -1116,7 +1159,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -1240,7 +1286,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -1312,7 +1361,9 @@ } ], "summary": "Paginated admin users list", - "tags": ["Admin - Users"] + "tags": [ + "Admin - Users" + ] } }, "/api/v1/admin/users/{id}/mobile": { @@ -1418,7 +1469,9 @@ } ], "summary": "Change a user's login mobile (admin)", - "tags": ["Admin - Users"] + "tags": [ + "Admin - Users" + ] } }, "/api/v1/admin/users/{id}": { @@ -1525,7 +1578,9 @@ } ], "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.", @@ -1618,7 +1673,9 @@ } ], "summary": "Full user detail for admin", - "tags": ["Admin - User Detail"] + "tags": [ + "Admin - User Detail" + ] } }, "/api/v1/users/me/contact-links": { @@ -1646,7 +1703,9 @@ } ], "summary": "Current user's contact links (unpaginated)", - "tags": ["users"] + "tags": [ + "users" + ] }, "post": { "operationId": "UserContactLinksController_create", @@ -1679,7 +1738,9 @@ } ], "summary": "Add a contact link for the current user", - "tags": ["users"] + "tags": [ + "users" + ] } }, "/api/v1/users/me/contact-links/{id}": { @@ -1723,7 +1784,9 @@ } ], "summary": "Update a contact link owned by the current user", - "tags": ["users"] + "tags": [ + "users" + ] }, "delete": { "operationId": "UserContactLinksController_remove", @@ -1755,7 +1818,9 @@ } ], "summary": "Remove a contact link owned by the current user", - "tags": ["users"] + "tags": [ + "users" + ] } }, "/api/v1/identity/rejection-reasons": { @@ -1799,7 +1864,9 @@ } }, "summary": "List active identity rejection reasons", - "tags": ["Identity"] + "tags": [ + "Identity" + ] } }, "/api/v1/identity/verifications/request-otp": { @@ -1895,7 +1962,9 @@ } ], "summary": "Request OTP to confirm host cooperation contract", - "tags": ["Identity"] + "tags": [ + "Identity" + ] } }, "/api/v1/identity/verifications/confirm-otp": { @@ -1981,7 +2050,9 @@ } ], "summary": "Confirm host-contract OTP and submit identity verification", - "tags": ["Identity"] + "tags": [ + "Identity" + ] } }, "/api/v1/identity/verifications/me": { @@ -2050,7 +2121,9 @@ } ], "summary": "List my identity verification submissions", - "tags": ["Identity"] + "tags": [ + "Identity" + ] } }, "/api/v1/admin/identity/verifications": { @@ -2112,7 +2185,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -2156,7 +2232,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -2228,7 +2307,9 @@ } ], "summary": "List identity verification review queue", - "tags": ["Admin - Identity"] + "tags": [ + "Admin - Identity" + ] } }, "/api/v1/admin/identity/verifications/{id}/jibit-inquiry": { @@ -2326,7 +2407,9 @@ } ], "summary": "Run Jibit national-code/mobile matching inquiry", - "tags": ["Admin - Identity"] + "tags": [ + "Admin - Identity" + ] } }, "/api/v1/admin/identity/verifications/{id}/approve": { @@ -2424,7 +2507,9 @@ } ], "summary": "Approve identity verification", - "tags": ["Admin - Identity"] + "tags": [ + "Admin - Identity" + ] } }, "/api/v1/admin/identity/verifications/{id}/reject": { @@ -2533,7 +2618,9 @@ } ], "summary": "Reject identity verification", - "tags": ["Admin - Identity"] + "tags": [ + "Admin - Identity" + ] } }, "/api/v1/notifications/me": { @@ -2595,7 +2682,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -2629,7 +2719,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -2681,7 +2774,9 @@ } ], "summary": "List my in-app notifications", - "tags": ["Notifications"] + "tags": [ + "Notifications" + ] } }, "/api/v1/notifications/me/unread-count": { @@ -2747,7 +2842,9 @@ } ], "summary": "Get unread in-app notification count", - "tags": ["Notifications"] + "tags": [ + "Notifications" + ] } }, "/api/v1/notifications/me/read-all": { @@ -2813,7 +2910,9 @@ } ], "summary": "Mark all my in-app notifications as read", - "tags": ["Notifications"] + "tags": [ + "Notifications" + ] } }, "/api/v1/notifications/{id}/read": { @@ -2900,7 +2999,9 @@ } ], "summary": "Mark an in-app notification as read", - "tags": ["Notifications"] + "tags": [ + "Notifications" + ] } }, "/api/v1/notifications/push/vapid-public-key": { @@ -2966,7 +3067,9 @@ } ], "summary": "Get VAPID public key for Web Push subscription", - "tags": ["Notifications"] + "tags": [ + "Notifications" + ] } }, "/api/v1/notifications/push/deliveries/receipt": { @@ -3052,7 +3155,9 @@ } ], "summary": "Record a browser Web Push receipt event", - "tags": ["Notifications"] + "tags": [ + "Notifications" + ] } }, "/api/v1/notifications/push/subscribe": { @@ -3141,7 +3246,9 @@ } ], "summary": "Register a browser Web Push subscription", - "tags": ["Notifications"] + "tags": [ + "Notifications" + ] }, "delete": { "description": "Called on logout to stop push delivery to all user devices.", @@ -3208,7 +3315,9 @@ } ], "summary": "Remove all Web Push subscriptions for current user", - "tags": ["Notifications"] + "tags": [ + "Notifications" + ] } }, "/api/v1/notifications/push/subscribe/{id}": { @@ -3296,7 +3405,9 @@ } ], "summary": "Remove a browser Web Push subscription", - "tags": ["Notifications"] + "tags": [ + "Notifications" + ] } }, "/api/v1/admin/sms-messages": { @@ -3358,7 +3469,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -3412,7 +3526,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -3484,7 +3601,9 @@ } ], "summary": "List SMS delivery records", - "tags": ["Admin - Notifications"] + "tags": [ + "Admin - Notifications" + ] } }, "/api/v1/admin/notification-rules": { @@ -3512,7 +3631,9 @@ } ], "summary": "List admin-managed notification rules", - "tags": ["Admin - Notification Rules"] + "tags": [ + "Admin - Notification Rules" + ] } }, "/api/v1/admin/notification-rules/{eventKey}": { @@ -3556,7 +3677,9 @@ } ], "summary": "Update delivery and templates for a notification event", - "tags": ["Admin - Notification Rules"] + "tags": [ + "Admin - Notification Rules" + ] } }, "/api/v1/admin/manual-notifications/request-otp": { @@ -3642,7 +3765,9 @@ } ], "summary": "Request OTP before sending a group SMS", - "tags": ["Admin - Notifications"] + "tags": [ + "Admin - Notifications" + ] } }, "/api/v1/admin/manual-notifications": { @@ -3738,7 +3863,9 @@ } ], "summary": "Send a manual notification to selected users", - "tags": ["Admin - Notifications"] + "tags": [ + "Admin - Notifications" + ] } }, "/api/v1/admin/in-app-notifications": { @@ -3800,7 +3927,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -3864,7 +3994,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -3936,7 +4069,9 @@ } ], "summary": "List in-app notifications", - "tags": ["Admin - Notifications"] + "tags": [ + "Admin - Notifications" + ] } }, "/api/v1/admin/push-deliveries": { @@ -3998,7 +4133,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -4062,7 +4200,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -4134,7 +4275,9 @@ } ], "summary": "List Web Push delivery records", - "tags": ["Admin - Notifications"] + "tags": [ + "Admin - Notifications" + ] } }, "/api/v1/event-categories": { @@ -4157,7 +4300,9 @@ } }, "summary": "Active event categories (flat list, unpaginated)", - "tags": ["Event Categories"] + "tags": [ + "Event Categories" + ] } }, "/api/v1/event-categories/{slug}": { @@ -4186,7 +4331,9 @@ } }, "summary": "Single active category by slug", - "tags": ["Event Categories"] + "tags": [ + "Event Categories" + ] } }, "/api/v1/admin/event-categories/flat": { @@ -4214,7 +4361,9 @@ } ], "summary": "Flat list of all categories for admin filters", - "tags": ["Admin - Event Categories"] + "tags": [ + "Admin - Event Categories" + ] } }, "/api/v1/admin/event-categories": { @@ -4273,7 +4422,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -4297,7 +4449,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -4309,7 +4464,9 @@ } ], "summary": "Paginated category management list", - "tags": ["Admin - Event Categories"] + "tags": [ + "Admin - Event Categories" + ] }, "post": { "operationId": "AdminEventCategoriesController_create", @@ -4342,7 +4499,9 @@ } ], "summary": "Create event category", - "tags": ["Admin - Event Categories"] + "tags": [ + "Admin - Event Categories" + ] } }, "/api/v1/admin/event-categories/{id}": { @@ -4386,7 +4545,9 @@ } ], "summary": "Update event category", - "tags": ["Admin - Event Categories"] + "tags": [ + "Admin - Event Categories" + ] }, "delete": { "operationId": "AdminEventCategoriesController_remove", @@ -4418,7 +4579,9 @@ } ], "summary": "Soft-delete event category", - "tags": ["Admin - Event Categories"] + "tags": [ + "Admin - Event Categories" + ] } }, "/api/v1/geography/provinces": { @@ -4441,7 +4604,9 @@ } }, "summary": "List all provinces (unpaginated)", - "tags": ["Geography"] + "tags": [ + "Geography" + ] } }, "/api/v1/geography/cities": { @@ -4464,7 +4629,9 @@ } }, "summary": "List all cities (unpaginated, flat)", - "tags": ["Geography"] + "tags": [ + "Geography" + ] } }, "/api/v1/geography/provinces/{provinceId}/cities": { @@ -4496,7 +4663,9 @@ } }, "summary": "List cities in a province (unpaginated)", - "tags": ["Geography"] + "tags": [ + "Geography" + ] } }, "/api/v1/geography/cities/{slug}": { @@ -4525,7 +4694,9 @@ } }, "summary": "Single city by slug (SEO city landing pages)", - "tags": ["Geography"] + "tags": [ + "Geography" + ] } }, "/api/v1/my-events": { @@ -4585,7 +4756,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -4595,7 +4769,10 @@ "schema": { "default": "guest", "type": "string", - "enum": ["guest", "host"] + "enum": [ + "guest", + "host" + ] } }, { @@ -4605,7 +4782,14 @@ "schema": { "default": "upcoming", "type": "string", - "enum": ["upcoming", "held", "cancelled", "pending_review", "published", "rejected"] + "enum": [ + "upcoming", + "held", + "cancelled", + "pending_review", + "published", + "rejected" + ] } } ], @@ -4616,15 +4800,32 @@ "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" @@ -4633,7 +4834,10 @@ "type": "array", "items": { "type": "string", - "enum": ["guest", "host"] + "enum": [ + "guest", + "host" + ] } }, "items": { @@ -4664,7 +4868,9 @@ } ], "summary": "List the current user’s guest or hosted events by lifecycle", - "tags": ["My Events"] + "tags": [ + "My Events" + ] } }, "/api/v1/events/{eventId}/revisions": { @@ -4708,7 +4914,9 @@ } ], "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": { @@ -4742,7 +4950,9 @@ } ], "summary": "Get the current pending revision for own live event", - "tags": ["My Events"] + "tags": [ + "My Events" + ] }, "delete": { "operationId": "EventRevisionsController_withdraw", @@ -4776,7 +4986,9 @@ } ], "summary": "Withdraw the pending revision for own live event", - "tags": ["My Events"] + "tags": [ + "My Events" + ] } }, "/api/v1/events": { @@ -4811,7 +5023,9 @@ } ], "summary": "Create a draft event (verified host)", - "tags": ["My Events"] + "tags": [ + "My Events" + ] }, "get": { "operationId": "EventsController_discovery", @@ -4872,7 +5086,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -4896,14 +5113,19 @@ "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": { @@ -4966,7 +5188,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -4990,7 +5215,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -5002,7 +5230,9 @@ } ], "summary": "Organizer's own events", - "tags": ["My Events"] + "tags": [ + "My Events" + ] } }, "/api/v1/events/{id}/for-edit": { @@ -5037,7 +5267,9 @@ } ], "summary": "Full event payload for edit/clone forms", - "tags": ["My Events"] + "tags": [ + "My Events" + ] } }, "/api/v1/events/{id}/owner-insights": { @@ -5071,7 +5303,9 @@ } ], "summary": "Get engagement insights for own event", - "tags": ["My Events"] + "tags": [ + "My Events" + ] } }, "/api/v1/events/{id}/management-bootstrap": { @@ -5105,7 +5339,9 @@ } ], "summary": "Get all initial data for managing an owned event", - "tags": ["My Events"] + "tags": [ + "My Events" + ] } }, "/api/v1/events/{id}/attendees": { @@ -5172,7 +5408,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -5214,7 +5453,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -5226,7 +5468,9 @@ } ], "summary": "Search and list registrations for own event attendance desk", - "tags": ["My Events"] + "tags": [ + "My Events" + ] } }, "/api/v1/events/{id}/reserved-capacity": { @@ -5271,7 +5515,9 @@ } ], "summary": "Set off-platform reserved seat count for own event", - "tags": ["My Events"] + "tags": [ + "My Events" + ] } }, "/api/v1/events/{id}": { @@ -5315,7 +5561,9 @@ } ], "summary": "Update own event", - "tags": ["My Events"] + "tags": [ + "My Events" + ] }, "delete": { "operationId": "MyEventsController_softDelete", @@ -5347,7 +5595,9 @@ } ], "summary": "Soft-delete own event when it has no active bookings (booked_count = 0)", - "tags": ["My Events"] + "tags": [ + "My Events" + ] }, "get": { "operationId": "EventsController_findOne", @@ -5374,7 +5624,9 @@ } }, "summary": "Single event detail", - "tags": ["Events"] + "tags": [ + "Events" + ] } }, "/api/v1/events/{id}/publish": { @@ -5408,7 +5660,9 @@ } ], "summary": "Publish draft event", - "tags": ["My Events"] + "tags": [ + "My Events" + ] } }, "/api/v1/events/{id}/cancel": { @@ -5442,7 +5696,9 @@ } ], "summary": "Cancel published/full event", - "tags": ["My Events"] + "tags": [ + "My Events" + ] } }, "/api/v1/events/{id}/complete": { @@ -5476,7 +5732,9 @@ } ], "summary": "Mark event completed (creates group chat)", - "tags": ["My Events"] + "tags": [ + "My Events" + ] } }, "/api/v1/events/{id}/clone": { @@ -5510,7 +5768,9 @@ } ], "summary": "Clone event to new draft", - "tags": ["My Events"] + "tags": [ + "My Events" + ] } }, "/api/v1/events/bookmarks": { @@ -5569,7 +5829,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -5593,7 +5856,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -5605,7 +5871,9 @@ } ], "summary": "List events bookmarked by current user", - "tags": ["Event Bookmarks"] + "tags": [ + "Event Bookmarks" + ] } }, "/api/v1/events/bookmarks/status": { @@ -5640,7 +5908,9 @@ } ], "summary": "Get bookmark status for a batch of events", - "tags": ["Event Bookmarks"] + "tags": [ + "Event Bookmarks" + ] } }, "/api/v1/events/{id}/bookmark": { @@ -5674,7 +5944,9 @@ } ], "summary": "Get bookmark status for current user", - "tags": ["Event Bookmarks"] + "tags": [ + "Event Bookmarks" + ] }, "post": { "operationId": "EventBookmarksController_bookmark", @@ -5706,7 +5978,9 @@ } ], "summary": "Bookmark an event", - "tags": ["Event Bookmarks"] + "tags": [ + "Event Bookmarks" + ] }, "delete": { "operationId": "EventBookmarksController_remove", @@ -5738,7 +6012,9 @@ } ], "summary": "Remove an event bookmark", - "tags": ["Event Bookmarks"] + "tags": [ + "Event Bookmarks" + ] } }, "/api/v1/events/by-slug/{slug}/bootstrap": { @@ -5767,7 +6043,9 @@ } }, "summary": "Public event landing bootstrap payload", - "tags": ["Events"] + "tags": [ + "Events" + ] } }, "/api/v1/events/by-slug/{slug}": { @@ -5796,7 +6074,9 @@ } }, "summary": "Single discoverable event by slug (SEO event landing page)", - "tags": ["Events"] + "tags": [ + "Events" + ] } }, "/api/v1/events/{id}/viewer-state": { @@ -5825,7 +6105,9 @@ } }, "summary": "Authenticated viewer state for an event landing", - "tags": ["Events"] + "tags": [ + "Events" + ] } }, "/api/v1/admin/events/{eventId}/revisions/pending": { @@ -5859,7 +6141,9 @@ } ], "summary": "Get pending revision for any live event", - "tags": ["Admin - Events"] + "tags": [ + "Admin - Events" + ] } }, "/api/v1/admin/events/{eventId}/revisions/{revisionId}/approve": { @@ -5901,7 +6185,9 @@ } ], "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": { @@ -5953,7 +6239,9 @@ } ], "summary": "Reject a pending revision; live event content stays unchanged", - "tags": ["Admin - Events"] + "tags": [ + "Admin - Events" + ] } }, "/api/v1/admin/events": { @@ -6016,7 +6304,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -6040,7 +6331,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -6052,7 +6346,9 @@ } ], "summary": "Paginated admin events list", - "tags": ["Admin - Events"] + "tags": [ + "Admin - Events" + ] }, "post": { "description": "Requires a verified host `organizerId`. Creates a draft with `admin_approved_at` set so the host can publish immediately; does not publish. Notifies the host (SMS + in-app) via `event_created_by_admin`.", @@ -6086,7 +6382,9 @@ } ], "summary": "Create a pre-approved draft event for a verified host", - "tags": ["Admin - Events"] + "tags": [ + "Admin - Events" + ] } }, "/api/v1/admin/events/{id}": { @@ -6120,7 +6418,9 @@ } ], "summary": "Admin event detail including bookmark count", - "tags": ["Admin - Events"] + "tags": [ + "Admin - Events" + ] }, "patch": { "operationId": "AdminEventsController_update", @@ -6162,7 +6462,9 @@ } ], "summary": "Update any event as admin (same field locks as host edit)", - "tags": ["Admin - Events"] + "tags": [ + "Admin - Events" + ] }, "delete": { "operationId": "AdminEventsController_softDelete", @@ -6194,7 +6496,9 @@ } ], "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": { @@ -6238,7 +6542,9 @@ } ], "summary": "Set off-platform reserved seat count as admin", - "tags": ["Admin - Events"] + "tags": [ + "Admin - Events" + ] } }, "/api/v1/admin/events/{id}/commission": { @@ -6283,7 +6589,9 @@ } ], "summary": "Set or clear this event’s platform commission override", - "tags": ["Admin - Events"] + "tags": [ + "Admin - Events" + ] } }, "/api/v1/admin/events/{id}/insights": { @@ -6317,7 +6625,9 @@ } ], "summary": "Get engagement insights for any event as admin", - "tags": ["Admin - Events"] + "tags": [ + "Admin - Events" + ] } }, "/api/v1/admin/events/{id}/approve": { @@ -6351,7 +6661,9 @@ } ], "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": { @@ -6385,7 +6697,9 @@ } ], "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,7 +6743,9 @@ } ], "summary": "Reject a pending-review event with a reason", - "tags": ["Admin - Events"] + "tags": [ + "Admin - Events" + ] } }, "/api/v1/admin/events/{id}/cancel": { @@ -6463,7 +6779,9 @@ } ], "summary": "Cancel any organizer’s published/full event as admin", - "tags": ["Admin - Events"] + "tags": [ + "Admin - Events" + ] } }, "/api/v1/admin/events/{id}/complete": { @@ -6497,7 +6815,9 @@ } ], "summary": "Mark any organizer’s event completed as admin", - "tags": ["Admin - Events"] + "tags": [ + "Admin - Events" + ] } }, "/api/v1/discovery/cities": { @@ -6520,7 +6840,9 @@ } }, "summary": "Cached city list for discovery/home", - "tags": ["Events"] + "tags": [ + "Events" + ] } }, "/api/v1/discovery/categories": { @@ -6543,7 +6865,9 @@ } }, "summary": "Cached active category tree summary for discovery/home", - "tags": ["Events"] + "tags": [ + "Events" + ] } }, "/api/v1/discovery/home-feed": { @@ -6573,7 +6897,9 @@ } }, "summary": "Home page event sections (popular, category previews, city previews)", - "tags": ["Events"] + "tags": [ + "Events" + ] } }, "/api/v1/discovery/bootstrap": { @@ -6594,7 +6920,9 @@ } }, "summary": "Legacy combined reference data for event discovery", - "tags": ["Events"] + "tags": [ + "Events" + ] } }, "/api/v1/organizers/me/following": { @@ -6655,7 +6983,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -6688,7 +7019,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -6700,7 +7034,9 @@ } ], "summary": "Get organizers followed by current user", - "tags": ["Organizer Follows"] + "tags": [ + "Organizer Follows" + ] } }, "/api/v1/organizers/me/following/events": { @@ -6761,7 +7097,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -6785,7 +7124,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -6797,7 +7139,9 @@ } ], "summary": "Get upcoming events from followed organizers", - "tags": ["Organizer Follows"] + "tags": [ + "Organizer Follows" + ] } }, "/api/v1/organizers/me/followers": { @@ -6858,7 +7202,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -6882,7 +7229,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -6894,7 +7244,9 @@ } ], "summary": "Get followers of the current user (as organizer)", - "tags": ["Organizer Follows"] + "tags": [ + "Organizer Follows" + ] } }, "/api/v1/organizers/{organizerId}/follow": { @@ -6990,7 +7342,9 @@ } ], "summary": "Follow an organizer", - "tags": ["Organizer Follows"] + "tags": [ + "Organizer Follows" + ] }, "delete": { "operationId": "OrganizerFollowsController_unfollow", @@ -7074,7 +7428,9 @@ } ], "summary": "Unfollow an organizer", - "tags": ["Organizer Follows"] + "tags": [ + "Organizer Follows" + ] } }, "/api/v1/organizers/{organizerId}/followers": { @@ -7145,7 +7501,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -7169,14 +7528,19 @@ "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": { @@ -7218,7 +7582,9 @@ } ], "summary": "Check if current user is following an organizer", - "tags": ["Organizer Follows"] + "tags": [ + "Organizer Follows" + ] } }, "/api/v1/organizers/{organizerId}/follow-settings": { @@ -7264,7 +7630,9 @@ } ], "summary": "Update follow notification settings", - "tags": ["Organizer Follows"] + "tags": [ + "Organizer Follows" + ] } }, "/api/v1/events/{eventId}/media": { @@ -7296,7 +7664,9 @@ } }, "summary": "List media for an event (unpaginated)", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] }, "post": { "operationId": "EventMediaController_create", @@ -7338,7 +7708,9 @@ } ], "summary": "Add media to own event (or any event as admin)", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] } }, "/api/v1/events/{eventId}/media/{id}": { @@ -7390,7 +7762,9 @@ } ], "summary": "Update event media (owner or admin)", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] }, "delete": { "operationId": "EventMediaController_remove", @@ -7430,7 +7804,9 @@ } ], "summary": "Remove event media (owner or admin)", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] } }, "/api/v1/events/{eventId}/faqs": { @@ -7462,7 +7838,9 @@ } }, "summary": "List FAQs for an event (unpaginated)", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] }, "post": { "operationId": "EventFaqsController_create", @@ -7504,7 +7882,9 @@ } ], "summary": "Add FAQ to own event (or any event as admin)", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] } }, "/api/v1/events/{eventId}/faqs/page": { @@ -7571,7 +7951,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -7595,14 +7978,19 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } } }, "summary": "Paginated FAQs for an event", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] } }, "/api/v1/events/{eventId}/faqs/{id}": { @@ -7654,7 +8042,9 @@ } ], "summary": "Update event FAQ (owner or admin)", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] }, "delete": { "operationId": "EventFaqsController_remove", @@ -7694,7 +8084,9 @@ } ], "summary": "Remove event FAQ (owner or admin)", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] } }, "/api/v1/organizer-guest-lists/previous-attendees": { @@ -7722,7 +8114,9 @@ } ], "summary": "Organizer's deduplicated checked-in attendees", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] } }, "/api/v1/organizer-guest-lists": { @@ -7781,7 +8175,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -7805,7 +8202,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -7817,7 +8217,9 @@ } ], "summary": "Organizer's own guest lists (paginated)", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] }, "post": { "operationId": "OrganizerGuestListsController_create", @@ -7850,7 +8252,9 @@ } ], "summary": "Create a guest list", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] } }, "/api/v1/organizer-guest-lists/{id}": { @@ -7885,7 +8289,9 @@ } ], "summary": "Soft-delete a whole guest list", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] } }, "/api/v1/organizer-guest-lists/{id}/items": { @@ -7954,7 +8360,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -7978,7 +8387,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -7990,7 +8402,9 @@ } ], "summary": "A guest list's contacts (paginated)", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] }, "post": { "operationId": "OrganizerGuestListsController_addItem", @@ -8033,7 +8447,9 @@ } ], "summary": "Add a contact to a guest list", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] } }, "/api/v1/organizer-guest-lists/{id}/items/{itemId}": { @@ -8077,7 +8493,9 @@ } ], "summary": "Remove a contact from a guest list", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] } }, "/api/v1/events/{eventId}/guest-list-links/invited-guests": { @@ -8122,7 +8540,9 @@ } ], "summary": "Set previous attendees invited to this event", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] } }, "/api/v1/events/{eventId}/guest-list-links/invited-guests/page": { @@ -8189,7 +8609,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -8213,7 +8636,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -8225,7 +8651,9 @@ } ], "summary": "Paginated guests selected to invite to this event", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] } }, "/api/v1/events/{eventId}/guest-list-links/invited-guests/notify": { @@ -8260,7 +8688,9 @@ } ], "summary": "Send invitation notifications for the event invite set", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] } }, "/api/v1/events/{eventId}/guest-list-links/page": { @@ -8327,7 +8757,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -8351,7 +8784,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -8363,7 +8799,9 @@ } ], "summary": "Paginated guest lists linked to this event", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] } }, "/api/v1/events/{eventId}/guest-list-links": { @@ -8408,7 +8846,9 @@ } ], "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": { @@ -8452,7 +8892,9 @@ } ], "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}": { @@ -8496,7 +8938,9 @@ } ], "summary": "Unlink a guest list from an event", - "tags": ["Event Extras"] + "tags": [ + "Event Extras" + ] } }, "/api/v1/admin/guest-lists": { @@ -8556,7 +9000,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -8580,7 +9027,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -8592,7 +9042,9 @@ } ], "summary": "Every organizer's guest lists (paginated)", - "tags": ["Admin - Event Extras"] + "tags": [ + "Admin - Event Extras" + ] } }, "/api/v1/admin/guest-lists/{id}/items": { @@ -8660,7 +9112,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -8684,7 +9139,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -8696,7 +9154,9 @@ } ], "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": { @@ -8735,7 +9195,9 @@ } ], "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": { @@ -8774,7 +9236,9 @@ } ], "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.", @@ -8821,7 +9285,9 @@ } ], "summary": "Replace the invite set for this event", - "tags": ["Admin - Event Extras"] + "tags": [ + "Admin - Event Extras" + ] } }, "/api/v1/admin/events/{eventId}/invited-guests/notify": { @@ -8857,7 +9323,9 @@ } ], "summary": "Send invitation notifications to the event invite set", - "tags": ["Admin - Event Extras"] + "tags": [ + "Admin - Event Extras" + ] } }, "/api/v1/bookings/{bookingId}/payments": { @@ -8901,7 +9369,9 @@ } ], "summary": "Create payment attempt for a booking", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/bookings/{bookingId}/discount-preview": { @@ -8945,7 +9415,9 @@ } ], "summary": "Preview a discount code against a booking", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/payments/me": { @@ -9004,7 +9476,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -9028,7 +9503,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -9040,7 +9518,9 @@ } ], "summary": "Current user's payments", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/payments/{id}/receipt": { @@ -9074,7 +9554,9 @@ } ], "summary": "Payment receipt (owner only)", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/admin/payments": { @@ -9133,7 +9615,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -9157,7 +9642,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -9169,7 +9657,9 @@ } ], "summary": "Paginated admin payment list, all users", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/admin/wallet-deposits": { @@ -9228,7 +9718,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -9252,7 +9745,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -9264,7 +9760,9 @@ } ], "summary": "Paginated admin wallet deposit list (gateway sessions)", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/users/me/wallet": { @@ -9289,7 +9787,9 @@ } ], "summary": "Current user's wallet", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/users/me/wallet/transactions": { @@ -9348,7 +9848,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -9372,7 +9875,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -9384,7 +9890,9 @@ } ], "summary": "Current user's wallet transactions", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/users/me/wallet/deposits": { @@ -9419,7 +9927,9 @@ } ], "summary": "Start a wallet top-up via payment gateway", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/users/me/wallet/deposits/{id}": { @@ -9453,7 +9963,9 @@ } ], "summary": "Get one of the current user wallet deposits", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/wallet/deposits/{id}/gateway-return": { @@ -9484,7 +9996,9 @@ } }, "summary": "Jibit browser return (GET) — verifies payment server-side then redirects to the frontend result page", - "tags": ["Financial"] + "tags": [ + "Financial" + ] }, "post": { "operationId": "WalletController_depositGatewayReturnPost", @@ -9513,7 +10027,9 @@ } }, "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": { @@ -9552,7 +10068,9 @@ } }, "summary": "Console/dev HMAC callback for wallet deposits (disabled when PAYMENT_GATEWAY_PROVIDER=jibit)", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/bank-accounts": { @@ -9587,7 +10105,9 @@ } ], "summary": "Create bank account for withdrawals/settlements", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/bank-accounts/me": { @@ -9615,7 +10135,9 @@ } ], "summary": "Current user's bank accounts", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/admin/bank-accounts": { @@ -9674,7 +10196,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -9698,7 +10223,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -9710,7 +10238,9 @@ } ], "summary": "Paginated admin bank account verification queue", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/admin/bank-accounts/{id}/jibit-inquiry": { @@ -9745,7 +10275,9 @@ } ], "summary": "Run Jibit IBAN/national-code/birth-date matching inquiry", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/admin/bank-accounts/{id}/approve": { @@ -9779,7 +10311,9 @@ } ], "summary": "Approve bank account after a successful Jibit match", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/admin/bank-accounts/{id}/reject": { @@ -9823,7 +10357,9 @@ } ], "summary": "Reject bank account with a reason", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/withdrawal-requests": { @@ -9858,7 +10394,9 @@ } ], "summary": "Create withdrawal request from wallet", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/withdrawal-requests/me": { @@ -9917,7 +10455,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -9941,7 +10482,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -9953,7 +10497,9 @@ } ], "summary": "Current user's withdrawal requests", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/admin/withdrawal-requests": { @@ -10012,7 +10558,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -10036,7 +10585,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -10048,7 +10600,9 @@ } ], "summary": "Paginated admin withdrawal queue", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/admin/withdrawal-requests/{id}/process": { @@ -10082,7 +10636,9 @@ } ], "summary": "Mark withdrawal request as processing", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/admin/withdrawal-requests/{id}/complete": { @@ -10126,7 +10682,9 @@ } ], "summary": "Complete withdrawal with manual payment evidence", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/admin/withdrawal-requests/{id}/reject": { @@ -10170,7 +10728,9 @@ } ], "summary": "Reject withdrawal request and reverse hold", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/organizers/me/earnings": { @@ -10229,7 +10789,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -10253,7 +10816,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -10265,7 +10831,9 @@ } ], "summary": "Current organizer's earnings ledger", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/settlements/me": { @@ -10324,7 +10892,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -10348,7 +10919,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -10360,7 +10934,9 @@ } ], "summary": "Current organizer's settlement batches", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/admin/settlements": { @@ -10395,7 +10971,9 @@ } ], "summary": "Create organizer settlement batch", - "tags": ["Financial"] + "tags": [ + "Financial" + ] }, "get": { "operationId": "AdminSettlementsController_list", @@ -10452,7 +11030,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -10476,7 +11057,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -10488,7 +11072,9 @@ } ], "summary": "Paginated settlement batches", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/admin/settlements/{id}": { @@ -10523,7 +11109,9 @@ } ], "summary": "Settlement batch detail, with items inlined", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/admin/settlements/{id}/process": { @@ -10557,7 +11145,9 @@ } ], "summary": "Mark settlement batch as processing", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/admin/settlements/{id}/complete": { @@ -10601,7 +11191,9 @@ } ], "summary": "Complete settlement with manual payment evidence", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/admin/settlements/{id}/fail": { @@ -10646,7 +11238,9 @@ } ], "summary": "Mark settlement batch as failed and release its earnings", - "tags": ["Financial"] + "tags": [ + "Financial" + ] } }, "/api/v1/events/{eventId}/discount-codes": { @@ -10691,7 +11285,9 @@ } ], "summary": "Bulk-create discount codes for an event (host or admin)", - "tags": ["Discount Codes"] + "tags": [ + "Discount Codes" + ] }, "get": { "operationId": "DiscountCodesController_list", @@ -10757,7 +11353,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -10781,7 +11380,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -10793,7 +11395,9 @@ } ], "summary": "An event's discount codes (paginated)", - "tags": ["Discount Codes"] + "tags": [ + "Discount Codes" + ] } }, "/api/v1/events/{eventId}/discount-codes/management-bootstrap": { @@ -10827,7 +11431,9 @@ } ], "summary": "All initial data for an event's discount management tab", - "tags": ["Discount Codes"] + "tags": [ + "Discount Codes" + ] } }, "/api/v1/events/{eventId}/discount-codes/report": { @@ -10862,7 +11468,9 @@ } ], "summary": "Summary of an event's discount usage", - "tags": ["Discount Codes"] + "tags": [ + "Discount Codes" + ] } }, "/api/v1/events/{eventId}/discount-codes/redemptions": { @@ -10930,7 +11538,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -10954,7 +11565,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -10966,7 +11580,9 @@ } ], "summary": "An event's discount redemptions (paginated)", - "tags": ["Discount Codes"] + "tags": [ + "Discount Codes" + ] } }, "/api/v1/discount-codes/{id}": { @@ -11011,7 +11627,9 @@ } ], "summary": "Enable/disable a discount code (host or admin)", - "tags": ["Discount Codes"] + "tags": [ + "Discount Codes" + ] }, "delete": { "operationId": "DiscountCodesController_remove", @@ -11044,7 +11662,9 @@ } ], "summary": "Delete an unused discount code (host or admin)", - "tags": ["Discount Codes"] + "tags": [ + "Discount Codes" + ] } }, "/api/v1/events/{eventId}/bookings": { @@ -11088,7 +11708,9 @@ } ], "summary": "Create a booking for an event", - "tags": ["Bookings"] + "tags": [ + "Bookings" + ] } }, "/api/v1/bookings/me": { @@ -11147,7 +11769,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -11171,7 +11796,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -11183,7 +11811,9 @@ } ], "summary": "Current user's booking history", - "tags": ["Bookings"] + "tags": [ + "Bookings" + ] } }, "/api/v1/bookings/{id}": { @@ -11217,7 +11847,9 @@ } ], "summary": "Single booking detail (owner only)", - "tags": ["Bookings"] + "tags": [ + "Bookings" + ] } }, "/api/v1/bookings/{id}/cancel": { @@ -11262,7 +11894,9 @@ } ], "summary": "Cancel a booking (guest only)", - "tags": ["Bookings"] + "tags": [ + "Bookings" + ] } }, "/api/v1/bookings/{id}/check-in": { @@ -11296,7 +11930,9 @@ } ], "summary": "Check in a guest (event organizer only)", - "tags": ["Bookings"] + "tags": [ + "Bookings" + ] } }, "/api/v1/events/{eventId}/waitlist": { @@ -11340,7 +11976,9 @@ } ], "summary": "Join the waitlist for a full event", - "tags": ["Waitlist"] + "tags": [ + "Waitlist" + ] }, "get": { "operationId": "WaitlistController_listForEvent", @@ -11405,7 +12043,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -11429,7 +12070,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -11441,7 +12085,9 @@ } ], "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": { @@ -11500,7 +12146,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -11524,7 +12173,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -11536,7 +12188,9 @@ } ], "summary": "Current user's waitlist entries", - "tags": ["Waitlist"] + "tags": [ + "Waitlist" + ] } }, "/api/v1/events/{eventId}/waitlist/{entryId}/offer": { @@ -11578,7 +12232,9 @@ } ], "summary": "Host manually offers an opened seat to a specific waitlist entry", - "tags": ["Waitlist"] + "tags": [ + "Waitlist" + ] } }, "/api/v1/waitlist/{id}/accept": { @@ -11612,7 +12268,9 @@ } ], "summary": "Accept a notified waitlist offer", - "tags": ["Waitlist"] + "tags": [ + "Waitlist" + ] } }, "/api/v1/admin/bookings": { @@ -11671,7 +12329,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -11695,7 +12356,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -11707,7 +12371,9 @@ } ], "summary": "Paginated admin bookings list", - "tags": ["Admin - Bookings"] + "tags": [ + "Admin - Bookings" + ] } }, "/api/v1/admin/bookings/{id}/check-in": { @@ -11741,7 +12407,9 @@ } ], "summary": "Check in a guest for any organizer’s event as admin", - "tags": ["Admin - Bookings"] + "tags": [ + "Admin - Bookings" + ] } }, "/api/v1/events/{eventId}/reviews": { @@ -11813,7 +12481,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -11847,7 +12518,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -11894,7 +12568,9 @@ } }, "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.", @@ -11999,7 +12675,9 @@ } ], "summary": "Create a review for a completed event", - "tags": ["Reviews"] + "tags": [ + "Reviews" + ] } }, "/api/v1/users/{userId}/reviews": { @@ -12071,7 +12749,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -12095,7 +12776,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -12142,7 +12826,9 @@ } }, "summary": "List published reviews for an organizer", - "tags": ["Reviews"] + "tags": [ + "Reviews" + ] } }, "/api/v1/reviews/{id}": { @@ -12249,7 +12935,9 @@ } ], "summary": "Update own review", - "tags": ["Reviews"] + "tags": [ + "Reviews" + ] } }, "/api/v1/reviews/{id}/host-reply": { @@ -12356,7 +13044,9 @@ } ], "summary": "Reply to a review as organizer", - "tags": ["Reviews"] + "tags": [ + "Reviews" + ] } }, "/api/v1/admin/reviews": { @@ -12418,7 +13108,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -12469,7 +13162,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -12481,7 +13177,9 @@ } ], "summary": "Paginated review moderation list", - "tags": ["Admin - Reviews"] + "tags": [ + "Admin - Reviews" + ] } }, "/api/v1/admin/reviews/{id}/hide": { @@ -12577,7 +13275,9 @@ } ], "summary": "Hide a review from public view", - "tags": ["Admin - Reviews"] + "tags": [ + "Admin - Reviews" + ] } }, "/api/v1/admin/reviews/{id}/restore": { @@ -12673,7 +13373,9 @@ } ], "summary": "Restore a hidden review to published", - "tags": ["Admin - Reviews"] + "tags": [ + "Admin - Reviews" + ] } }, "/api/v1/admin/reviews/{id}": { @@ -12709,7 +13411,9 @@ } ], "summary": "Soft-delete a review", - "tags": ["Admin - Reviews"] + "tags": [ + "Admin - Reviews" + ] } }, "/api/v1/conversations/me/unread-count": { @@ -12785,7 +13489,9 @@ } ], "summary": "Get total unread message count", - "tags": ["Chat"] + "tags": [ + "Chat" + ] } }, "/api/v1/conversations/me": { @@ -12847,7 +13553,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -12881,7 +13590,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -12943,7 +13655,9 @@ } ], "summary": "List my conversations", - "tags": ["Chat"] + "tags": [ + "Chat" + ] } }, "/api/v1/conversations/direct/{otherUserId}": { @@ -13040,7 +13754,9 @@ } ], "summary": "Get or create a direct conversation", - "tags": ["Chat"] + "tags": [ + "Chat" + ] } }, "/api/v1/conversations/direct/{otherUserId}/messages": { @@ -13147,7 +13863,9 @@ } ], "summary": "Send a direct message", - "tags": ["Chat"] + "tags": [ + "Chat" + ] } }, "/api/v1/conversations/{id}": { @@ -13244,7 +13962,9 @@ } ], "summary": "Get a conversation", - "tags": ["Chat"] + "tags": [ + "Chat" + ] } }, "/api/v1/conversations/{id}/participants": { @@ -13316,7 +14036,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -13340,7 +14063,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -13412,7 +14138,9 @@ } ], "summary": "List conversation participants", - "tags": ["Chat"] + "tags": [ + "Chat" + ] } }, "/api/v1/conversations/{id}/read": { @@ -13519,7 +14247,9 @@ } ], "summary": "Mark conversation as read", - "tags": ["Chat"] + "tags": [ + "Chat" + ] } }, "/api/v1/conversations/{id}/messages": { @@ -13601,7 +14331,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -13673,7 +14406,9 @@ } ], "summary": "List messages in a conversation", - "tags": ["Chat"] + "tags": [ + "Chat" + ] }, "post": { "description": "Sends a message in an existing conversation (typically an event group chat).", @@ -13778,7 +14513,9 @@ } ], "summary": "Send a message in a conversation", - "tags": ["Chat"] + "tags": [ + "Chat" + ] } }, "/api/v1/admin/conversations": { @@ -13837,7 +14574,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -13879,7 +14619,10 @@ "required": false, "in": "query", "schema": { - "enum": ["direct", "event_group"], + "enum": [ + "direct", + "event_group" + ], "type": "string" } } @@ -13904,7 +14647,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -13976,7 +14722,9 @@ } ], "summary": "List all conversations for read-only admin oversight", - "tags": ["Admin - Chat Oversight"] + "tags": [ + "Admin - Chat Oversight" + ] } }, "/api/v1/admin/conversations/{id}": { @@ -14071,7 +14819,9 @@ } ], "summary": "Get a conversation without joining or changing read state", - "tags": ["Admin - Chat Oversight"] + "tags": [ + "Admin - Chat Oversight" + ] } }, "/api/v1/admin/conversations/{id}/participants": { @@ -14139,7 +14889,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -14163,7 +14916,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -14235,7 +14991,9 @@ } ], "summary": "List conversation participants for admin oversight", - "tags": ["Admin - Chat Oversight"] + "tags": [ + "Admin - Chat Oversight" + ] } }, "/api/v1/admin/conversations/{id}/messages": { @@ -14314,7 +15072,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -14386,7 +15147,9 @@ } ], "summary": "Read message history without joining or changing read state", - "tags": ["Admin - Chat Oversight"] + "tags": [ + "Admin - Chat Oversight" + ] } }, "/api/v1/contact-messages": { @@ -14437,7 +15200,9 @@ } }, "summary": "Submit a public contact message", - "tags": ["Contact Messages"] + "tags": [ + "Contact Messages" + ] } }, "/api/v1/admin/contact-messages": { @@ -14499,7 +15264,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -14533,7 +15301,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -14605,7 +15376,9 @@ } ], "summary": "List contact form submissions", - "tags": ["Admin - Contact Messages"] + "tags": [ + "Admin - Contact Messages" + ] } }, "/api/v1/admin/contact-messages/{id}": { @@ -14702,7 +15475,9 @@ } ], "summary": "Get one contact message", - "tags": ["Admin - Contact Messages"] + "tags": [ + "Admin - Contact Messages" + ] } }, "/api/v1/admin/contact-messages/{id}/read": { @@ -14799,7 +15574,9 @@ } ], "summary": "Mark contact message as read", - "tags": ["Admin - Contact Messages"] + "tags": [ + "Admin - Contact Messages" + ] } }, "/api/v1/traffic-visits": { @@ -14853,7 +15630,9 @@ } }, "summary": "Record a unique attributed page visit", - "tags": ["Traffic Visits"] + "tags": [ + "Traffic Visits" + ] } }, "/api/v1/user-blocks": { @@ -14950,7 +15729,9 @@ } ], "summary": "Block another user", - "tags": ["User Blocks"] + "tags": [ + "User Blocks" + ] } }, "/api/v1/user-blocks/{blockedId}": { @@ -15038,7 +15819,9 @@ } ], "summary": "Unblock a user", - "tags": ["User Blocks"] + "tags": [ + "User Blocks" + ] } }, "/api/v1/user-blocks/me": { @@ -15100,7 +15883,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -15134,7 +15920,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -15186,7 +15975,9 @@ } ], "summary": "List users I have blocked", - "tags": ["User Blocks"] + "tags": [ + "User Blocks" + ] } }, "/api/v1/report-reasons": { @@ -15230,7 +16021,9 @@ } }, "summary": "List active report reasons", - "tags": ["User Reports"] + "tags": [ + "User Reports" + ] } }, "/api/v1/user-reports": { @@ -15317,7 +16110,9 @@ } ], "summary": "Report another user", - "tags": ["User Reports"] + "tags": [ + "User Reports" + ] } }, "/api/v1/admin/user-reports": { @@ -15379,7 +16174,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -15433,7 +16231,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -15505,7 +16306,9 @@ } ], "summary": "List user report review queue", - "tags": ["Admin - User Reports"] + "tags": [ + "Admin - User Reports" + ] } }, "/api/v1/admin/user-reports/{id}/review": { @@ -15603,7 +16406,9 @@ } ], "summary": "Mark user report as reviewed", - "tags": ["Admin - User Reports"] + "tags": [ + "Admin - User Reports" + ] } }, "/api/v1/admin/user-reports/{id}/dismiss": { @@ -15701,7 +16506,9 @@ } ], "summary": "Dismiss user report", - "tags": ["Admin - User Reports"] + "tags": [ + "Admin - User Reports" + ] } }, "/api/v1/admin/user-reports/{id}/block": { @@ -15799,7 +16606,9 @@ } ], "summary": "Block reported user on the reporter's behalf", - "tags": ["Admin - User Reports"] + "tags": [ + "Admin - User Reports" + ] } }, "/api/v1/support-tickets": { @@ -15894,7 +16703,9 @@ } ], "summary": "Create a support ticket", - "tags": ["Support Tickets"] + "tags": [ + "Support Tickets" + ] } }, "/api/v1/support-tickets/me": { @@ -15953,7 +16764,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -15977,7 +16791,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -15989,7 +16806,9 @@ } ], "summary": "List my support tickets", - "tags": ["Support Tickets"] + "tags": [ + "Support Tickets" + ] } }, "/api/v1/support-tickets/{id}/messages": { @@ -16048,7 +16867,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -16060,7 +16882,9 @@ } ], "summary": "List my support ticket messages", - "tags": ["Support Tickets"] + "tags": [ + "Support Tickets" + ] } }, "/api/v1/support-tickets/{id}": { @@ -16094,7 +16918,9 @@ } ], "summary": "Get my support ticket metadata", - "tags": ["Support Tickets"] + "tags": [ + "Support Tickets" + ] } }, "/api/v1/support-tickets/{id}/replies": { @@ -16138,7 +16964,9 @@ } ], "summary": "Reply to my support ticket", - "tags": ["Support Tickets"] + "tags": [ + "Support Tickets" + ] } }, "/api/v1/admin/support-tickets": { @@ -16197,7 +17025,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -16221,7 +17052,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -16293,7 +17127,9 @@ } ], "summary": "List the support queue", - "tags": ["Admin - Support Tickets"] + "tags": [ + "Admin - Support Tickets" + ] } }, "/api/v1/admin/support-tickets/{id}": { @@ -16327,7 +17163,9 @@ } ], "summary": "Get a support ticket thread", - "tags": ["Admin - Support Tickets"] + "tags": [ + "Admin - Support Tickets" + ] } }, "/api/v1/admin/support-tickets/{id}/replies": { @@ -16371,7 +17209,9 @@ } ], "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": { @@ -16415,7 +17255,9 @@ } ], "summary": "Change support ticket status", - "tags": ["Admin - Support Tickets"] + "tags": [ + "Admin - Support Tickets" + ] } }, "/api/v1/admin/reports/overview": { @@ -16501,7 +17343,9 @@ } ], "summary": "Platform-wide overview KPIs", - "tags": ["Admin - Reports"] + "tags": [ + "Admin - Reports" + ] } }, "/api/v1/admin/users/{id}/wallet/credit": { @@ -16606,7 +17450,9 @@ } ], "summary": "Manually credit a user wallet", - "tags": ["Admin - User Detail"] + "tags": [ + "Admin - User Detail" + ] } }, "/api/v1/admin/users/{id}/identity/attest": { @@ -16701,7 +17547,9 @@ } ], "summary": "Verify host identity without a user submission", - "tags": ["Admin - User Detail"] + "tags": [ + "Admin - User Detail" + ] } }, "/api/v1/admin/users/{id}/hosted-events": { @@ -16768,7 +17616,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -16792,7 +17643,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["events", "response"] + "required": [ + "events", + "response" + ] } } } @@ -16864,7 +17718,9 @@ } ], "summary": "Events this user has hosted (organizer_id = :id)", - "tags": ["Admin - User Detail"] + "tags": [ + "Admin - User Detail" + ] } }, "/api/v1/admin/users/{id}/bookings": { @@ -16931,7 +17787,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -16955,7 +17814,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["bookings", "response"] + "required": [ + "bookings", + "response" + ] } } } @@ -17027,7 +17889,9 @@ } ], "summary": "Bookings this user made as a guest", - "tags": ["Admin - User Detail"] + "tags": [ + "Admin - User Detail" + ] } }, "/api/v1/admin/users/{id}/payments": { @@ -17094,7 +17958,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -17118,7 +17985,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["payments", "response"] + "required": [ + "payments", + "response" + ] } } } @@ -17190,7 +18060,9 @@ } ], "summary": "Payments this user made", - "tags": ["Admin - User Detail"] + "tags": [ + "Admin - User Detail" + ] } }, "/api/v1/admin/users/{id}/reviews": { @@ -17257,7 +18129,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -17266,7 +18141,10 @@ "in": "query", "description": "written (default): authored by this user. received: on events this user organized.", "schema": { - "enum": ["written", "received"], + "enum": [ + "written", + "received" + ], "type": "string" } } @@ -17291,7 +18169,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["reviews", "response"] + "required": [ + "reviews", + "response" + ] } } } @@ -17363,7 +18244,9 @@ } ], "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": { @@ -17430,7 +18313,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -17439,7 +18325,10 @@ "in": "query", "description": "following (default): organizers this user follows. followers: users following this user.", "schema": { - "enum": ["following", "followers"], + "enum": [ + "following", + "followers" + ], "type": "string" } } @@ -17464,7 +18353,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["follows", "response"] + "required": [ + "follows", + "response" + ] } } } @@ -17536,7 +18428,9 @@ } ], "summary": "Organizers this user follows, or users following this user", - "tags": ["Admin - User Detail"] + "tags": [ + "Admin - User Detail" + ] } }, "/api/v1/admin/users/{id}/reports": { @@ -17603,7 +18497,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -17612,7 +18509,10 @@ "in": "query", "description": "filed (default): reports this user submitted. received: reports submitted about this user.", "schema": { - "enum": ["filed", "received"], + "enum": [ + "filed", + "received" + ], "type": "string" } } @@ -17637,7 +18537,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["reports", "response"] + "required": [ + "reports", + "response" + ] } } } @@ -17709,7 +18612,9 @@ } ], "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": { @@ -17776,7 +18681,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -17785,7 +18693,10 @@ "in": "query", "description": "blocking (default): users this user blocked. blockedBy: users who blocked this user.", "schema": { - "enum": ["blocking", "blockedBy"], + "enum": [ + "blocking", + "blockedBy" + ], "type": "string" } } @@ -17810,7 +18721,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["blocks", "response"] + "required": [ + "blocks", + "response" + ] } } } @@ -17882,7 +18796,9 @@ } ], "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": { @@ -17944,7 +18860,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -17996,7 +18915,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -18068,7 +18990,9 @@ } ], "summary": "List admin action audit trail", - "tags": ["Admin - Audit Logs"] + "tags": [ + "Admin - Audit Logs" + ] } }, "/api/v1/uploads": { @@ -18082,7 +19006,9 @@ "multipart/form-data": { "schema": { "type": "object", - "required": ["file"], + "required": [ + "file" + ], "properties": { "file": { "type": "string", @@ -18151,7 +19077,9 @@ } ], "summary": "Upload an image file", - "tags": ["Uploads"] + "tags": [ + "Uploads" + ] } }, "/api/v1/uploads/identity": { @@ -18164,7 +19092,9 @@ "multipart/form-data": { "schema": { "type": "object", - "required": ["file"], + "required": [ + "file" + ], "properties": { "file": { "type": "string", @@ -18193,7 +19123,9 @@ } ], "summary": "Upload a private identity document image", - "tags": ["Uploads"] + "tags": [ + "Uploads" + ] } }, "/api/v1/uploads/identity/{ownerId}/{filename}": { @@ -18248,7 +19180,9 @@ } ], "summary": "Read an authorized private identity document", - "tags": ["Uploads"] + "tags": [ + "Uploads" + ] } }, "/api/v1/uploads/internal": { @@ -18287,7 +19221,9 @@ "multipart/form-data": { "schema": { "type": "object", - "required": ["file"], + "required": [ + "file" + ], "properties": { "file": { "type": "string", @@ -18351,7 +19287,9 @@ } }, "summary": "Internal upload from trusted app instances", - "tags": ["Uploads"] + "tags": [ + "Uploads" + ] } }, "/api/v1/blog-articles/page": { @@ -18410,7 +19348,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } }, { @@ -18443,7 +19384,10 @@ "in": "query", "schema": { "type": "string", - "enum": ["true", "false"] + "enum": [ + "true", + "false" + ] } } ], @@ -18467,14 +19411,19 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } } }, "summary": "Paginated published blog articles", - "tags": ["Blog Articles"] + "tags": [ + "Blog Articles" + ] } }, "/api/v1/blog-articles/{slug}/related": { @@ -18515,7 +19464,9 @@ } }, "summary": "Related published articles by slug", - "tags": ["Blog Articles"] + "tags": [ + "Blog Articles" + ] } }, "/api/v1/blog-articles/{slug}": { @@ -18544,7 +19495,9 @@ } }, "summary": "Single published article by slug", - "tags": ["Blog Articles"] + "tags": [ + "Blog Articles" + ] } }, "/api/v1/admin/blog-articles": { @@ -18603,7 +19556,10 @@ "description": "0 = JSON list (default). 1 = Excel export (returns response.fileData).", "schema": { "type": "number", - "enum": [0, 1] + "enum": [ + 0, + 1 + ] } } ], @@ -18627,7 +19583,10 @@ "description": "Pagination metadata for the current query." } }, - "required": ["items", "response"] + "required": [ + "items", + "response" + ] } } } @@ -18639,7 +19598,9 @@ } ], "summary": "Paginated article management list", - "tags": ["Admin - Blog Articles"] + "tags": [ + "Admin - Blog Articles" + ] }, "post": { "operationId": "AdminBlogArticlesController_create", @@ -18672,7 +19633,9 @@ } ], "summary": "Create blog article", - "tags": ["Admin - Blog Articles"] + "tags": [ + "Admin - Blog Articles" + ] } }, "/api/v1/admin/blog-articles/{id}": { @@ -18706,7 +19669,9 @@ } ], "summary": "Single article by id (draft or published)", - "tags": ["Admin - Blog Articles"] + "tags": [ + "Admin - Blog Articles" + ] }, "patch": { "operationId": "AdminBlogArticlesController_update", @@ -18748,7 +19713,9 @@ } ], "summary": "Update blog article", - "tags": ["Admin - Blog Articles"] + "tags": [ + "Admin - Blog Articles" + ] }, "delete": { "operationId": "AdminBlogArticlesController_remove", @@ -18780,7 +19747,9 @@ } ], "summary": "Soft-delete blog article", - "tags": ["Admin - Blog Articles"] + "tags": [ + "Admin - Blog Articles" + ] } }, "/health": { @@ -18801,7 +19770,9 @@ } }, "summary": "Health check", - "tags": ["Health"] + "tags": [ + "Health" + ] } }, "/health/ready": { @@ -18832,7 +19803,9 @@ } }, "summary": "Readiness check", - "tags": ["Health"] + "tags": [ + "Health" + ] } } }, @@ -18968,7 +19941,9 @@ "format": "phone" } }, - "required": ["mobile"] + "required": [ + "mobile" + ] }, "OtpRequestResponseDto": { "type": "object", @@ -18976,7 +19951,10 @@ "purpose": { "type": "string", "description": "Whether this OTP flow is for an existing or new account.", - "enum": ["login", "register"], + "enum": [ + "login", + "register" + ], "example": "login" }, "expiresIn": { @@ -18990,7 +19968,11 @@ "example": false } }, - "required": ["purpose", "expiresIn", "alreadySent"] + "required": [ + "purpose", + "expiresIn", + "alreadySent" + ] }, "ApiErrorCode": { "type": "string", @@ -19073,7 +20055,9 @@ "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", @@ -19083,7 +20067,11 @@ } } }, - "required": ["success", "code", "message"] + "required": [ + "success", + "code", + "message" + ] }, "VerifyOtpDto": { "type": "object", @@ -19124,11 +20112,19 @@ "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": { @@ -19161,7 +20157,12 @@ ] } }, - "required": ["accessToken", "sessionId", "expiresAt", "status"] + "required": [ + "accessToken", + "sessionId", + "expiresAt", + "status" + ] }, "LoggedOutResponseDto": { "type": "object", @@ -19171,7 +20172,9 @@ "example": true } }, - "required": ["loggedOut"] + "required": [ + "loggedOut" + ] }, "SessionResponseDto": { "type": "object", @@ -19206,7 +20209,11 @@ "format": "date-time" } }, - "required": ["id", "createdAt", "expiresAt"] + "required": [ + "id", + "createdAt", + "expiresAt" + ] }, "RevokedResponseDto": { "type": "object", @@ -19216,16 +20223,30 @@ "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", @@ -19249,7 +20270,12 @@ "description": "Raw stored value (username, URL, or phone digits)." } }, - "required": ["channel", "label", "url", "value"] + "required": [ + "channel", + "label", + "url", + "value" + ] }, "PublicOrganizerResponseDto": { "type": "object", @@ -19386,11 +20412,25 @@ "type": "boolean" } }, - "required": ["id", "slug", "title", "posterUrl", "startsAt", "endsAt", "cityName", "isFree", "price", "isPast"] + "required": [ + "id", + "slug", + "title", + "posterUrl", + "startsAt", + "endsAt", + "cityName", + "isFree", + "price", + "isPast" + ] }, "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": { @@ -19489,7 +20529,14 @@ "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" + ] }, "OrganizerViewerStateResponseDto": { "type": "object", @@ -19504,16 +20551,27 @@ } } }, - "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": { @@ -19687,7 +20745,14 @@ "format": "date-time" } }, - "required": ["id", "subject", "status", "category", "lastMessageAt", "updatedAt"] + "required": [ + "id", + "subject", + "status", + "category", + "lastMessageAt", + "updatedAt" + ] }, "ProfileSummaryEventPreviewDto": { "type": "object", @@ -19720,7 +20785,14 @@ "format": "date-time" } }, - "required": ["id", "title", "slug", "posterUrl", "squarePosterUrl", "startsAt"] + "required": [ + "id", + "title", + "slug", + "posterUrl", + "squarePosterUrl", + "startsAt" + ] }, "ProfileSummaryRegisteredPreviewDto": { "type": "object", @@ -19758,7 +20830,15 @@ "description": "Booking id" } }, - "required": ["id", "title", "slug", "posterUrl", "squarePosterUrl", "startsAt", "bookingId"] + "required": [ + "id", + "title", + "slug", + "posterUrl", + "squarePosterUrl", + "startsAt", + "bookingId" + ] }, "UserProfileSummaryResponseDto": { "type": "object", @@ -19931,7 +21011,13 @@ "minimum": 1 } }, - "required": ["firstName", "lastName", "gender", "dateOfBirth", "cityId"] + "required": [ + "firstName", + "lastName", + "gender", + "dateOfBirth", + "cityId" + ] }, "AdminUserListItemDto": { "type": "object", @@ -20058,7 +21144,11 @@ "userType": { "type": "string", "description": "Derived admin-facing user type: admin staff, verified host, or guest.", - "enum": ["guest", "host", "admin"], + "enum": [ + "guest", + "host", + "admin" + ], "example": "host" }, "walletBalance": { @@ -20102,7 +21192,9 @@ "format": "phone" } }, - "required": ["mobile"] + "required": [ + "mobile" + ] }, "AdminUpdateUserDto": { "type": "object", @@ -20160,13 +21252,19 @@ "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" + ] } } }, @@ -20179,7 +21277,15 @@ }, "channel": { "type": "string", - "enum": ["instagram", "telegram", "twitter", "linkedin", "youtube", "website", "support_phone"] + "enum": [ + "instagram", + "telegram", + "twitter", + "linkedin", + "youtube", + "website", + "support_phone" + ] }, "value": { "type": "string" @@ -20199,14 +21305,30 @@ "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": { @@ -20223,7 +21345,10 @@ "example": 0 } }, - "required": ["channel", "value"] + "required": [ + "channel", + "value" + ] }, "UpdateUserContactLinkDto": { "type": "object", @@ -20251,7 +21376,9 @@ "example": true } }, - "required": ["success"] + "required": [ + "success" + ] }, "IdentityRejectionReasonResponseDto": { "type": "object", @@ -20283,7 +21410,12 @@ "minimum": 0 } }, - "required": ["id", "code", "label", "sortOrder"] + "required": [ + "id", + "code", + "label", + "sortOrder" + ] }, "RequestHostContractOtpDto": { "type": "object", @@ -20307,7 +21439,11 @@ "description": "Must match the currently published host cooperation contract version." } }, - "required": ["nationalCode", "contractAccepted", "contractVersion"] + "required": [ + "nationalCode", + "contractAccepted", + "contractVersion" + ] }, "HostContractOtpRequestedDto": { "type": "object", @@ -20328,7 +21464,11 @@ "example": "2026-08-22" } }, - "required": ["purpose", "expiresIn", "contractVersion"] + "required": [ + "purpose", + "expiresIn", + "contractVersion" + ] }, "ConfirmHostContractOtpDto": { "type": "object", @@ -20341,11 +21481,16 @@ "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": { @@ -20485,7 +21630,14 @@ "format": "date-time" } }, - "required": ["id", "userId", "status", "source", "createdAt", "updatedAt"] + "required": [ + "id", + "userId", + "status", + "source", + "createdAt", + "updatedAt" + ] }, "AdminIdentityVerificationResponseDto": { "type": "object", @@ -20633,7 +21785,15 @@ } } }, - "required": ["id", "userId", "status", "source", "createdAt", "updatedAt", "user"] + "required": [ + "id", + "userId", + "status", + "source", + "createdAt", + "updatedAt", + "user" + ] }, "RejectIdentityVerificationDto": { "type": "object", @@ -20654,7 +21814,12 @@ }, "NotificationStatus": { "type": "string", - "enum": ["pending", "sent", "failed", "cancelled"], + "enum": [ + "pending", + "sent", + "failed", + "cancelled" + ], "description": "Parent notification delivery status." }, "NotificationResponseDto": { @@ -20728,7 +21893,14 @@ "format": "date-time" } }, - "required": ["id", "category", "title", "body", "status", "createdAt"] + "required": [ + "id", + "category", + "title", + "body", + "status", + "createdAt" + ] }, "NotificationUnreadCountResponseDto": { "type": "object", @@ -20739,7 +21911,9 @@ "example": 2 } }, - "required": ["totalUnread"] + "required": [ + "totalUnread" + ] }, "NotificationMarkAllReadResponseDto": { "type": "object", @@ -20753,7 +21927,10 @@ "format": "date-time" } }, - "required": ["updatedCount", "readAt"] + "required": [ + "updatedCount", + "readAt" + ] }, "PushVapidPublicKeyResponseDto": { "type": "object", @@ -20769,7 +21946,10 @@ "example": true } }, - "required": ["publicKey", "enabled"] + "required": [ + "publicKey", + "enabled" + ] }, "PushDeliveryReceiptDto": { "type": "object", @@ -20789,7 +21969,10 @@ "eventType": { "type": "string", "description": "displayed = browser showed the notification, opened = user tapped it.", - "enum": ["displayed", "opened"], + "enum": [ + "displayed", + "opened" + ], "example": "opened" }, "receiptHmac": { @@ -20798,7 +21981,12 @@ "example": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" } }, - "required": ["notificationId", "subscriptionId", "eventType", "receiptHmac"] + "required": [ + "notificationId", + "subscriptionId", + "eventType", + "receiptHmac" + ] }, "PushDeliveryReceiptResponseDto": { "type": "object", @@ -20835,7 +22023,11 @@ "nullable": true } }, - "required": ["recorded", "notificationId", "subscriptionId"] + "required": [ + "recorded", + "notificationId", + "subscriptionId" + ] }, "PushSubscribeDto": { "type": "object", @@ -20858,7 +22050,11 @@ "description": "Browser user-agent string for debugging multi-device subscriptions." } }, - "required": ["endpoint", "p256dh", "auth"] + "required": [ + "endpoint", + "p256dh", + "auth" + ] }, "PushSubscriptionResponseDto": { "type": "object", @@ -20879,7 +22075,12 @@ "type": "string" } }, - "required": ["id", "userId", "endpoint", "createdAt"] + "required": [ + "id", + "userId", + "endpoint", + "createdAt" + ] }, "DeletedResponseDto": { "type": "object", @@ -20889,7 +22090,9 @@ "example": true } }, - "required": ["deleted"] + "required": [ + "deleted" + ] }, "DeletedCountResponseDto": { "type": "object", @@ -20900,11 +22103,18 @@ "minimum": 0 } }, - "required": ["deletedCount"] + "required": [ + "deletedCount" + ] }, "SmsStatus": { "type": "string", - "enum": ["pending", "sent", "failed", "delivered"], + "enum": [ + "pending", + "sent", + "failed", + "delivered" + ], "description": "SMS delivery status." }, "SmsRecipientDto": { @@ -20923,7 +22133,10 @@ "nullable": true } }, - "required": ["firstName", "lastName"] + "required": [ + "firstName", + "lastName" + ] }, "SmsMessageResponseDto": { "type": "object", @@ -21016,7 +22229,16 @@ ] } }, - "required": ["id", "notificationId", "userId", "mobile", "messageBody", "status", "createdAt", "updatedAt"] + "required": [ + "id", + "notificationId", + "userId", + "mobile", + "messageBody", + "status", + "createdAt", + "updatedAt" + ] }, "NotificationRuleResponseDto": { "type": "object", @@ -21036,7 +22258,11 @@ }, "channel": { "type": "string", - "enum": ["in_app", "sms", "both"] + "enum": [ + "in_app", + "sms", + "both" + ] }, "titleTemplate": { "type": "string" @@ -21090,7 +22316,11 @@ }, "channel": { "type": "string", - "enum": ["in_app", "sms", "both"] + "enum": [ + "in_app", + "sms", + "both" + ] }, "titleTemplate": { "type": "string" @@ -21110,7 +22340,9 @@ "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": { @@ -21119,11 +22351,18 @@ "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": { @@ -21159,7 +22398,9 @@ }, "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" @@ -21167,7 +22408,10 @@ }, "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" @@ -21180,7 +22424,9 @@ "maxLength": 10 } }, - "required": ["body"] + "required": [ + "body" + ] }, "AdminManualNotificationRecipientDto": { "type": "object", @@ -21215,7 +22461,11 @@ "format": "uuid" } }, - "required": ["userId", "mobile", "notificationId"] + "required": [ + "userId", + "mobile", + "notificationId" + ] }, "AdminManualNotificationResponseDto": { "type": "object", @@ -21234,7 +22484,9 @@ }, "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" @@ -21242,14 +22494,21 @@ }, "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", @@ -21267,7 +22526,10 @@ "nullable": true } }, - "required": ["firstName", "lastName"] + "required": [ + "firstName", + "lastName" + ] }, "AdminInAppNotificationResponseDto": { "type": "object", @@ -21341,7 +22603,16 @@ ] } }, - "required": ["id", "userId", "mobile", "category", "title", "body", "status", "createdAt"] + "required": [ + "id", + "userId", + "mobile", + "category", + "title", + "body", + "status", + "createdAt" + ] }, "PushDeliveryRecipientDto": { "type": "object", @@ -21359,7 +22630,10 @@ "nullable": true } }, - "required": ["firstName", "lastName"] + "required": [ + "firstName", + "lastName" + ] }, "PushDeliveryResponseDto": { "type": "object", @@ -21460,7 +22734,18 @@ ] } }, - "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", @@ -21581,7 +22866,10 @@ "example": "موسیقی" } }, - "required": ["id", "name"] + "required": [ + "id", + "name" + ] }, "CreateEventCategoryDto": { "type": "object", @@ -21656,7 +22944,10 @@ "nullable": true } }, - "required": ["name", "slug"] + "required": [ + "name", + "slug" + ] }, "UpdateEventCategoryDto": { "type": "object", @@ -21752,7 +23043,12 @@ "example": 51.389 } }, - "required": ["id", "name", "lat", "lng"] + "required": [ + "id", + "name", + "lat", + "lng" + ] }, "CityResponseDto": { "type": "object", @@ -21782,7 +23078,12 @@ "example": 51.389 } }, - "required": ["id", "provinceId", "name", "slug"] + "required": [ + "id", + "provinceId", + "name", + "slug" + ] }, "CityDetailResponseDto": { "type": "object", @@ -21820,11 +23121,26 @@ "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", @@ -21910,7 +23226,14 @@ }, "BookingStatus": { "type": "string", - "enum": ["pending_payment", "confirmed", "cancelled", "expired", "refunded", "no_show"] + "enum": [ + "pending_payment", + "confirmed", + "cancelled", + "expired", + "refunded", + "no_show" + ] }, "MyEventsGuestItemDto": { "type": "object", @@ -22014,11 +23337,20 @@ }, "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", @@ -22035,7 +23367,10 @@ }, "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." }, @@ -22061,7 +23396,10 @@ "properties": { "mediaType": { "type": "string", - "enum": ["image", "video"], + "enum": [ + "image", + "video" + ], "example": "image" }, "url": { @@ -22087,7 +23425,10 @@ "description": "Marks the 1:1 square card poster. Exactly one image per event." } }, - "required": ["mediaType", "url"] + "required": [ + "mediaType", + "url" + ] }, "CreateEventFaqDto": { "type": "object", @@ -22108,7 +23449,10 @@ "minimum": 0 } }, - "required": ["question", "answer"] + "required": [ + "question", + "answer" + ] }, "SubmitEventRevisionDto": { "type": "object", @@ -22225,7 +23569,9 @@ } } }, - "required": ["media"] + "required": [ + "media" + ] }, "EventRevisionResponseDto": { "type": "object", @@ -22238,7 +23584,12 @@ }, "status": { "type": "string", - "enum": ["pending", "approved", "rejected", "superseded"] + "enum": [ + "pending", + "approved", + "rejected", + "superseded" + ] }, "payload": { "type": "object", @@ -22261,7 +23612,14 @@ "type": "object" } }, - "required": ["id", "eventId", "status", "payload", "createdBy", "submittedAt"] + "required": [ + "id", + "eventId", + "status", + "payload", + "createdBy", + "submittedAt" + ] }, "CreateEventDto": { "type": "object", @@ -22405,7 +23763,10 @@ }, "addressVisibility": { "type": "string", - "enum": ["public", "attendees_only"] + "enum": [ + "public", + "attendees_only" + ] }, "generalArea": { "type": "string", @@ -22419,7 +23780,14 @@ "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", @@ -22432,7 +23800,10 @@ "minimum": 0 } }, - "required": ["placement", "priority"] + "required": [ + "placement", + "priority" + ] }, "EventResponseDto": { "type": "object", @@ -22768,7 +24139,15 @@ "minimum": 0 } }, - "required": ["grossAmount", "commissionAmount", "guestRefundAmount", "netAmount", "heldAmount", "availableAmount", "settledAmount"] + "required": [ + "grossAmount", + "commissionAmount", + "guestRefundAmount", + "netAmount", + "heldAmount", + "availableAmount", + "settledAmount" + ] }, "OwnerEventTrafficChannelInsightsDto": { "type": "object", @@ -22782,7 +24161,10 @@ "minimum": 0 } }, - "required": ["uniqueVisits", "confirmedBookings"] + "required": [ + "uniqueVisits", + "confirmedBookings" + ] }, "OwnerEventTrafficInsightsDto": { "type": "object", @@ -22794,7 +24176,10 @@ "$ref": "#/components/schemas/OwnerEventTrafficChannelInsightsDto" } }, - "required": ["instagram", "telegram"] + "required": [ + "instagram", + "telegram" + ] }, "OwnerEventInsightsResponseDto": { "type": "object", @@ -22813,11 +24198,19 @@ "$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", @@ -22860,7 +24253,17 @@ "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", @@ -22891,7 +24294,15 @@ "type": "string" } }, - "required": ["id", "eventId", "question", "answer", "sortOrder", "createdAt", "updatedAt"] + "required": [ + "id", + "eventId", + "question", + "answer", + "sortOrder", + "createdAt", + "updatedAt" + ] }, "EventManagementBootstrapResponseDto": { "type": "object", @@ -22924,7 +24335,15 @@ } } }, - "required": ["event", "insights", "categoryName", "cityName", "provinceName", "media", "faqs"] + "required": [ + "event", + "insights", + "categoryName", + "cityName", + "provinceName", + "media", + "faqs" + ] }, "EventAttendeeResponseDto": { "type": "object", @@ -22975,11 +24394,24 @@ "type": "string" } }, - "required": ["bookingId", "userId", "bookingCode", "status", "createdAt"] + "required": [ + "bookingId", + "userId", + "bookingCode", + "status", + "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", @@ -22991,7 +24423,9 @@ "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", @@ -23106,7 +24540,9 @@ } } }, - "required": ["eventIds"] + "required": [ + "eventIds" + ] }, "BookmarkBatchStatusResponseDto": { "type": "object", @@ -23119,7 +24555,9 @@ } } }, - "required": ["bookmarkedEventIds"] + "required": [ + "bookmarkedEventIds" + ] }, "BookmarkStateResponseDto": { "type": "object", @@ -23128,7 +24566,9 @@ "type": "boolean" } }, - "required": ["isBookmarked"] + "required": [ + "isBookmarked" + ] }, "DiscoveryEventOrganizerDto": { "type": "object", @@ -23142,7 +24582,10 @@ "nullable": true } }, - "required": ["firstName", "lastName"] + "required": [ + "firstName", + "lastName" + ] }, "DiscoveryEventResponseDto": { "type": "object", @@ -23389,7 +24832,11 @@ "type": "string" } }, - "required": ["id", "name", "slug"] + "required": [ + "id", + "name", + "slug" + ] }, "EventLandingCityDto": { "type": "object", @@ -23401,7 +24848,10 @@ "type": "string" } }, - "required": ["id", "name"] + "required": [ + "id", + "name" + ] }, "EventLandingOrganizerContactLinkDto": { "type": "object", @@ -23416,7 +24866,11 @@ "type": "string" } }, - "required": ["channel", "label", "url"] + "required": [ + "channel", + "label", + "url" + ] }, "EventLandingOrganizerDto": { "type": "object", @@ -23437,7 +24891,11 @@ }, "gender": { "type": "string", - "enum": ["male", "female", "other"], + "enum": [ + "male", + "female", + "other" + ], "nullable": true }, "bio": { @@ -23489,7 +24947,11 @@ }, "ReviewStatus": { "type": "string", - "enum": ["published", "hidden", "deleted"], + "enum": [ + "published", + "hidden", + "deleted" + ], "description": "Publication status." }, "ReviewUserSummaryDto": { @@ -23520,7 +24982,12 @@ "nullable": true } }, - "required": ["id", "firstName", "lastName", "avatarUrl"] + "required": [ + "id", + "firstName", + "lastName", + "avatarUrl" + ] }, "ReviewResponseDto": { "type": "object", @@ -23605,7 +25072,18 @@ ] } }, - "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", @@ -23647,7 +25125,17 @@ "type": "number" } }, - "required": ["event", "category", "city", "media", "faqs", "faqsTotal", "organizer", "reviews", "reviewsTotal"] + "required": [ + "event", + "category", + "city", + "media", + "faqs", + "faqsTotal", + "organizer", + "reviews", + "reviewsTotal" + ] }, "EventViewerBookingDto": { "type": "object", @@ -23658,10 +25146,20 @@ }, "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", @@ -23672,10 +25170,20 @@ }, "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", @@ -23690,7 +25198,11 @@ "type": "number" } }, - "required": ["address", "lat", "lng"] + "required": [ + "address", + "lat", + "lng" + ] }, "EventViewerStateResponseDto": { "type": "object", @@ -23740,7 +25252,11 @@ "description": "Empty when canJoinAudience is true.", "items": { "type": "string", - "enum": ["gender", "age", "city"] + "enum": [ + "gender", + "age", + "city" + ] } } }, @@ -23764,7 +25280,9 @@ "maxLength": 2000 } }, - "required": ["rejectionReason"] + "required": [ + "rejectionReason" + ] }, "AdminEventRelationSummaryDto": { "type": "object", @@ -23776,7 +25294,10 @@ "type": "string" } }, - "required": ["id", "name"] + "required": [ + "id", + "name" + ] }, "AdminEventOrganizerSummaryDto": { "type": "object", @@ -23798,7 +25319,9 @@ "nullable": true } }, - "required": ["id"] + "required": [ + "id" + ] }, "AdminEventResponseDto": { "type": "object", @@ -23840,7 +25363,18 @@ "$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" + ] }, "AdminCreateEventDto": { "type": "object", @@ -24240,7 +25774,9 @@ "maxLength": 2000 } }, - "required": ["rejectionReason"] + "required": [ + "rejectionReason" + ] }, "DiscoveryCategorySummaryDto": { "type": "object", @@ -24271,7 +25807,14 @@ "example": true } }, - "required": ["id", "name", "slug", "parentId", "sortOrder", "isActive"] + "required": [ + "id", + "name", + "slug", + "parentId", + "sortOrder", + "isActive" + ] }, "HomeFeedOrganizerDto": { "type": "object", @@ -24313,7 +25856,14 @@ "$ref": "#/components/schemas/HomeFeedOrganizerDto" } }, - "required": ["id", "title", "slug", "posterUrl", "squarePosterUrl", "organizer"] + "required": [ + "id", + "title", + "slug", + "posterUrl", + "squarePosterUrl", + "organizer" + ] }, "HomeCategoryPreviewEventDto": { "type": "object", @@ -24347,7 +25897,15 @@ "nullable": true } }, - "required": ["id", "title", "slug", "startsAt", "endsAt", "posterUrl", "squarePosterUrl"] + "required": [ + "id", + "title", + "slug", + "startsAt", + "endsAt", + "posterUrl", + "squarePosterUrl" + ] }, "HomeFeedCategoryPreviewGroupDto": { "type": "object", @@ -24363,7 +25921,10 @@ } } }, - "required": ["categoryId", "items"] + "required": [ + "categoryId", + "items" + ] }, "HomeCityPreviewEventDto": { "type": "object", @@ -24467,7 +26028,10 @@ } } }, - "required": ["cityId", "items"] + "required": [ + "cityId", + "items" + ] }, "HomeFeedResponseDto": { "type": "object", @@ -24491,7 +26055,11 @@ } } }, - "required": ["popular", "categoryPreviews", "cityPreviews"] + "required": [ + "popular", + "categoryPreviews", + "cityPreviews" + ] }, "DiscoveryBootstrapResponseDto": { "type": "object", @@ -24509,7 +26077,10 @@ } } }, - "required": ["categories", "cities"] + "required": [ + "categories", + "cities" + ] }, "FollowUserSummaryDto": { "type": "object", @@ -24543,7 +26114,10 @@ ] } }, - "required": ["firstName", "lastName"] + "required": [ + "firstName", + "lastName" + ] }, "FollowResponseDto": { "type": "object", @@ -24569,7 +26143,10 @@ "status": { "type": "string", "description": "Follow status.", - "enum": ["active", "muted"], + "enum": [ + "active", + "muted" + ], "example": "active" }, "notifyNewEvents": { @@ -24592,7 +26169,14 @@ ] } }, - "required": ["id", "followerId", "organizerId", "status", "notifyNewEvents", "createdAt"] + "required": [ + "id", + "followerId", + "organizerId", + "status", + "notifyNewEvents", + "createdAt" + ] }, "UpdateFollowSettingsDto": { "type": "object", @@ -24609,7 +26193,10 @@ "properties": { "mediaType": { "type": "string", - "enum": ["image", "video"] + "enum": [ + "image", + "video" + ] }, "url": { "type": "string" @@ -24662,7 +26249,11 @@ "nullable": true } }, - "required": ["userId", "firstName", "lastName"] + "required": [ + "userId", + "firstName", + "lastName" + ] }, "OrganizerGuestListResponseDto": { "type": "object", @@ -24684,7 +26275,10 @@ }, "kind": { "type": "string", - "enum": ["manual", "previous_attendees"] + "enum": [ + "manual", + "previous_attendees" + ] }, "createdAt": { "format": "date-time", @@ -24695,7 +26289,15 @@ "type": "string" } }, - "required": ["id", "organizerId", "name", "description", "kind", "createdAt", "updatedAt"] + "required": [ + "id", + "organizerId", + "name", + "description", + "kind", + "createdAt", + "updatedAt" + ] }, "CreateOrganizerGuestListDto": { "type": "object", @@ -24710,7 +26312,9 @@ "example": "مهمانان رویدادهای قبلی و مخاطبین میزبان" } }, - "required": ["name"] + "required": [ + "name" + ] }, "GuestListItemResponseDto": { "type": "object", @@ -24749,7 +26353,15 @@ "type": "string" } }, - "required": ["id", "listId", "firstName", "lastName", "userId", "note", "createdAt"] + "required": [ + "id", + "listId", + "firstName", + "lastName", + "userId", + "note", + "createdAt" + ] }, "AddGuestListItemDto": { "type": "object", @@ -24774,21 +26386,27 @@ "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", @@ -24811,7 +26429,11 @@ "nullable": true } }, - "required": ["userId", "firstName", "lastName"] + "required": [ + "userId", + "firstName", + "lastName" + ] }, "GuestListNotifyResultDto": { "type": "object", @@ -24829,7 +26451,11 @@ "type": "string" } }, - "required": ["sent", "skipped", "notifiedAt"] + "required": [ + "sent", + "skipped", + "notifiedAt" + ] }, "GuestListLinkResponseDto": { "type": "object", @@ -24855,7 +26481,12 @@ "type": "string" } }, - "required": ["eventId", "listId", "notifiedAt", "createdAt"] + "required": [ + "eventId", + "listId", + "notifiedAt", + "createdAt" + ] }, "LinkGuestListToEventDto": { "type": "object", @@ -24865,7 +26496,9 @@ "description": "Guest list to attach to the event" } }, - "required": ["listId"] + "required": [ + "listId" + ] }, "CreatePaymentDto": { "type": "object", @@ -24885,11 +26518,21 @@ }, "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", @@ -24902,7 +26545,10 @@ "format": "uri" } }, - "required": ["trackingId", "paymentUrl"] + "required": [ + "trackingId", + "paymentUrl" + ] }, "CreatePaymentResponseDto": { "type": "object", @@ -25046,7 +26692,9 @@ "example": "SAVE20AB" } }, - "required": ["code"] + "required": [ + "code" + ] }, "DiscountPreviewResponseDto": { "type": "object", @@ -25057,7 +26705,10 @@ }, "type": { "type": "string", - "enum": ["percent", "fixed"] + "enum": [ + "percent", + "fixed" + ] }, "value": { "type": "number", @@ -25076,7 +26727,14 @@ "example": 80000 } }, - "required": ["code", "type", "value", "listAmount", "discountAmount", "payableAmount"] + "required": [ + "code", + "type", + "value", + "listAmount", + "discountAmount", + "payableAmount" + ] }, "PaymentResponseDto": { "type": "object", @@ -25214,7 +26872,16 @@ "type": "string" } }, - "required": ["id", "paymentId", "userId", "bookingId", "eventId", "receiptCode", "snapshot", "issuedAt"] + "required": [ + "id", + "paymentId", + "userId", + "bookingId", + "eventId", + "receiptCode", + "snapshot", + "issuedAt" + ] }, "FinancialUserSummaryDto": { "type": "object", @@ -25235,7 +26902,10 @@ "nullable": true } }, - "required": ["id", "mobile"] + "required": [ + "id", + "mobile" + ] }, "AdminPaymentResponseDto": { "type": "object", @@ -25370,7 +27040,10 @@ }, "purpose": { "type": "string", - "enum": ["top_up", "booking_checkout"] + "enum": [ + "top_up", + "booking_checkout" + ] }, "amount": { "type": "number", @@ -25388,7 +27061,13 @@ }, "status": { "type": "string", - "enum": ["pending", "processing", "succeeded", "failed", "cancelled"] + "enum": [ + "pending", + "processing", + "succeeded", + "failed", + "cancelled" + ] }, "gatewayProvider": { "type": "string", @@ -25467,11 +27146,24 @@ "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", "organizer_earning", "withdrawal", "deposit"] + "enum": [ + "booking_payment", + "refund_guest_cancel", + "refund_event_cancel", + "organizer_earning", + "withdrawal", + "deposit" + ] }, "WalletTransactionResponseDto": { "type": "object", @@ -25524,7 +27216,16 @@ "type": "string" } }, - "required": ["id", "walletId", "userId", "transactionCode", "type", "amount", "balanceAfter", "createdAt"] + "required": [ + "id", + "walletId", + "userId", + "transactionCode", + "type", + "amount", + "balanceAfter", + "createdAt" + ] }, "CreateWalletDepositDto": { "type": "object", @@ -25535,7 +27236,9 @@ "minimum": 10000 } }, - "required": ["amount"] + "required": [ + "amount" + ] }, "CreateWalletDepositResponseDto": { "type": "object", @@ -25557,7 +27260,10 @@ }, "purpose": { "type": "string", - "enum": ["top_up", "booking_checkout"] + "enum": [ + "top_up", + "booking_checkout" + ] }, "amount": { "type": "number", @@ -25575,7 +27281,13 @@ }, "status": { "type": "string", - "enum": ["pending", "processing", "succeeded", "failed", "cancelled"] + "enum": [ + "pending", + "processing", + "succeeded", + "failed", + "cancelled" + ] }, "gatewayProvider": { "type": "string", @@ -25661,7 +27373,10 @@ }, "purpose": { "type": "string", - "enum": ["top_up", "booking_checkout"] + "enum": [ + "top_up", + "booking_checkout" + ] }, "amount": { "type": "number", @@ -25679,7 +27394,13 @@ }, "status": { "type": "string", - "enum": ["pending", "processing", "succeeded", "failed", "cancelled"] + "enum": [ + "pending", + "processing", + "succeeded", + "failed", + "cancelled" + ] }, "gatewayProvider": { "type": "string", @@ -25735,7 +27456,10 @@ "properties": { "status": { "type": "string", - "enum": ["succeeded", "failed"] + "enum": [ + "succeeded", + "failed" + ] }, "signature": { "type": "string" @@ -25760,7 +27484,12 @@ "type": "string" } }, - "required": ["status", "signature", "timestamp", "nonce"] + "required": [ + "status", + "signature", + "timestamp", + "nonce" + ] }, "CreateBankAccountDto": { "type": "object", @@ -25775,15 +27504,24 @@ "example": "0012345678" } }, - "required": ["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", @@ -25880,7 +27618,9 @@ "minLength": 3 } }, - "required": ["reason"] + "required": [ + "reason" + ] }, "CreateWithdrawalRequestDto": { "type": "object", @@ -25894,11 +27634,19 @@ "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", @@ -25915,7 +27663,9 @@ "nullable": true } }, - "required": ["mobile"] + "required": [ + "mobile" + ] }, "WithdrawalBankAccountSummaryDto": { "type": "object", @@ -25924,7 +27674,9 @@ "type": "string" } }, - "required": ["iban"] + "required": [ + "iban" + ] }, "WithdrawalResponseDto": { "type": "object", @@ -26032,7 +27784,10 @@ "description": "Optional admin note shown to the recipient" } }, - "required": ["trackingCode", "receiptUrl"] + "required": [ + "trackingCode", + "receiptUrl" + ] }, "RejectWithdrawalRequestDto": { "type": "object", @@ -26041,11 +27796,18 @@ "type": "string" } }, - "required": ["reason"] + "required": [ + "reason" + ] }, "OrganizerEarningStatus": { "type": "string", - "enum": ["held", "available", "settled", "cancelled"] + "enum": [ + "held", + "available", + "settled", + "cancelled" + ] }, "OrganizerEarningResponseDto": { "type": "object", @@ -26129,7 +27891,12 @@ }, "SettlementBatchStatus": { "type": "string", - "enum": ["pending", "processing", "completed", "failed"] + "enum": [ + "pending", + "processing", + "completed", + "failed" + ] }, "SettlementItemResponseDto": { "type": "object", @@ -26153,7 +27920,13 @@ "type": "string" } }, - "required": ["id", "amount", "organizerEarningId", "eventId", "eventTitle"] + "required": [ + "id", + "amount", + "organizerEarningId", + "eventId", + "eventTitle" + ] }, "SettlementResponseDto": { "type": "object", @@ -26259,7 +28032,12 @@ "example": "2026-07-07" } }, - "required": ["organizerId", "bankAccountId", "periodStart", "periodEnd"] + "required": [ + "organizerId", + "bankAccountId", + "periodStart", + "periodEnd" + ] }, "FailSettlementDto": { "type": "object", @@ -26268,14 +28046,19 @@ "type": "string" } }, - "required": ["reason"] + "required": [ + "reason" + ] }, "CreateDiscountCodesDto": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["percent", "fixed"], + "enum": [ + "percent", + "fixed" + ], "example": "percent" }, "value": { @@ -26315,12 +28098,19 @@ }, "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", @@ -26339,7 +28129,10 @@ }, "type": { "type": "string", - "enum": ["percent", "fixed"] + "enum": [ + "percent", + "fixed" + ] }, "value": { "type": "number", @@ -26347,7 +28140,10 @@ }, "bearer": { "type": "string", - "enum": ["organizer", "platform"] + "enum": [ + "organizer", + "platform" + ] }, "maxUses": { "type": "number", @@ -26418,7 +28214,10 @@ }, "codes": { "description": "The generated codes, ready to share", - "example": ["SAVE20AB", "SAVE20CD"], + "example": [ + "SAVE20AB", + "SAVE20CD" + ], "type": "array", "items": { "type": "string" @@ -26431,7 +28230,12 @@ } } }, - "required": ["batchId", "count", "codes", "items"] + "required": [ + "batchId", + "count", + "codes", + "items" + ] }, "DiscountCodePageDto": { "type": "object", @@ -26443,7 +28247,9 @@ } } }, - "required": ["items"] + "required": [ + "items" + ] }, "DiscountReportSummaryDto": { "type": "object", @@ -26472,7 +28278,13 @@ "example": 70000 } }, - "required": ["totalCodes", "totalRedemptions", "totalDiscountAmount", "totalPlatformAbsorbed", "totalOrganizerAbsorbed"] + "required": [ + "totalCodes", + "totalRedemptions", + "totalDiscountAmount", + "totalPlatformAbsorbed", + "totalOrganizerAbsorbed" + ] }, "DiscountRedemptionResponseDto": { "type": "object", @@ -26523,7 +28335,10 @@ }, "bearer": { "type": "string", - "enum": ["organizer", "platform"] + "enum": [ + "organizer", + "platform" + ] }, "platformAbsorbedAmount": { "type": "number", @@ -26564,7 +28379,9 @@ } } }, - "required": ["items"] + "required": [ + "items" + ] }, "DiscountManagementBootstrapResponseDto": { "type": "object", @@ -26579,7 +28396,11 @@ "$ref": "#/components/schemas/DiscountRedemptionPageDto" } }, - "required": ["codes", "report", "redemptions"] + "required": [ + "codes", + "report", + "redemptions" + ] }, "UpdateDiscountCodeDto": { "type": "object", @@ -26590,11 +28411,16 @@ "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": { @@ -26757,7 +28583,9 @@ "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", @@ -26774,7 +28602,14 @@ }, "WaitlistStatus": { "type": "string", - "enum": ["waiting", "notified", "accepted", "expired", "cancelled", "converted"] + "enum": [ + "waiting", + "notified", + "accepted", + "expired", + "cancelled", + "converted" + ] }, "WaitlistResponseDto": { "type": "object", @@ -26822,7 +28657,14 @@ "type": "string" } }, - "required": ["id", "eventId", "userId", "status", "createdAt", "updatedAt"] + "required": [ + "id", + "eventId", + "userId", + "status", + "createdAt", + "updatedAt" + ] }, "WaitlistAcceptedBookingDto": { "type": "object", @@ -26887,7 +28729,16 @@ "type": "string" } }, - "required": ["id", "eventId", "userId", "bookingCode", "status", "cancellationReason", "createdAt", "updatedAt"] + "required": [ + "id", + "eventId", + "userId", + "bookingCode", + "status", + "cancellationReason", + "createdAt", + "updatedAt" + ] }, "WaitlistAcceptResponseDto": { "type": "object", @@ -26900,7 +28751,10 @@ "$ref": "#/components/schemas/WaitlistAcceptedBookingDto" } }, - "required": ["waitlistEntryId", "booking"] + "required": [ + "waitlistEntryId", + "booking" + ] }, "AdminBookingEventDto": { "type": "object", @@ -26928,7 +28782,13 @@ "format": "uuid" } }, - "required": ["id", "title", "startsAt", "status", "organizerId"] + "required": [ + "id", + "title", + "startsAt", + "status", + "organizerId" + ] }, "AdminBookingUserDto": { "type": "object", @@ -26949,7 +28809,10 @@ "nullable": true } }, - "required": ["id", "mobile"] + "required": [ + "id", + "mobile" + ] }, "AdminBookingResponseDto": { "type": "object", @@ -27228,7 +29091,10 @@ "maxLength": 5000 } }, - "required": ["bookingId", "rating"] + "required": [ + "bookingId", + "rating" + ] }, "UpdateReviewDto": { "type": "object", @@ -27276,7 +29142,10 @@ "example": "Tehran hiking meetup" } }, - "required": ["id", "title"] + "required": [ + "id", + "title" + ] }, "AdminReviewResponseDto": { "type": "object", @@ -27369,7 +29238,19 @@ ] } }, - "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", @@ -27380,11 +29261,16 @@ "example": 3 } }, - "required": ["totalUnread"] + "required": [ + "totalUnread" + ] }, "ConversationType": { "type": "string", - "enum": ["event_group", "direct"], + "enum": [ + "event_group", + "direct" + ], "description": "Conversation type." }, "ConversationResponseDto": { @@ -27479,7 +29365,14 @@ "format": "date-time" } }, - "required": ["id", "type", "unreadCount", "memberCount", "messagingBlocked", "createdAt"] + "required": [ + "id", + "type", + "unreadCount", + "memberCount", + "messagingBlocked", + "createdAt" + ] }, "SendMessageDto": { "type": "object", @@ -27538,7 +29431,13 @@ "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", @@ -27620,7 +29519,12 @@ "format": "date-time" } }, - "required": ["id", "conversationId", "senderId", "createdAt"] + "required": [ + "id", + "conversationId", + "senderId", + "createdAt" + ] }, "ConversationParticipantResponseDto": { "type": "object", @@ -27667,7 +29571,10 @@ "format": "date-time" } }, - "required": ["userId", "joinedAt"] + "required": [ + "userId", + "joinedAt" + ] }, "MarkConversationReadDto": { "type": "object", @@ -27678,7 +29585,9 @@ "format": "uuid" } }, - "required": ["lastSeenMessageId"] + "required": [ + "lastSeenMessageId" + ] }, "AdminChatUserDto": { "type": "object", @@ -27726,7 +29635,12 @@ "format": "date-time" } }, - "required": ["userId", "mobile", "status", "joinedAt"] + "required": [ + "userId", + "mobile", + "status", + "joinedAt" + ] }, "AdminConversationResponseDto": { "type": "object", @@ -27780,7 +29694,13 @@ "format": "date-time" } }, - "required": ["id", "type", "participantPreview", "memberCount", "createdAt"] + "required": [ + "id", + "type", + "participantPreview", + "memberCount", + "createdAt" + ] }, "AdminMessageResponseDto": { "type": "object", @@ -27846,7 +29766,13 @@ "format": "date-time" } }, - "required": ["id", "conversationId", "senderId", "senderMobile", "createdAt"] + "required": [ + "id", + "conversationId", + "senderId", + "senderMobile", + "createdAt" + ] }, "CreateContactMessageDto": { "type": "object", @@ -27885,7 +29811,13 @@ "maxLength": 4096 } }, - "required": ["fullName", "mobile", "subject", "message", "arcaptchaToken"] + "required": [ + "fullName", + "mobile", + "subject", + "message", + "arcaptchaToken" + ] }, "ContactMessageResponseDto": { "type": "object", @@ -27937,14 +29869,24 @@ "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", @@ -27964,7 +29906,11 @@ "description": "Durable anonymous visitor id from the browser localStorage." } }, - "required": ["pageKind", "source", "visitorKey"] + "required": [ + "pageKind", + "source", + "visitorKey" + ] }, "CreateUserBlockDto": { "type": "object", @@ -27976,7 +29922,9 @@ "format": "uuid" } }, - "required": ["blockedId"] + "required": [ + "blockedId" + ] }, "UserBlockUserSummaryDto": { "type": "object", @@ -27994,7 +29942,10 @@ "nullable": true } }, - "required": ["firstName", "lastName"] + "required": [ + "firstName", + "lastName" + ] }, "UserBlockResponseDto": { "type": "object", @@ -28032,7 +29983,13 @@ ] } }, - "required": ["id", "blockerId", "blockedId", "createdAt", "blockedUser"] + "required": [ + "id", + "blockerId", + "blockedId", + "createdAt", + "blockedUser" + ] }, "ReportReasonResponseDto": { "type": "object", @@ -28064,7 +30021,12 @@ "minimum": 0 } }, - "required": ["id", "code", "label", "sortOrder"] + "required": [ + "id", + "code", + "label", + "sortOrder" + ] }, "CreateUserReportDto": { "type": "object", @@ -28094,11 +30056,17 @@ "format": "uuid" } }, - "required": ["reportedId"] + "required": [ + "reportedId" + ] }, "ReportStatus": { "type": "string", - "enum": ["pending", "reviewed", "dismissed"], + "enum": [ + "pending", + "reviewed", + "dismissed" + ], "description": "Report review status." }, "UserReportResponseDto": { @@ -28191,7 +30159,13 @@ "format": "date-time" } }, - "required": ["id", "reporterId", "reportedId", "status", "createdAt"] + "required": [ + "id", + "reporterId", + "reportedId", + "status", + "createdAt" + ] }, "UserReportUserSummaryDto": { "type": "object", @@ -28214,7 +30188,11 @@ "nullable": true } }, - "required": ["mobile", "firstName", "lastName"] + "required": [ + "mobile", + "firstName", + "lastName" + ] }, "AdminUserReportResponseDto": { "type": "object", @@ -28330,7 +30308,15 @@ ] } }, - "required": ["id", "reporterId", "reportedId", "status", "createdAt", "reporter", "reported"] + "required": [ + "id", + "reporterId", + "reportedId", + "status", + "createdAt", + "reporter", + "reported" + ] }, "AdminUserReportBlockResponseDto": { "type": "object", @@ -28352,7 +30338,10 @@ ] } }, - "required": ["report", "block"] + "required": [ + "report", + "block" + ] }, "CreateSupportTicketDto": { "type": "object", @@ -28363,12 +30352,24 @@ }, "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": { @@ -28376,7 +30377,12 @@ "example": "پرداخت انجام شد اما رزرو ثبت نشده است." } }, - "required": ["subject", "category", "priority", "message"] + "required": [ + "subject", + "category", + "priority", + "message" + ] }, "SupportTicketUserResponseDto": { "type": "object", @@ -28391,7 +30397,9 @@ "example": "علی رضایی" } }, - "required": ["mobile"] + "required": [ + "mobile" + ] }, "SupportTicketMessageResponseDto": { "type": "object", @@ -28415,7 +30423,13 @@ "format": "date-time" } }, - "required": ["id", "senderId", "body", "isAdmin", "createdAt"] + "required": [ + "id", + "senderId", + "body", + "isAdmin", + "createdAt" + ] }, "SupportTicketResponseDto": { "type": "object", @@ -28433,15 +30447,32 @@ }, "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", @@ -28466,7 +30497,18 @@ } } }, - "required": ["id", "userId", "subject", "category", "priority", "status", "lastMessageAt", "createdAt", "user", "messages"] + "required": [ + "id", + "userId", + "subject", + "category", + "priority", + "status", + "lastMessageAt", + "createdAt", + "user", + "messages" + ] }, "SupportTicketSummaryResponseDto": { "type": "object", @@ -28484,15 +30526,32 @@ }, "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", @@ -28521,7 +30580,17 @@ ] } }, - "required": ["id", "userId", "subject", "category", "priority", "status", "lastMessageAt", "createdAt", "user"] + "required": [ + "id", + "userId", + "subject", + "category", + "priority", + "status", + "lastMessageAt", + "createdAt", + "user" + ] }, "ReplySupportTicketDto": { "type": "object", @@ -28531,17 +30600,26 @@ "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", @@ -28563,7 +30641,12 @@ "example": 12 } }, - "required": ["total", "active", "pending", "suspended"] + "required": [ + "total", + "active", + "pending", + "suspended" + ] }, "EventStatusCountsDto": { "type": "object", @@ -28597,7 +30680,15 @@ "example": 210 } }, - "required": ["draft", "pending_review", "published", "full", "rejected", "cancelled", "completed"] + "required": [ + "draft", + "pending_review", + "published", + "full", + "rejected", + "cancelled", + "completed" + ] }, "EventCountsDto": { "type": "object", @@ -28620,7 +30711,12 @@ "$ref": "#/components/schemas/EventStatusCountsDto" } }, - "required": ["total", "active", "totalHeld", "byStatus"] + "required": [ + "total", + "active", + "totalHeld", + "byStatus" + ] }, "BookingStatusCountsDto": { "type": "object", @@ -28650,7 +30746,14 @@ "example": 25 } }, - "required": ["pending_payment", "confirmed", "cancelled", "expired", "refunded", "no_show"] + "required": [ + "pending_payment", + "confirmed", + "cancelled", + "expired", + "refunded", + "no_show" + ] }, "BookingCountsDto": { "type": "object", @@ -28663,7 +30766,10 @@ "$ref": "#/components/schemas/BookingStatusCountsDto" } }, - "required": ["total", "byStatus"] + "required": [ + "total", + "byStatus" + ] }, "IdentityVerificationCountsDto": { "type": "object", @@ -28685,7 +30791,12 @@ "example": 29 } }, - "required": ["none", "pending", "verified", "rejected"] + "required": [ + "none", + "pending", + "verified", + "rejected" + ] }, "FinancialTotalsDto": { "type": "object", @@ -28701,7 +30812,10 @@ "description": "Sum of wallets.balance across all wallets (Toman, as a string)." } }, - "required": ["totalCommissionCollected", "totalWalletBalance"] + "required": [ + "totalCommissionCollected", + "totalWalletBalance" + ] }, "AdminReportsOverviewDto": { "type": "object", @@ -28722,7 +30836,13 @@ "$ref": "#/components/schemas/FinancialTotalsDto" } }, - "required": ["users", "events", "bookings", "identityVerifications", "financial"] + "required": [ + "users", + "events", + "bookings", + "identityVerifications", + "financial" + ] }, "AdminUserContactLinkDto": { "type": "object", @@ -28755,11 +30875,22 @@ "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", @@ -28893,7 +31024,12 @@ }, "identityStatus": { "type": "string", - "enum": ["none", "pending", "verified", "rejected"] + "enum": [ + "none", + "pending", + "verified", + "rejected" + ] }, "identityVerifiedAt": { "type": "string", @@ -28967,7 +31103,9 @@ "description": "Optional admin note (Toman credit reason)" } }, - "required": ["amount"] + "required": [ + "amount" + ] }, "AdminCreditWalletResponseDto": { "type": "object", @@ -28980,7 +31118,10 @@ "$ref": "#/components/schemas/WalletTransactionResponseDto" } }, - "required": ["walletBalance", "transaction"] + "required": [ + "walletBalance", + "transaction" + ] }, "AdminUserHostedEventDto": { "type": "object", @@ -29024,7 +31165,18 @@ "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", @@ -29070,7 +31222,14 @@ "type": "string" } }, - "required": ["id", "bookingCode", "status", "eventId", "eventTitle", "createdAt"] + "required": [ + "id", + "bookingCode", + "status", + "eventId", + "eventTitle", + "createdAt" + ] }, "AdminUserPaymentDto": { "type": "object", @@ -29187,7 +31346,15 @@ "type": "string" } }, - "required": ["id", "rating", "status", "eventId", "eventTitle", "authorId", "createdAt"] + "required": [ + "id", + "rating", + "status", + "eventId", + "eventTitle", + "authorId", + "createdAt" + ] }, "AdminUserFollowDto": { "type": "object", @@ -29215,7 +31382,13 @@ "type": "string" } }, - "required": ["id", "userId", "mobile", "notifyNewEvents", "createdAt"] + "required": [ + "id", + "userId", + "mobile", + "notifyNewEvents", + "createdAt" + ] }, "AdminUserReportDto": { "type": "object", @@ -29255,7 +31428,13 @@ "type": "string" } }, - "required": ["id", "status", "otherUserId", "otherUserMobile", "createdAt"] + "required": [ + "id", + "status", + "otherUserId", + "otherUserMobile", + "createdAt" + ] }, "AdminUserBlockDto": { "type": "object", @@ -29280,7 +31459,12 @@ "type": "string" } }, - "required": ["id", "otherUserId", "otherUserMobile", "createdAt"] + "required": [ + "id", + "otherUserId", + "otherUserMobile", + "createdAt" + ] }, "AdminAuditLogResponseDto": { "type": "object", @@ -29336,7 +31520,14 @@ "format": "date-time" } }, - "required": ["id", "method", "path", "params", "statusCode", "createdAt"] + "required": [ + "id", + "method", + "path", + "params", + "statusCode", + "createdAt" + ] }, "UploadFileResponseDto": { "type": "object", @@ -29352,7 +31543,10 @@ "example": "http://localhost:3000/uploads/files/550e8400-e29b-41d4-a716-446655440000.jpg" } }, - "required": ["id", "url"] + "required": [ + "id", + "url" + ] }, "BlogArticleCitySummaryDto": { "type": "object", @@ -29370,7 +31564,11 @@ "example": "اهواز" } }, - "required": ["id", "slug", "name"] + "required": [ + "id", + "slug", + "name" + ] }, "BlogArticleEventCategorySummaryDto": { "type": "object", @@ -29388,7 +31586,11 @@ "example": "عکاسی" } }, - "required": ["id", "slug", "name"] + "required": [ + "id", + "slug", + "name" + ] }, "BlogArticleSummaryResponseDto": { "type": "object", @@ -29618,7 +31820,12 @@ }, "categorySlug": { "type": "string", - "enum": ["attendee-guide", "hosting", "city-guides", "event-selection"], + "enum": [ + "attendee-guide", + "hosting", + "city-guides", + "event-selection" + ], "example": "city-guides" }, "categoryName": { @@ -29656,7 +31863,14 @@ "format": "date-time" } }, - "required": ["slug", "title", "excerpt", "categorySlug", "categoryName", "bodyHtml"] + "required": [ + "slug", + "title", + "excerpt", + "categorySlug", + "categoryName", + "bodyHtml" + ] }, "UpdateBlogArticleDto": { "type": "object", @@ -29685,7 +31899,12 @@ }, "categorySlug": { "type": "string", - "enum": ["attendee-guide", "hosting", "city-guides", "event-selection"], + "enum": [ + "attendee-guide", + "hosting", + "city-guides", + "event-selection" + ], "example": "city-guides" }, "categoryName": { @@ -29733,7 +31952,9 @@ "example": "ok" } }, - "required": ["status"] + "required": [ + "status" + ] } } } diff --git a/texts/events.ts b/texts/events.ts index c1d3708..f63ea5c 100644 --- a/texts/events.ts +++ b/texts/events.ts @@ -28,7 +28,7 @@ export const events = { hostProfileAria: 'پروفایل {name}', wizardStep2Label: 'زمان و مکان', wizardStep2Hint: 'زمان‌بندی و محل برگزاری رویداد', - wizardStep3Hint: 'ظرفیت، قیمت و جریمه لغو', + wizardStep3Hint: 'ظرفیت، قیمت و هزینهٔ کنسلی', postersRequiredTitle: 'هر دو پوستر الزامی است', postersRequiredDescription: 'پوستر عمودی (۹:۱۶) و پوستر مربعی (۱:۱) را آپلود کنید و سپس پیش‌نویس را ذخیره کنید.', mediaSectionDescription: 'پوستر عمودی و پوستر مربعی هر دو الزامی‌اند. تصاویر گالری اختیاری‌اند و کراپ نمی‌شوند.', @@ -114,7 +114,7 @@ export const events = { priceTomanLabel: 'قیمت (تومان)', autoCreateGroupAfterEndLabel: 'ساخت خودکار گروه چت بعد از پایان رویداد', sendReviewSmsAfterEndLabel: 'ارسال پیامک درخواست نظر بعد از پایان رویداد', - editLockedWithBookings: 'این رویداد {count} رزرو فعال دارد؛ زمان، مکان، قیمت، جریمه لغو، محدودیت جنسی/سنی و تنظیمات رفتاری قفل شده‌اند.', + editLockedWithBookings: 'این رویداد {count} رزرو فعال دارد؛ زمان، مکان، قیمت، هزینهٔ کنسلی، محدودیت جنسی/سنی و تنظیمات رفتاری قفل شده‌اند.', editMediaCardTitle: 'پوستر و تصاویر', editFaqCardTitle: 'سوالات متداول', reservedCapacityEditHint: 'ظرفیت رزرو شده: {count} نفر (مهمان‌های خارج از قبیله). تغییر این عدد از صفحه مدیریت ایونت انجام می‌شود.', diff --git a/texts/validation.ts b/texts/validation.ts index 58ca95e..218c348 100644 --- a/texts/validation.ts +++ b/texts/validation.ts @@ -30,7 +30,7 @@ export const validation = { }, eventWizard: { endAfterStart: 'زمان پایان باید بعد از زمان شروع باشد', - cancelPenaltyOrder: 'درصد جریمه باید با نزدیک‌شدن به زمان رویداد بیشتر یا مساوی شود', + cancelPenaltyOrder: 'درصد هزینهٔ کنسلی باید با نزدیک‌شدن به زمان رویداد بیشتر یا مساوی شود', faqQuestionRequired: 'سوال را وارد کنید', faqAnswerRequired: 'پاسخ را وارد کنید', },