{"openapi":"3.0.0","paths":{"/api/health":{"get":{"operationId":"HealthController_check","parameters":[],"responses":{"200":{"description":"The Health Check is successful","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"ok"},"info":{"type":"object","example":{"database":{"status":"up"}},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true},"nullable":true},"error":{"type":"object","example":{},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true},"nullable":true},"details":{"type":"object","example":{"database":{"status":"up"}},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true}}}}}}},"503":{"description":"The Health Check is not successful","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"error"},"info":{"type":"object","example":{"database":{"status":"up"}},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true},"nullable":true},"error":{"type":"object","example":{"redis":{"status":"down","message":"Could not connect"}},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true},"nullable":true},"details":{"type":"object","example":{"database":{"status":"up"},"redis":{"status":"down","message":"Could not connect"}},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true}}}}}}}},"tags":["Health"]}},"/api/health/liveness":{"get":{"operationId":"HealthController_liveness","parameters":[],"responses":{"200":{"description":""}},"tags":["Health"]}},"/api/health/payments":{"get":{"operationId":"HealthController_payments","parameters":[],"responses":{"200":{"description":""}},"tags":["Health"]}},"/api/admin/payments/overview":{"get":{"operationId":"AdminPaymentsController_overview","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — payments dashboard snapshot (platform P&L, courier prepaid accounts, reserve health, provider status)","tags":["admin-payments"]}},"/api/admin/payments/accounts":{"get":{"operationId":"AdminPaymentsController_listAccounts","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — list courier prepaid accounts (balance, auto-topup, provider)","tags":["admin-payments"]}},"/api/admin/payments/accounts/{id}/transactions":{"get":{"operationId":"AdminPaymentsController_accountTransactions","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"pageSize","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — list prepaid-account transactions (debits, top-ups, refunds)","tags":["admin-payments"]}},"/api/admin/payments/accounts/{id}":{"post":{"operationId":"AdminPaymentsController_updateAccount","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — update courier prepaid account settings (reserve, auto-topup, bank, provider)","tags":["admin-payments"]}},"/api/admin/payments/ledger":{"get":{"operationId":"AdminPaymentsController_listLedger","parameters":[{"name":"courierId","required":true,"in":"query","schema":{"type":"string"}},{"name":"merchantId","required":true,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"pageSize","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — browse the cost ledger (every shipment's 3-way split: platform / courier / franchisee)","tags":["admin-payments"]}},"/api/admin/payments/payouts":{"get":{"operationId":"AdminPaymentsController_listPayouts","parameters":[{"name":"status","required":true,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"pageSize","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — list payout runs (status: queued, awaiting_approval, processing, succeeded, failed)","tags":["admin-payments"]}},"/api/admin/payments/payouts/{id}/approve":{"post":{"operationId":"AdminPaymentsController_approvePayout","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — approve a payout and fire it to the provider immediately","tags":["admin-payments"]}},"/api/admin/payments/payouts/manual":{"post":{"operationId":"AdminPaymentsController_manualPayout","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — queue a manual payout to a prepaid account (bypass auto-topup)","tags":["admin-payments"]}},"/api/admin/payments/reserve/snapshot":{"post":{"operationId":"AdminPaymentsController_refreshReserve","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — take a fresh reserve-health snapshot now","tags":["admin-payments"]}},"/api/admin/payments/payouts/reconcile":{"post":{"operationId":"AdminPaymentsController_reconcileNow","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — force-poll every in-flight payout for status updates","tags":["admin-payments"]}},"/api/admin/merchants/{id}/postpaid/approve":{"post":{"operationId":"AdminPostpaidController_approve","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApprovePostpaidDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-postpaid"]}},"/api/admin/merchants/{id}/postpaid/revoke":{"post":{"operationId":"AdminPostpaidController_revoke","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevokePostpaidDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-postpaid"]}},"/api/admin/postpaid/outstanding":{"get":{"operationId":"AdminPostpaidController_outstanding","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-postpaid"]}},"/api/admin/postpaid/applications":{"get":{"operationId":"AdminPostpaidController_applications","parameters":[{"name":"status","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-postpaid"]}},"/api/admin/postpaid/applications/{id}/approve":{"post":{"operationId":"AdminPostpaidController_approveApplication","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApproveApplicationDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-postpaid"]}},"/api/admin/postpaid/applications/{id}/reject":{"post":{"operationId":"AdminPostpaidController_rejectApplication","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RejectApplicationDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-postpaid"]}},"/api/admin/postpaid/settlements":{"get":{"operationId":"AdminPostpaidController_settlements","parameters":[{"name":"limit","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-postpaid"]}},"/api/admin/merchants/{id}/postpaid/settle":{"post":{"operationId":"AdminPostpaidController_settleOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-postpaid"]}},"/api/admin/ops/cases":{"get":{"operationId":"AdminOpsCaseController_list","parameters":[{"name":"status","required":true,"in":"query","schema":{"type":"string"}},{"name":"caseType","required":true,"in":"query","schema":{"type":"string"}},{"name":"severity","required":true,"in":"query","schema":{"type":"string"}},{"name":"level","required":true,"in":"query","schema":{"type":"string"}},{"name":"slaBreached","required":true,"in":"query","schema":{"type":"string"}},{"name":"merchantId","required":true,"in":"query","schema":{"type":"string"}},{"name":"assignedToUserId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-ops-cases"]}},"/api/admin/ops/cases/summary":{"get":{"operationId":"AdminOpsCaseController_summary","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-ops-cases"]}},"/api/admin/ops/cases/{id}":{"get":{"operationId":"AdminOpsCaseController_detail","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-ops-cases"]}},"/api/admin/ops/cases/{id}/status":{"patch":{"operationId":"AdminOpsCaseController_transition","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-ops-cases"]}},"/api/admin/ops/cases/{id}/assign":{"patch":{"operationId":"AdminOpsCaseController_assign","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-ops-cases"]}},"/api/admin/ops/cases/{id}/notes":{"post":{"operationId":"AdminOpsCaseController_addNote","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-ops-cases"]}},"/api/me/notifications":{"get":{"operationId":"MeNotificationsController_list","parameters":[{"name":"onlyUnread","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["notifications"]}},"/api/me/notifications/unread-count":{"get":{"operationId":"MeNotificationsController_unreadCount","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["notifications"]}},"/api/me/notifications/{id}/read":{"post":{"operationId":"MeNotificationsController_markRead","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["notifications"]}},"/api/me/notifications/mark-all-read":{"post":{"operationId":"MeNotificationsController_markAllRead","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["notifications"]}},"/api/me/notifications/{id}/dismiss":{"post":{"operationId":"MeNotificationsController_dismiss","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["notifications"]}},"/api/public/status":{"get":{"description":"Powers the /status page. Read-only, cheap, no PII; polled every 30 seconds.","operationId":"PublicStatusController_status","parameters":[],"responses":{"200":{"description":""}},"summary":"Public — fleet health snapshot (API, database, Redis, last DB backup, uptime)","tags":["status"]}},"/api/auth/signup/request-otp":{"post":{"operationId":"IdentityController_requestSignupOtp","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestSignupOtpDto"}}}},"responses":{"200":{"description":""}},"summary":"Send a 6-digit verification code to the given email","tags":["auth"]}},"/api/auth/signup/verify-otp":{"post":{"operationId":"IdentityController_verifySignupOtp","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifySignupOtpDto"}}}},"responses":{"200":{"description":""}},"summary":"Verify a 6-digit code without creating the account yet","tags":["auth"]}},"/api/auth/signup":{"post":{"operationId":"IdentityController_signup","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupDto"}}}},"responses":{"201":{"description":""}},"summary":"Create a new user, optionally with a new organization","tags":["auth"]}},"/api/auth/login":{"post":{"operationId":"IdentityController_login","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginDto"}}}},"responses":{"200":{"description":""}},"summary":"Sign in with email + password (+ MFA code if enabled)","tags":["auth"]}},"/api/auth/refresh":{"post":{"operationId":"IdentityController_refresh","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshDto"}}}},"responses":{"200":{"description":""}},"tags":["auth"]}},"/api/auth/forgot-password":{"post":{"operationId":"IdentityController_forgotPassword","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForgotPasswordDto"}}}},"responses":{"204":{"description":""}},"summary":"Request a password reset email (always 204, never reveals user existence)","tags":["auth"]}},"/api/auth/reset-password":{"post":{"operationId":"IdentityController_resetPassword","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetPasswordDto"}}}},"responses":{"204":{"description":""}},"tags":["auth"]}},"/api/auth/verify-email":{"post":{"operationId":"IdentityController_verifyEmail","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyEmailDto"}}}},"responses":{"200":{"description":""}},"tags":["auth"]}},"/api/auth/me":{"get":{"operationId":"IdentityController_me","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["auth"]},"patch":{"operationId":"IdentityController_updateProfile","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProfileDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["auth"]}},"/api/auth/me/change-password":{"post":{"operationId":"IdentityController_changePassword","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePasswordDto"}}}},"responses":{"204":{"description":""}},"security":[{"bearer":[]}],"tags":["auth"]}},"/api/auth/me/resend-verification":{"post":{"operationId":"IdentityController_resendVerification","parameters":[],"responses":{"204":{"description":""}},"security":[{"bearer":[]}],"tags":["auth"]}},"/api/auth/logout":{"post":{"operationId":"IdentityController_logout","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshDto"}}}},"responses":{"204":{"description":""}},"security":[{"bearer":[]}],"tags":["auth"]}},"/api/auth/sessions":{"get":{"operationId":"IdentityController_listSessions","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["auth"]}},"/api/auth/sessions/{id}":{"delete":{"operationId":"IdentityController_revokeSession","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"bearer":[]}],"tags":["auth"]}},"/api/auth/mfa/enroll":{"post":{"operationId":"IdentityController_beginMfaEnrollment","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["auth"]}},"/api/auth/mfa/confirm":{"post":{"operationId":"IdentityController_confirmMfaEnrollment","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrollMfaConfirmDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["auth"]}},"/api/auth/mfa":{"delete":{"operationId":"IdentityController_disableMfa","parameters":[],"responses":{"204":{"description":""}},"security":[{"bearer":[]}],"tags":["auth"]}},"/api/auth/orgs/{orgId}/invitations":{"post":{"operationId":"IdentityController_invite","parameters":[{"name":"orgId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteMemberDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["auth"]},"get":{"operationId":"IdentityController_listInvitations","parameters":[{"name":"orgId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["auth"]}},"/api/auth/orgs/{orgId}/invitations/{id}":{"delete":{"operationId":"IdentityController_revokeInvitation","parameters":[{"name":"orgId","required":true,"in":"path","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"bearer":[]}],"tags":["auth"]}},"/api/auth/invitations/accept":{"post":{"operationId":"IdentityController_acceptInvitation","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptInviteDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["auth"]}},"/api/auth/orgs/{orgId}/members":{"get":{"operationId":"IdentityController_listMembers","parameters":[{"name":"orgId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["auth"]}},"/api/auth/orgs/{orgId}/members/{membershipId}":{"delete":{"operationId":"IdentityController_removeMember","parameters":[{"name":"orgId","required":true,"in":"path","schema":{"type":"string"}},{"name":"membershipId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"bearer":[]}],"tags":["auth"]}},"/api/api/public/sub-merchant-invites/{token}":{"get":{"operationId":"FranchiseController_lookupInvite","parameters":[{"name":"token","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Public — resolve a sub-merchant invite token (used by signup to pre-fill franchisee context)","tags":["franchise"]}},"/api/api/franchise/sub-merchants":{"get":{"operationId":"FranchiseController_listSubMerchants","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Franchisee — list sub-merchants under this franchisee org","tags":["franchise"]}},"/api/api/franchise/earnings":{"get":{"operationId":"FranchiseController_earnings","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Franchisee — commission earnings summary (lifetime + pending)","tags":["franchise"]}},"/api/api/franchise/dashboard":{"get":{"operationId":"FranchiseController_dashboard","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Franchisee dashboard — aggregated volume, revenue, and commissions","tags":["franchise"]}},"/api/api/franchise/sub-merchants/{orgId}":{"get":{"operationId":"FranchiseController_subMerchantDetail","parameters":[{"name":"orgId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Franchisee — drill-down into one sub-merchant","tags":["franchise"]}},"/api/api/franchise/sub-merchant-invites":{"post":{"operationId":"FranchiseController_createInvite","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Franchisee — issue a sub-merchant invite with optional markup suggestion","tags":["franchise"]},"get":{"operationId":"FranchiseController_listInvites","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Franchisee — list issued sub-merchant invites","tags":["franchise"]}},"/api/api/franchise/sub-merchant-invites/{id}":{"delete":{"operationId":"FranchiseController_revokeInvite","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Franchisee — revoke an outstanding sub-merchant invite","tags":["franchise"]}},"/api/api/franchise/overrides":{"get":{"operationId":"FranchiseController_listOverrides","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Franchisee — list active rate card overrides (markup rules)","tags":["franchise"]},"put":{"operationId":"FranchiseController_upsertOverride","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Franchisee — upsert a rate-card markup (percent BPS or flat minor units)","tags":["franchise"]}},"/api/api/franchise/overrides/{id}":{"delete":{"operationId":"FranchiseController_deactivateOverride","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Franchisee — deactivate a rate card override","tags":["franchise"]}},"/api/api/franchise/commission-runs":{"get":{"operationId":"FranchiseController_listCommissionRuns","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Franchisee — list commission run history for this franchisee","tags":["franchise"]}},"/api/api/admin/franchise/commission-runs/recompute":{"post":{"operationId":"FranchiseController_recomputeAll","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — recompute commission runs across every franchisee (manual trigger)","tags":["franchise"]}},"/api/merchants/me/pickup-locations":{"get":{"operationId":"PickupLocationController_list","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["pickup-locations"]},"post":{"operationId":"PickupLocationController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePickupLocationDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["pickup-locations"]}},"/api/merchants/me/pickup-locations/serviceability":{"get":{"operationId":"PickupLocationController_checkServiceability","parameters":[{"name":"pincode","required":true,"in":"query","schema":{"example":"110001","type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["pickup-locations"]}},"/api/merchants/me/pickup-locations/{id}":{"patch":{"operationId":"PickupLocationController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePickupLocationDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["pickup-locations"]},"delete":{"operationId":"PickupLocationController_delete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"bearer":[]}],"tags":["pickup-locations"]}},"/api/merchants/me/pickup-locations/{id}/set-primary":{"post":{"operationId":"PickupLocationController_setPrimary","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["pickup-locations"]}},"/api/admin/merchants":{"get":{"operationId":"AdminMerchantController_list","parameters":[{"name":"search","required":true,"in":"query","schema":{"type":"string"}},{"name":"kycStatus","required":true,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"pageSize","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-merchants"]}},"/api/admin/merchants/kyc-pending":{"get":{"operationId":"AdminMerchantController_kycPending","parameters":[{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"pageSize","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-merchants"]}},"/api/admin/merchants/{id}":{"get":{"operationId":"AdminMerchantController_detail","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-merchants"]}},"/api/admin/merchants/{id}/audit-log":{"get":{"operationId":"AdminMerchantController_merchantAuditLog","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"pageSize","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-merchants"]}},"/api/admin/merchants/{id}/wallet/credit":{"post":{"operationId":"AdminMerchantController_creditWallet","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletAdjustDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-merchants"]}},"/api/admin/merchants/{id}/wallet/debit":{"post":{"operationId":"AdminMerchantController_debitWallet","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletAdjustDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-merchants"]}},"/api/admin/merchants/{id}/suspend":{"post":{"operationId":"AdminMerchantController_suspend","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuspendDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-merchants"]}},"/api/admin/merchants/{id}/unsuspend":{"post":{"operationId":"AdminMerchantController_unsuspend","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuspendDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-merchants"]}},"/api/admin/audit-log":{"get":{"operationId":"AdminAuditController_list","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-audit"]}},"/api/merchants/me/wallet/balance":{"get":{"operationId":"WalletController_balance","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Current wallet balance for the signed-in merchant","tags":["wallet"]}},"/api/merchants/me/wallet/summary":{"get":{"operationId":"WalletController_summary","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Wallet summary — balance, 30-day spend, auto-topup state","tags":["wallet"]}},"/api/merchants/me/wallet/transactions":{"get":{"operationId":"WalletController_transactions","parameters":[{"name":"page","required":false,"in":"query","schema":{"default":1,"type":"number"}},{"name":"pageSize","required":false,"in":"query","schema":{"default":20,"type":"number"}},{"name":"type","required":false,"in":"query","schema":{"enum":["credit","debit"],"type":"string"}},{"name":"category","required":false,"in":"query","schema":{"enum":["recharge","freight","freight_refund","cod_remittance","weight_discrepancy","manual_adjustment","promo_credit"],"type":"string"}},{"name":"from","required":false,"in":"query","schema":{"type":"string"}},{"name":"to","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List wallet transactions (debits, credits, holds) with filters","tags":["wallet"]}},"/api/merchants/me/wallet/recharges":{"post":{"operationId":"WalletController_createRecharge","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRechargeDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Open a Razorpay recharge intent for a given amount (returns checkout params)","tags":["wallet"]}},"/api/merchants/me/wallet/recharges/{intentId}/verify":{"post":{"operationId":"WalletController_verifyRecharge","parameters":[{"name":"intentId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyRechargeDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Verify a completed Razorpay checkout and credit the wallet","tags":["wallet"]}},"/api/merchants/me/wallet/recharges/{intentId}/stub-confirm":{"post":{"operationId":"WalletController_stubConfirm","parameters":[{"name":"intentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Dev-only — mark a stubbed recharge intent as paid (no payment gateway)","tags":["wallet"]}},"/api/merchants/me/wallet/instant-cod":{"get":{"operationId":"WalletController_getInstantCod","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Fetch Instant COD state + KYC/bank gate flags for the merchant panel","tags":["wallet"]},"post":{"operationId":"WalletController_setInstantCod","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Toggle Instant COD (T+1 payout sweep). Requires KYC approved + verified bank.","tags":["wallet"]}},"/api/wallet/webhooks/razorpay":{"post":{"operationId":"WalletWebhookController_razorpayWebhook","parameters":[{"name":"x-razorpay-signature","required":true,"in":"header","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Razorpay webhook receiver — signature-verified","tags":["wallet-webhook"]}},"/api/merchants/me/remittance/summary":{"get":{"operationId":"MerchantRemittanceController_summary","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-remittance"]}},"/api/merchants/me/remittance/runs":{"get":{"operationId":"MerchantRemittanceController_runs","parameters":[{"name":"page","required":true,"in":"query","schema":{"type":"number"}},{"name":"pageSize","required":true,"in":"query","schema":{"type":"number"}},{"name":"status","required":true,"in":"query","schema":{"type":"string"}},{"name":"from","required":true,"in":"query","schema":{"type":"string"}},{"name":"to","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-remittance"]}},"/api/merchants/me/remittance/upcoming":{"get":{"operationId":"MerchantRemittanceController_upcoming","parameters":[{"name":"days","required":true,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-remittance"]}},"/api/merchants/me/remittance/runs/{id}":{"get":{"operationId":"MerchantRemittanceController_runDetail","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-remittance"]}},"/api/merchants/me/postpaid":{"get":{"operationId":"MerchantPostpaidController_status","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-postpaid"]}},"/api/merchants/me/postpaid/apply":{"post":{"operationId":"MerchantPostpaidController_apply","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitPostpaidApplicationDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-postpaid"]}},"/api/merchants/me/postpaid/pay-now":{"post":{"operationId":"MerchantPostpaidController_payNow","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-postpaid"]}},"/api/merchants/me/kyc":{"get":{"operationId":"KycController_getStatus","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Merchant KYC summary — status, documents, review notes, blockers","tags":["kyc"]}},"/api/merchants/me/kyc/status":{"get":{"operationId":"KycController_getStatusAlias","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"KYC status alias (same payload as GET /merchants/me/kyc)","tags":["kyc"]}},"/api/merchants/me/kyc/business-details":{"patch":{"operationId":"KycController_updateBusiness","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBusinessDetailsDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Update merchant business details (PAN, GSTIN, legal name)","tags":["kyc"]}},"/api/merchants/me/kyc/bank-details":{"patch":{"operationId":"KycController_updateBank","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetBankDetailsDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Set / update merchant bank account for COD remittance (triggers penny-drop verification)","tags":["kyc"]}},"/api/merchants/me/kyc/verify-pan":{"post":{"operationId":"KycController_verifyPan","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Trigger PAN verification against the NSDL/Protean API","tags":["kyc"]}},"/api/merchants/me/kyc/verify-gstin":{"post":{"operationId":"KycController_verifyGstin","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Trigger GSTIN verification against the GSTN API","tags":["kyc"]}},"/api/merchants/me/kyc/verify-bank":{"post":{"operationId":"KycController_verifyBank","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Trigger penny-drop bank verification","tags":["kyc"]}},"/api/merchants/me/kyc/documents":{"get":{"operationId":"KycController_listDocuments","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List KYC documents uploaded by this merchant","tags":["kyc"]},"post":{"operationId":"KycController_uploadDocument","parameters":[{"name":"type","required":true,"in":"query","schema":{"enum":["pan","gstin","aadhaar","cancelled_cheque","bank_statement","business_proof","address_proof","board_resolution","director_pan","other","aadhaar_offline_xml","pan_card","gst_certificate","business_pan","incorporation_certificate","shop_establishment","partnership_deed","udyam","fssai","drug_licence","bis","iec_certificate"],"type":"string"}},{"name":"entityScope","required":false,"in":"query","schema":{"enum":["individual","business"],"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Upload a KYC document. Multipart form with field \"file\" + query \"type\".","tags":["kyc"]}},"/api/merchants/me/kyc/aadhaar-offline":{"post":{"operationId":"KycController_uploadAadhaarOffline","parameters":[{"name":"shareCode","required":true,"in":"query","description":"The 4-character share-code the merchant set when they downloaded the offline eKYC ZIP from UIDAI.","schema":{"type":"string"}},{"name":"entityScope","required":false,"in":"query","schema":{"enum":["individual","business"],"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Upload UIDAI offline eKYC (XML or unencrypted ZIP). Multipart form with field \"file\" + query \"shareCode\".","tags":["kyc"]}},"/api/merchants/me/kyc/documents/{documentId}":{"delete":{"operationId":"KycController_removeDocument","parameters":[{"name":"documentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"bearer":[]}],"summary":"Delete a pending (not yet reviewed) KYC document","tags":["kyc"]}},"/api/merchants/me/kyc/submit":{"post":{"operationId":"KycController_submit","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Submit KYC package for admin review (locks edits)","tags":["kyc"]}},"/api/merchants/me/kyc/legal/{slug}":{"get":{"operationId":"KycController_getLegal","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Fetch the current published legal document by slug (ToS, Privacy, etc.)","tags":["kyc"]}},"/api/merchants/me/kyc/consents":{"get":{"operationId":"KycController_listMyConsents","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List this user's legal consents on record","tags":["kyc"]}},"/api/merchants/me/kyc/consent":{"post":{"operationId":"KycController_recordConsent","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordConsentDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Record consent for a specific version of a legal document","tags":["kyc"]}},"/api/admin/kyc/merchants/{merchantId}":{"get":{"operationId":"KycAdminController_get","parameters":[{"name":"merchantId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — fetch KYC summary for one merchant","tags":["kyc-admin"]}},"/api/admin/kyc/merchants/{merchantId}/documents":{"get":{"operationId":"KycAdminController_listDocs","parameters":[{"name":"merchantId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — list KYC documents for one merchant","tags":["kyc-admin"]}},"/api/admin/kyc/merchants/{merchantId}/approve":{"post":{"operationId":"KycAdminController_approve","parameters":[{"name":"merchantId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApproveKycDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — approve KYC and set tier (lite/full)","tags":["kyc-admin"]}},"/api/admin/kyc/merchants/{merchantId}/reject":{"post":{"operationId":"KycAdminController_reject","parameters":[{"name":"merchantId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RejectKycDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — reject KYC with a reason","tags":["kyc-admin"]}},"/api/admin/kyc/queue":{"get":{"operationId":"KycAdminController_queue","parameters":[{"name":"status","required":true,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"pageSize","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — KYC review queue (filter by document status)","tags":["kyc-admin"]}},"/api/admin/kyc/documents/{documentId}/review":{"post":{"operationId":"KycAdminController_reviewDocument","parameters":[{"name":"documentId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewDocumentDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — accept or reject a specific KYC document","tags":["kyc-admin"]}},"/api/admin/kyc/review-stats":{"get":{"operationId":"KycAdminController_reviewStats","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — KYC review KPI stats (pending, verified today, avg review minutes)","tags":["kyc-admin"]}},"/api/admin/kyc/legal":{"get":{"operationId":"KycAdminController_listLegal","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — list all legal document versions","tags":["kyc-admin"]},"post":{"operationId":"KycAdminController_publishLegal","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishLegalDocumentDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — publish a new version of a legal document","tags":["kyc-admin"]}},"/api/merchants/me/address-book":{"get":{"operationId":"AddressBookController_list","parameters":[{"name":"search","required":true,"in":"query","schema":{"type":"string"}},{"name":"includeArchived","required":true,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"pageSize","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["address-book"]},"post":{"operationId":"AddressBookController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBuyerAddressDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["address-book"]}},"/api/merchants/me/address-book/suggest":{"get":{"operationId":"AddressBookController_suggest","parameters":[{"name":"q","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["address-book"]}},"/api/merchants/me/address-book/{id}":{"get":{"operationId":"AddressBookController_detail","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["address-book"]},"patch":{"operationId":"AddressBookController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBuyerAddressDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["address-book"]},"delete":{"operationId":"AddressBookController_archive","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"bearer":[]}],"tags":["address-book"]}},"/api/public/countries":{"get":{"operationId":"PublicCountryController_list","parameters":[{"name":"active","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Public — list all supported countries. Pass ?active=true to filter to live countries only.","tags":["countries"]}},"/api/public/countries/{id}":{"get":{"operationId":"PublicCountryController_get","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Public — fetch one country by ISO code (currency, pincode format, VAT/GST fields)","tags":["countries"]}},"/api/merchants/me/couriers":{"get":{"operationId":"MerchantCourierController_listForMerchant","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List active couriers available to this merchant","tags":["couriers-merchant"]}},"/api/merchants/me/couriers/rate-cards":{"get":{"operationId":"MerchantCourierController_listMyRateCards","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List merchant-specific rate card overrides","tags":["couriers-merchant"]}},"/api/merchants/me/couriers/calculate":{"post":{"operationId":"MerchantCourierController_calculate","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculateRateDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Calculate shipping cost for a specific courier + service","tags":["couriers-merchant"]}},"/api/merchants/me/couriers/compare":{"post":{"operationId":"MerchantCourierController_compare","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompareRatesDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Compare rates across couriers for a given service type","tags":["couriers-merchant"]}},"/api/merchants/me/couriers/compare-all":{"post":{"description":"Primary rate-shopping endpoint. Returns all live quotes sorted by price, including COD surcharge, insurance, and any franchisee/platform markups.","operationId":"MerchantCourierController_compareAll","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompareAllRatesDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Compare rates across every courier + service for a shipment","tags":["couriers-merchant"]}},"/api/merchants/me/couriers/serviceability/{pincode}":{"get":{"operationId":"MerchantCourierController_lookupServiceability","parameters":[{"name":"pincode","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Resolve a destination pincode — which couriers serve it, COD support, fastest ETA, inferred city/state","tags":["couriers-merchant"]}},"/api/admin/couriers":{"get":{"operationId":"AdminCourierController_list","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — list every courier (active, draft, disabled)","tags":["couriers-admin"]},"post":{"operationId":"AdminCourierController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCourierDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — register a new courier integration","tags":["couriers-admin"]}},"/api/admin/couriers/{id}":{"patch":{"operationId":"AdminCourierController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCourierDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — update courier metadata or status","tags":["couriers-admin"]}},"/api/admin/couriers/{id}/rate-cards":{"get":{"operationId":"AdminCourierController_listRateCards","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — list default rate cards for a courier","tags":["couriers-admin"]}},"/api/admin/couriers/rate-cards":{"post":{"operationId":"AdminCourierController_createRateCard","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRateCardDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — create a new versioned rate card (default or merchant override)","tags":["couriers-admin"]}},"/api/admin/couriers/rate-cards/{id}/deactivate":{"post":{"operationId":"AdminCourierController_deactivateRateCard","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — deactivate a rate card version","tags":["couriers-admin"]}},"/api/admin/couriers/{id}/rate-cards/import":{"post":{"operationId":"AdminCourierController_importRateCards","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"commit","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — bulk import rate card slabs from CSV (dry-run unless commit=true)","tags":["couriers-admin"]}},"/api/admin/couriers/{id}/api-configs":{"get":{"operationId":"AdminCourierController_listApiConfigs","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — list stored API credentials for a courier (sandbox + production)","tags":["couriers-admin"]}},"/api/admin/couriers/api-configs":{"post":{"operationId":"AdminCourierController_upsertApiConfig","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertCourierApiConfigDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — upsert courier API credentials","tags":["couriers-admin"]}},"/api/admin/couriers/api-configs/{id}/test-connection":{"post":{"operationId":"AdminCourierController_testApiConnection","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — test courier API credentials by pinging the adapter","tags":["couriers-admin"]}},"/api/admin/couriers/api-configs/{id}/sync-serviceability":{"post":{"operationId":"AdminCourierController_syncServiceability","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — pull the latest serviceability feed from the courier","tags":["couriers-admin"]}},"/api/admin/couriers/serviceability/stats":{"get":{"operationId":"AdminCourierController_serviceabilityStats","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — serviceability coverage summary across every courier","tags":["couriers-admin"]}},"/api/admin/couriers/{id}/rate-warmup":{"post":{"operationId":"AdminCourierController_warmupRates","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"dryRun","required":true,"in":"query","schema":{"type":"boolean"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — pre-warm the rate quote cache for a courier (Delhivery only today)","tags":["couriers-admin"]}},"/api/admin/couriers/platform-markups":{"get":{"operationId":"AdminCourierController_listMarkups","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — list platform margin + running cost markups","tags":["couriers-admin"]},"post":{"operationId":"AdminCourierController_upsertMarkup","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertPlatformMarkupDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — upsert a platform markup (percent + flat minor units)","tags":["couriers-admin"]}},"/api/admin/couriers/platform-markups/{id}":{"delete":{"operationId":"AdminCourierController_removeMarkup","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — remove a platform markup","tags":["couriers-admin"]}},"/api/admin/couriers/{courierId}/accounts":{"get":{"operationId":"AdminCourierAccountController_list","parameters":[{"name":"courierId","required":true,"in":"path","schema":{"type":"string"}},{"name":"scope","required":true,"in":"query","schema":{"type":"string"}},{"name":"merchantId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-courier-accounts"]},"post":{"operationId":"AdminCourierAccountController_create","parameters":[{"name":"courierId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-courier-accounts"]}},"/api/admin/couriers/{courierId}/accounts/{id}":{"patch":{"operationId":"AdminCourierAccountController_update","parameters":[{"name":"courierId","required":true,"in":"path","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-courier-accounts"]},"delete":{"operationId":"AdminCourierAccountController_deactivate","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-courier-accounts"]}},"/api/admin/couriers/{courierId}/accounts/{id}/set-primary":{"post":{"operationId":"AdminCourierAccountController_setPrimary","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-courier-accounts"]}},"/api/admin/ratings/providers/{providerId}":{"get":{"operationId":"AdminRatingController_get","parameters":[{"name":"providerId","required":true,"in":"path","schema":{"type":"string"}},{"name":"countryId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["ratings"]}},"/api/admin/ratings/providers/{providerId}/history":{"get":{"operationId":"AdminRatingController_history","parameters":[{"name":"providerId","required":true,"in":"path","schema":{"type":"string"}},{"name":"countryId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["ratings"]}},"/api/admin/ratings/recompute":{"post":{"operationId":"AdminRatingController_recompute","parameters":[],"responses":{"200":{"description":""}},"tags":["ratings"]}},"/api/merchants/me/local-deliveries/compare":{"post":{"operationId":"LocalDeliveryController_compare","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Compare hyperlocal quotes across Porter / Dunzo / Rapido / own-network for a bike/van delivery","tags":["local-delivery"]}},"/api/merchants/me/local-deliveries":{"post":{"operationId":"LocalDeliveryController_create","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Book a hyperlocal delivery with the chosen provider","tags":["local-delivery"]},"get":{"operationId":"LocalDeliveryController_list","parameters":[{"name":"status","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List this merchant's hyperlocal deliveries","tags":["local-delivery"]}},"/api/merchants/me/local-deliveries/{id}":{"get":{"operationId":"LocalDeliveryController_get","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Fetch one hyperlocal delivery with status and driver info","tags":["local-delivery"]}},"/api/merchants/me/local-deliveries/{id}/cancel":{"post":{"operationId":"LocalDeliveryController_cancel","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Cancel a hyperlocal delivery (passes through to the aggregator)","tags":["local-delivery"]}},"/api/admin/drivers":{"post":{"operationId":"AdminDriverController_onboard","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["drivers"]},"get":{"operationId":"AdminDriverController_list","parameters":[{"name":"status","required":true,"in":"query","schema":{"type":"string"}},{"name":"fleetOperatorId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["drivers"]}},"/api/admin/drivers/{id}":{"get":{"operationId":"AdminDriverController_get","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["drivers"]}},"/api/admin/drivers/{id}/suspend":{"post":{"operationId":"AdminDriverController_suspend","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["drivers"]}},"/api/admin/drivers/{id}/activate":{"post":{"operationId":"AdminDriverController_activate","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["drivers"]}},"/api/merchants/me/quick-commerce/dark-stores":{"get":{"operationId":"QuickCommerceController_listDarkStores","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["quick-commerce"]}},"/api/merchants/me/quick-commerce/quote":{"post":{"operationId":"QuickCommerceController_quote","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["quick-commerce"]}},"/api/admin/quick-commerce/dark-stores":{"get":{"operationId":"QuickCommerceAdminController_listDarkStores","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-quick-commerce"]}},"/api/admin/quick-commerce/dark-stores/{id}/toggle-active":{"post":{"operationId":"QuickCommerceAdminController_toggleActive","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-quick-commerce"]}},"/api/driver-app/sessions/heartbeat":{"post":{"operationId":"DriverAppController_heartbeat","parameters":[],"responses":{"201":{"description":""}},"tags":["driver-app"]}},"/api/driver-app/sessions/end":{"post":{"operationId":"DriverAppController_endSession","parameters":[],"responses":{"201":{"description":""}},"tags":["driver-app"]}},"/api/driver-app/drivers/{driverId}/offers":{"get":{"operationId":"DriverAppController_pendingOffers","parameters":[{"name":"driverId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["driver-app"]}},"/api/driver-app/offers/accept":{"post":{"operationId":"DriverAppController_acceptOffer","parameters":[],"responses":{"201":{"description":""}},"tags":["driver-app"]}},"/api/driver-app/offers/decline":{"post":{"operationId":"DriverAppController_declineOffer","parameters":[],"responses":{"201":{"description":""}},"tags":["driver-app"]}},"/api/driver-app/deliveries/mark-picked-up":{"post":{"operationId":"DriverAppController_markPickedUp","parameters":[],"responses":{"201":{"description":""}},"tags":["driver-app"]}},"/api/driver-app/deliveries/mark-in-transit":{"post":{"operationId":"DriverAppController_markInTransit","parameters":[],"responses":{"201":{"description":""}},"tags":["driver-app"]}},"/api/driver-app/deliveries/mark-delivered":{"post":{"operationId":"DriverAppController_markDelivered","parameters":[],"responses":{"201":{"description":""}},"tags":["driver-app"]}},"/api/public/verify/{shipmentId}":{"get":{"description":"Returns every lifecycle event with its signature + hash link, plus an aggregate badge (verified | partially_verified | chain_intact | broken). Rate-limited to 30 req/min per IP.","operationId":"PublicVerifyController_verifyShipment","parameters":[{"name":"shipmentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Public — verify a shipment's Ed25519-signed event chain","tags":["verify"]}},"/api/merchants/me/trucker/compare":{"post":{"operationId":"TruckerController_compare","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Compare truck freight quotes across BlackBuck / Vahak / LoadShare for a load","tags":["trucker"]}},"/api/merchants/me/trucker":{"post":{"operationId":"TruckerController_create","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Book a truck with the chosen partner (FTL or PTL)","tags":["trucker"]},"get":{"operationId":"TruckerController_list","parameters":[{"name":"status","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List this merchant's truck bookings","tags":["trucker"]}},"/api/merchants/me/trucker/{id}":{"get":{"operationId":"TruckerController_get","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Fetch one truck booking","tags":["trucker"]}},"/api/merchants/me/trucker/{id}/cancel":{"post":{"operationId":"TruckerController_cancel","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Cancel a truck booking","tags":["trucker"]}},"/api/merchants/me/international/compare":{"post":{"operationId":"InternationalController_compare","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Compare international freight quotes across DHL / FedEx / UPS / Aramex for a shipment","tags":["international"]}},"/api/merchants/me/international":{"post":{"operationId":"InternationalController_create","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Book an international shipment with the chosen forwarder (also persists commercial invoice)","tags":["international"]},"get":{"operationId":"InternationalController_list","parameters":[{"name":"status","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List this merchant's international bookings (optionally filter by status)","tags":["international"]}},"/api/merchants/me/international/hs-chapters":{"get":{"operationId":"InternationalController_hsChapters","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List known HS code chapters (helper for the invoice form)","tags":["international"]}},"/api/merchants/me/international/duty-estimate":{"post":{"operationId":"InternationalController_dutyEstimate","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Estimate landed-cost duty + tax for a destination country given HS lines","tags":["international"]}},"/api/merchants/me/international/{id}":{"get":{"operationId":"InternationalController_get","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Fetch one international booking (packages, invoice, status timeline)","tags":["international"]}},"/api/merchants/me/international/{id}/cancel":{"post":{"operationId":"InternationalController_cancel","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Cancel an international booking","tags":["international"]}},"/api/merchants/me/international/{id}/commercial-invoice/pdf":{"get":{"operationId":"InternationalController_invoicePdf","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Render the commercial invoice PDF inline for a booking","tags":["international"]}},"/api/admin/couriers/{id}/invoices/reconcile":{"post":{"operationId":"AdminCourierInvoiceController_importInvoice","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"dryRun","required":true,"in":"query","schema":{"type":"boolean"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["courier-invoice-admin"]}},"/api/admin/couriers/{id}/invoices/reconciliation-runs":{"get":{"operationId":"AdminCourierInvoiceController_listRuns","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["courier-invoice-admin"]}},"/api/admin/couriers/{id}/invoices/reconciliation-runs/{runId}":{"get":{"operationId":"AdminCourierInvoiceController_getRun","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"runId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["courier-invoice-admin"]}},"/api/admin/couriers/{id}/invoices/reconciliation-runs/{runId}/rows":{"get":{"operationId":"AdminCourierInvoiceController_getRunRows","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"runId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["courier-invoice-admin"]}},"/api/admin/couriers/{id}/invoices/reconciliation-runs/{runId}/file":{"get":{"operationId":"AdminCourierInvoiceController_getRunFile","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"runId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["courier-invoice-admin"]}},"/api/merchants/me/weight-disputes":{"get":{"operationId":"WeightDisputeController_list","parameters":[{"name":"status","required":true,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"pageSize","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["weight-disputes"]}},"/api/merchants/me/weight-disputes/counts":{"get":{"operationId":"WeightDisputeController_counts","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["weight-disputes"]}},"/api/merchants/me/weight-disputes/{id}":{"get":{"operationId":"WeightDisputeController_detail","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["weight-disputes"]}},"/api/merchants/me/weight-disputes/{id}/accept":{"post":{"operationId":"WeightDisputeController_accept","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["weight-disputes"]}},"/api/merchants/me/weight-disputes/{id}/dispute":{"post":{"operationId":"WeightDisputeController_dispute","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DisputeDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["weight-disputes"]}},"/api/merchants/me/weight-disputes/{id}/photos":{"post":{"operationId":"WeightDisputeController_uploadPhoto","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["weight-disputes"]}},"/api/admin/weight-disputes":{"get":{"operationId":"AdminWeightDisputeController_list","parameters":[{"name":"status","required":true,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"pageSize","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["weight-disputes-admin"]},"post":{"operationId":"AdminWeightDisputeController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateClaimDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["weight-disputes-admin"]}},"/api/admin/weight-disputes/counts":{"get":{"operationId":"AdminWeightDisputeController_counts","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["weight-disputes-admin"]}},"/api/admin/weight-disputes/{id}":{"get":{"operationId":"AdminWeightDisputeController_detail","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["weight-disputes-admin"]}},"/api/admin/weight-disputes/{id}/arbitrate":{"post":{"operationId":"AdminWeightDisputeController_arbitrate","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArbitrateDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["weight-disputes-admin"]}},"/api/admin/weight-disputes/{id}/cancel":{"post":{"operationId":"AdminWeightDisputeController_cancel","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelDto"}}}},"responses":{"204":{"description":""}},"security":[{"bearer":[]}],"tags":["weight-disputes-admin"]}},"/api/admin/weight-disputes/{id}/photos":{"post":{"operationId":"AdminWeightDisputeController_uploadPhoto","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["weight-disputes-admin"]}},"/api/merchants/me/orders":{"get":{"description":"Paginated. Use `phase` for the merchant panel tabs (new / ready-to-ship / in-transit / delivered / rto / cancelled). `search` matches order number, buyer name, phone, or AWB.","operationId":"OrderController_list","parameters":[{"name":"phase","required":true,"in":"query","schema":{"type":"string"}},{"name":"status","required":true,"in":"query","schema":{"type":"string"}},{"name":"paymentMode","required":true,"in":"query","schema":{"type":"string"}},{"name":"channel","required":true,"in":"query","schema":{"type":"string"}},{"name":"courierId","required":true,"in":"query","schema":{"type":"string"}},{"name":"pickupLocationId","required":true,"in":"query","schema":{"type":"string"}},{"name":"orderType","required":true,"in":"query","schema":{"type":"string"}},{"name":"shippingState","required":true,"in":"query","schema":{"type":"string"}},{"name":"sku","required":true,"in":"query","schema":{"type":"string"}},{"name":"productName","required":true,"in":"query","schema":{"type":"string"}},{"name":"isBuyerVerified","required":true,"in":"query","schema":{"type":"string"}},{"name":"onHold","required":true,"in":"query","schema":{"type":"string"}},{"name":"weightFromGrams","required":true,"in":"query","schema":{"type":"string"}},{"name":"weightToGrams","required":true,"in":"query","schema":{"type":"string"}},{"name":"from","required":true,"in":"query","schema":{"type":"string"}},{"name":"to","required":true,"in":"query","schema":{"type":"string"}},{"name":"search","required":true,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"pageSize","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List orders with rich filters (phase, status, courier, SKU, weight range, text search)","tags":["orders"]},"post":{"operationId":"OrderController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOrderDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Create a new order (prepaid or COD, forward or reverse)","tags":["orders"]}},"/api/merchants/me/orders/counts":{"get":{"operationId":"OrderController_counts","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Counts grouped by raw OrderStatus — powers the admin filter chips","tags":["orders"]}},"/api/merchants/me/orders/phase-counts":{"get":{"operationId":"OrderController_phaseCounts","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Counts grouped by phase — powers the merchant panel sidebar numbers","tags":["orders"]}},"/api/merchants/me/orders/{id}/hold":{"post":{"operationId":"OrderController_hold","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Move an order to On Hold","tags":["orders"]}},"/api/merchants/me/orders/{id}/unhold":{"post":{"operationId":"OrderController_unhold","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Release an order from On Hold","tags":["orders"]}},"/api/merchants/me/orders/bulk-template":{"get":{"operationId":"OrderController_template","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Download the bulk order CSV template","tags":["orders"]}},"/api/merchants/me/orders/bulk-upload":{"post":{"operationId":"OrderController_bulkUpload","parameters":[{"name":"dryRun","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Upload a CSV of orders. multipart/form-data, field \"file\"","tags":["orders"]}},"/api/merchants/me/orders/bulk-cancel":{"post":{"operationId":"OrderController_bulkCancel","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkCancelDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Cancel multiple orders in one call","tags":["orders"]}},"/api/merchants/me/orders/bulk-ship":{"post":{"operationId":"OrderController_bulkShip","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkShipDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Ship multiple orders with the same courier + service in one call","tags":["orders"]}},"/api/merchants/me/orders/{id}":{"get":{"operationId":"OrderController_detail","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Fetch full detail for a single order (buyer, items, shipment, events)","tags":["orders"]},"delete":{"operationId":"OrderController_cancel","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Cancel an order (also cancels any pending shipment)","tags":["orders"]}},"/api/merchants/me/orders/{id}/ship":{"post":{"description":"Books the chosen courier, generates the label, and transitions the order to ready-to-ship.","operationId":"OrderController_ship","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShipOrderDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Ship an order with the chosen courier/service, booking an AWB","tags":["orders"]}},"/api/merchants/me/shipments":{"get":{"operationId":"ShipmentController_list","parameters":[{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"pageSize","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List this merchant's shipments (paginated)","tags":["shipments"]}},"/api/merchants/me/shipments/bulk-labels":{"post":{"operationId":"ShipmentController_bulkLabels","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkLabelsDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Render multiple shipment labels into one PDF and return a presigned URL","tags":["shipments"]}},"/api/merchants/me/shipments/manifest":{"post":{"operationId":"ShipmentController_manifest","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManifestDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Generate a pickup manifest PDF for selected shipments","tags":["shipments"]}},"/api/merchants/me/shipments/{id}":{"get":{"operationId":"ShipmentController_detail","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Fetch full detail for one shipment (AWB, status, events, label URL)","tags":["shipments"]}},"/api/merchants/me/shipments/{id}/cancel":{"post":{"operationId":"ShipmentController_cancel","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Cancel a shipment (releases the AWB with the courier)","tags":["shipments"]}},"/api/merchants/me/shipments/{id}/label":{"get":{"operationId":"ShipmentController_label","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Return a short-lived presigned URL to download the shipping label PDF","tags":["shipments"]}},"/api/merchants/me/manifests":{"get":{"operationId":"MerchantManifestsController_list","parameters":[{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"pageSize","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-manifests"]}},"/api/merchants/me/manifests/{id}/download":{"get":{"operationId":"MerchantManifestsController_downloadUrl","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-manifests"]}},"/api/admin/orders":{"get":{"operationId":"AdminOrderController_list","parameters":[{"name":"countryId","required":true,"in":"query","schema":{"type":"string"}},{"name":"merchantId","required":true,"in":"query","schema":{"type":"string"}},{"name":"mode","required":true,"in":"query","schema":{"type":"string"}},{"name":"status","required":true,"in":"query","schema":{"type":"string"}},{"name":"rtoBand","required":true,"in":"query","schema":{"type":"string"}},{"name":"search","required":true,"in":"query","schema":{"type":"string"}},{"name":"from","required":true,"in":"query","schema":{"type":"string"}},{"name":"to","required":true,"in":"query","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}},{"name":"cursor","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-orders"]}},"/api/admin/orders/{id}":{"get":{"operationId":"AdminOrderController_detail","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-orders"]}},"/api/ops/rto":{"get":{"operationId":"RtoController_list","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Ops — RTO Workbench queue (orders ranked by RTO risk; filterable by band, action, merchant)","tags":["ops-rto"]}},"/api/ops/rto/{orderId}":{"get":{"operationId":"RtoController_detail","parameters":[{"name":"orderId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Ops — RTO Workbench order detail with action log (buyer phone unmasked)","tags":["ops-rto"]}},"/api/ops/rto/{orderId}/score":{"post":{"operationId":"RtoController_score","parameters":[{"name":"orderId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Ops — recompute RTO risk score for one order","tags":["ops-rto"]}},"/api/ops/rto/{orderId}/hold":{"post":{"operationId":"RtoController_hold","parameters":[{"name":"orderId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RtoActionBodyDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Ops — hold a flagged RTO-risk order pending review","tags":["ops-rto"]}},"/api/ops/rto/{orderId}/cancel":{"post":{"operationId":"RtoController_cancel","parameters":[{"name":"orderId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RtoActionBodyDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Ops — cancel a flagged RTO-risk order (manager-only)","tags":["ops-rto"]}},"/api/ops/rto/{orderId}/flip":{"post":{"operationId":"RtoController_flip","parameters":[{"name":"orderId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RtoActionBodyDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Ops — flip a flagged COD order to prepaid (buyer confirmation via SMS)","tags":["ops-rto"]}},"/api/ops/rto/{orderId}/nudge":{"post":{"operationId":"RtoController_nudge","parameters":[{"name":"orderId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RtoActionBodyDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Ops — send a buyer-side address confirmation nudge (SMS/WhatsApp)","tags":["ops-rto"]}},"/api/ops/rto/{orderId}/release":{"post":{"operationId":"RtoController_release","parameters":[{"name":"orderId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RtoActionBodyDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Ops — release a held RTO-risk order back into normal flow","tags":["ops-rto"]}},"/api/merchants/me/shipments/{id}/insurance/quote":{"get":{"operationId":"ShipmentInsuranceController_quote","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"declaredValueMinor","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Quote insurance premium for a given declared value (no commitment)","tags":["shipment-insurance"]}},"/api/merchants/me/shipments/{id}/insurance":{"get":{"operationId":"ShipmentInsuranceController_getPolicy","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Fetch the active insurance policy attached to a shipment","tags":["shipment-insurance"]},"post":{"operationId":"ShipmentInsuranceController_createPolicy","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Buy an insurance policy on a shipment (premium debited from wallet)","tags":["shipment-insurance"]}},"/api/merchants/me/shipments/{id}/insurance/claim":{"post":{"operationId":"ShipmentInsuranceController_fileClaim","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"File a claim against an active policy (lost/damaged)","tags":["shipment-insurance"]}},"/api/merchants/me/insurance/policies":{"get":{"operationId":"ShipmentInsuranceController_listMine","parameters":[{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"pageSize","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List all insurance policies for this merchant (paginated)","tags":["shipment-insurance"]}},"/api/admin/insurance/policies":{"get":{"operationId":"ShipmentInsuranceController_adminList","parameters":[{"name":"status","required":true,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"pageSize","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — list insurance policies across all merchants","tags":["shipment-insurance"]}},"/api/admin/insurance/claims":{"get":{"operationId":"ShipmentInsuranceController_adminListClaims","parameters":[{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"pageSize","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — list open insurance claims awaiting review","tags":["shipment-insurance"]}},"/api/admin/insurance/claims/{policyId}/approve":{"post":{"operationId":"ShipmentInsuranceController_approve","parameters":[{"name":"policyId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — approve a claim and queue the payout","tags":["shipment-insurance"]}},"/api/admin/insurance/claims/{policyId}/deny":{"post":{"operationId":"ShipmentInsuranceController_deny","parameters":[{"name":"policyId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — deny a claim with reviewer notes","tags":["shipment-insurance"]}},"/api/merchants/me/shipments/{id}/weight-freeze":{"get":{"operationId":"WeightFreezeController_getForShipment","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Fetch Weight Freeze record for a shipment (declared slab, lock fee, actual billed weight)","tags":["weight-freeze"]}},"/api/admin/weight-freeze":{"get":{"operationId":"WeightFreezeController_adminList","parameters":[{"name":"windowDays","required":true,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"pageSize","required":true,"in":"query","schema":{"type":"string"}},{"name":"status","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — list Weight Freeze records (paginated, filter by status + window)","tags":["weight-freeze"]}},"/api/merchants/me/products":{"get":{"operationId":"ProductController_list","parameters":[{"name":"search","required":true,"in":"query","schema":{"type":"string"}},{"name":"category","required":true,"in":"query","schema":{"type":"string"}},{"name":"active","required":true,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"pageSize","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-products"]},"post":{"operationId":"ProductController_create","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-products"]}},"/api/merchants/me/products/search":{"get":{"operationId":"ProductController_pickerSearch","parameters":[{"name":"q","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-products"]}},"/api/merchants/me/products/export":{"get":{"operationId":"ProductController_exportCsv","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-products"]}},"/api/merchants/me/products/inventory":{"get":{"operationId":"ProductController_listLowStock","parameters":[{"name":"low_stock","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-products"]}},"/api/merchants/me/products/{id}/inventory":{"get":{"operationId":"ProductController_getInventory","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-products"]},"post":{"operationId":"ProductController_adjustInventory","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-products"]}},"/api/merchants/me/products/{id}":{"get":{"operationId":"ProductController_get","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-products"]},"patch":{"operationId":"ProductController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-products"]},"delete":{"operationId":"ProductController_delete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-products"]}},"/api/merchants/me/products/{id}/active":{"post":{"operationId":"ProductController_setActive","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-products"]}},"/api/merchants/me/products/{id}/images":{"post":{"operationId":"ProductController_uploadImage","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-products"]}},"/api/merchants/me/products/{id}/images/{imageId}":{"delete":{"operationId":"ProductController_deleteImage","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"imageId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-products"]}},"/api/merchants/me/products/{id}/images/reorder":{"patch":{"operationId":"ProductController_reorderImages","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-products"]}},"/api/merchants/me/products/import":{"post":{"operationId":"ProductController_importCsv","parameters":[{"name":"commit","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-products"]}},"/api/merchants/me/orders/{id}/eway-bills":{"get":{"operationId":"ComplianceController_list","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["compliance"]},"post":{"operationId":"ComplianceController_create","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEwayBillDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["compliance"]}},"/api/merchants/me/orders/eway-bills/{billId}":{"delete":{"operationId":"ComplianceController_cancel","parameters":[{"name":"billId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"bearer":[]}],"tags":["compliance"]}},"/api/public/track/{token}":{"get":{"operationId":"TrackingController_publicTrack","parameters":[{"name":"token","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["tracking"]}},"/api/couriers/{code}/webhooks/tracking":{"post":{"operationId":"TrackingController_webhook","parameters":[{"name":"code","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["tracking"]}},"/api/admin/tracking/push":{"post":{"operationId":"TrackingController_manualPush","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PushTrackingEventDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["tracking"]}},"/api/merchants/me/ndr":{"get":{"operationId":"NdrController_list","parameters":[{"name":"status","required":true,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"pageSize","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List NDR (non-delivery) cases for this merchant","tags":["ndr"]}},"/api/merchants/me/ndr/counts":{"get":{"operationId":"NdrController_counts","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"NDR counts grouped by status (open, reattempted, rto, resolved)","tags":["ndr"]}},"/api/merchants/me/ndr/auto-rule":{"get":{"operationId":"NdrController_getAutoRule","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Fetch the merchant's NDR auto-handling rule (reattempt / RTO thresholds)","tags":["ndr"]},"patch":{"operationId":"NdrController_updateAutoRule","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAutoRuleDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Update the merchant's NDR auto-handling rule","tags":["ndr"]}},"/api/merchants/me/ndr/{id}":{"get":{"operationId":"NdrController_detail","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Fetch one NDR case with history and buyer-flow state","tags":["ndr"]}},"/api/merchants/me/ndr/{id}/resend-buyer-flow":{"post":{"operationId":"NdrController_resendBuyerFlow","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"bearer":[]}],"summary":"Re-send the buyer SMS/WhatsApp self-serve flow for an NDR case","tags":["ndr"]}},"/api/merchants/me/ndr/{id}/regenerate-draft":{"post":{"operationId":"NdrController_regenerateDraft","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Regenerate the AI draft buyer message for an NDR case","tags":["ndr"]}},"/api/merchants/me/ndr/{id}/reattempt":{"post":{"operationId":"NdrController_reattempt","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReattemptDto"}}}},"responses":{"204":{"description":""}},"security":[{"bearer":[]}],"summary":"Request a reattempt from the courier (merchant action)","tags":["ndr"]}},"/api/merchants/me/ndr/{id}/update-address":{"post":{"operationId":"NdrController_updateAddress","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAddressDto"}}}},"responses":{"204":{"description":""}},"security":[{"bearer":[]}],"summary":"Update the destination address on an NDR case before reattempt","tags":["ndr"]}},"/api/merchants/me/ndr/{id}/escalate-rto":{"post":{"operationId":"NdrController_escalateRto","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EscalateRtoDto"}}}},"responses":{"204":{"description":""}},"security":[{"bearer":[]}],"summary":"Escalate an NDR case to RTO (return to origin)","tags":["ndr"]}},"/api/merchants/me/ndr/{id}/cancel":{"post":{"operationId":"NdrController_cancel","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelNdrDto"}}}},"responses":{"204":{"description":""}},"security":[{"bearer":[]}],"summary":"Cancel an NDR case (closes it as resolved with no further action)","tags":["ndr"]}},"/api/public/track/{token}/ndr-action":{"post":{"operationId":"PublicNdrController_buyerAction","parameters":[{"name":"token","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuyerActionDto"}}}},"responses":{"201":{"description":""}},"summary":"Public — buyer self-serve action on an NDR case (reschedule, update address, cancel)","tags":["ndr-public"]}},"/api/admin/ndr":{"get":{"operationId":"AdminNdrController_list","parameters":[{"name":"status","required":true,"in":"query","schema":{"type":"string"}},{"name":"merchantId","required":true,"in":"query","schema":{"type":"string"}},{"name":"reason","required":true,"in":"query","schema":{"type":"string"}},{"name":"from","required":true,"in":"query","schema":{"type":"string"}},{"name":"to","required":true,"in":"query","schema":{"type":"string"}},{"name":"q","required":true,"in":"query","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}},{"name":"offset","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-ndr"]}},"/api/admin/ndr/counts":{"get":{"operationId":"AdminNdrController_counts","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-ndr"]}},"/api/admin/ndr/{id}":{"get":{"operationId":"AdminNdrController_detail","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-ndr"]}},"/api/admin/ndr/{id}/reattempt":{"post":{"operationId":"AdminNdrController_reattempt","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminReattemptDto"}}}},"responses":{"204":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-ndr"]}},"/api/admin/ndr/{id}/update-address":{"post":{"operationId":"AdminNdrController_updateAddress","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUpdateAddressDto"}}}},"responses":{"204":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-ndr"]}},"/api/admin/ndr/{id}/escalate-rto":{"post":{"operationId":"AdminNdrController_escalateRto","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminEscalateRtoDto"}}}},"responses":{"204":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-ndr"]}},"/api/admin/ndr/{id}/cancel":{"post":{"operationId":"AdminNdrController_cancel","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminCancelNdrDto"}}}},"responses":{"204":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-ndr"]}},"/api/admin/ndr/{id}/regenerate-draft":{"post":{"operationId":"AdminNdrController_regenerateDraft","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-ndr"]}},"/api/admin/ndr/{id}/resend-buyer-flow":{"post":{"operationId":"AdminNdrController_resendBuyerFlow","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-ndr"]}},"/api/merchants/me/returns":{"get":{"operationId":"ReturnsController_list","parameters":[{"name":"status","required":true,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"pageSize","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["returns"]},"post":{"operationId":"ReturnsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MerchantInitiateReturnDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["returns"]}},"/api/merchants/me/returns/counts":{"get":{"operationId":"ReturnsController_counts","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["returns"]}},"/api/merchants/me/returns/{id}":{"get":{"operationId":"ReturnsController_detail","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["returns"]}},"/api/merchants/me/returns/{id}/approve":{"post":{"operationId":"ReturnsController_approve","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["returns"]}},"/api/merchants/me/returns/{id}/reject":{"post":{"operationId":"ReturnsController_reject","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RejectReturnDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["returns"]}},"/api/merchants/me/returns/{id}/schedule-pickup":{"post":{"operationId":"ReturnsController_schedulePickup","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchedulePickupDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["returns"]}},"/api/merchants/me/returns/{id}/mark-picked-up":{"post":{"operationId":"ReturnsController_markPickedUp","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["returns"]}},"/api/merchants/me/returns/{id}/mark-received":{"post":{"operationId":"ReturnsController_markReceived","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["returns"]}},"/api/merchants/me/returns/{id}/qc":{"post":{"operationId":"ReturnsController_qc","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QcDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["returns"]}},"/api/merchants/me/returns/{id}/refund":{"post":{"operationId":"ReturnsController_refund","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefundDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["returns"]}},"/api/merchants/me/returns/{id}/exchange":{"post":{"operationId":"ReturnsController_exchange","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["returns"]}},"/api/merchants/me/returns/{id}/cancel":{"post":{"operationId":"ReturnsController_cancel","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelReturnDto"}}}},"responses":{"204":{"description":""}},"security":[{"bearer":[]}],"tags":["returns"]}},"/api/merchants/me/returns/{id}/photos":{"post":{"operationId":"ReturnsController_uploadPhoto","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Upload an image. multipart/form-data, field \"file\"","tags":["returns"]}},"/api/public/track/{token}/return":{"post":{"operationId":"PublicReturnsController_initiateByBuyer","parameters":[{"name":"token","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InitiateReturnDto"}}}},"responses":{"201":{"description":""}},"tags":["returns-public"]},"get":{"operationId":"PublicReturnsController_lookupByBuyer","parameters":[{"name":"token","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["returns-public"]}},"/api/public/track/{token}/return/{returnId}/photos":{"post":{"operationId":"PublicReturnsController_uploadPhotoByBuyer","parameters":[{"name":"token","required":true,"in":"path","schema":{"type":"string"}},{"name":"returnId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"tags":["returns-public"]}},"/api/merchants/me/invoices/summary":{"get":{"operationId":"MerchantInvoiceController_summary","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-invoices"]}},"/api/merchants/me/invoices":{"get":{"operationId":"MerchantInvoiceController_list","parameters":[{"name":"status","required":true,"in":"query","schema":{"type":"string"}},{"name":"from","required":true,"in":"query","schema":{"type":"string"}},{"name":"to","required":true,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"pageSize","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-invoices"]}},"/api/merchants/me/invoices/{id}":{"get":{"operationId":"MerchantInvoiceController_get","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-invoices"]}},"/api/merchants/me/invoices/{id}/pay-now":{"post":{"operationId":"MerchantInvoiceController_payNow","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-invoices"]}},"/api/merchants/me/invoices/{id}/pdf":{"get":{"operationId":"MerchantInvoiceController_downloadPdf","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-invoices"]}},"/api/admin/finance/dunning":{"get":{"operationId":"AdminDunningController_overview","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-dunning"]}},"/api/admin/finance/dunning/run-sweep":{"post":{"operationId":"AdminDunningController_runSweep","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-dunning"]}},"/api/admin/finance/dunning/settle/{id}":{"post":{"operationId":"AdminDunningController_settleOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-dunning"]}},"/api/admin/finance/dunning/invoices/{id}/pdf":{"get":{"operationId":"AdminDunningController_downloadPdf","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-dunning"]}},"/api/merchants/me/pickup-requests":{"get":{"operationId":"PickupRequestController_list","parameters":[{"name":"status","required":true,"in":"query","schema":{"type":"string"}},{"name":"from","required":true,"in":"query","schema":{"type":"string"}},{"name":"to","required":true,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"pageSize","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-pickup-requests"]},"post":{"operationId":"PickupRequestController_create","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-pickup-requests"]}},"/api/merchants/me/pickup-requests/{id}":{"get":{"operationId":"PickupRequestController_get","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-pickup-requests"]}},"/api/merchants/me/pickup-requests/{id}/cancel":{"post":{"operationId":"PickupRequestController_cancel","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-pickup-requests"]}},"/api/merchants/me/api-keys":{"get":{"operationId":"MerchantApiKeyController_list","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-api-keys"]},"post":{"operationId":"MerchantApiKeyController_create","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-api-keys"]}},"/api/merchants/me/api-keys/{id}/revoke":{"post":{"operationId":"MerchantApiKeyController_revoke","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-api-keys"]}},"/api/merchants/me/reports/types":{"get":{"operationId":"MerchantReportsController_listTypes","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-reports"]}},"/api/merchants/me/reports/run":{"post":{"operationId":"MerchantReportsController_run","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-reports"]}},"/api/merchants/me/reports/runs":{"get":{"operationId":"MerchantReportsController_runs","parameters":[{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"pageSize","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-reports"]}},"/api/merchants/me/reports/runs/{id}/download":{"get":{"operationId":"MerchantReportsController_downloadUrl","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-reports"]}},"/api/merchants/me/reports/saved":{"get":{"operationId":"MerchantReportsController_savedList","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-reports"]},"post":{"operationId":"MerchantReportsController_saveNew","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-reports"]}},"/api/merchants/me/reports/saved/{id}":{"delete":{"operationId":"MerchantReportsController_deleteSaved","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-reports"]}},"/api/merchants/me/reports/schedules":{"post":{"operationId":"MerchantReportsController_schedule","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-reports"]}},"/api/merchants/me/reports/schedules/{id}":{"delete":{"operationId":"MerchantReportsController_cancelSchedule","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-reports"]}},"/api/admin/reports/types":{"get":{"operationId":"AdminReportsController_listTypes","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-reports"]}},"/api/admin/reports/run":{"post":{"operationId":"AdminReportsController_run","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-reports"]}},"/api/admin/reports/runs":{"get":{"operationId":"AdminReportsController_runs","parameters":[{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"pageSize","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-reports"]}},"/api/admin/reports/runs/{id}/download":{"get":{"operationId":"AdminReportsController_downloadUrl","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-reports"]}},"/api/merchants/me/integrations":{"get":{"operationId":"IntegrationsController_list","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-integrations"]}},"/api/merchants/me/integrations/{id}/pause":{"post":{"operationId":"IntegrationsController_pause","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-integrations"]}},"/api/merchants/me/integrations/{id}/resume":{"post":{"operationId":"IntegrationsController_resume","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-integrations"]}},"/api/merchants/me/integrations/{id}":{"delete":{"operationId":"IntegrationsController_disconnect","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-integrations"]}},"/api/merchants/me/integrations/webhooks":{"get":{"operationId":"IntegrationsController_listWebhooks","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-integrations"]},"post":{"operationId":"IntegrationsController_createWebhook","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-integrations"]}},"/api/merchants/me/integrations/webhooks/{id}":{"delete":{"operationId":"IntegrationsController_deleteWebhook","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["merchant-integrations"]}},"/api/merchants/me/integrations/marketplace/upload":{"post":{"operationId":"MarketplaceImportController_upload","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Upload a marketplace order CSV (Amazon Self-Ship / Flipkart Smart). multipart/form-data, field \"file\" + \"marketplace\".","tags":["merchant-integrations"]}},"/api/merchants/me/integrations/marketplace/batches":{"get":{"operationId":"MarketplaceImportController_listBatches","parameters":[{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"pageSize","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List marketplace import batches (one per CSV upload)","tags":["merchant-integrations"]}},"/api/merchants/me/integrations/marketplace/batches/{id}":{"get":{"operationId":"MarketplaceImportController_getBatch","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Fetch one import batch with per-row results (success / error)","tags":["merchant-integrations"]}},"/api/integrations/shopify/install":{"post":{"operationId":"ShopifyController_initInstall","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["shopify-integration"]}},"/api/integrations/shopify/callback":{"get":{"operationId":"ShopifyController_callback","parameters":[],"responses":{"200":{"description":""}},"tags":["shopify-integration"]}},"/api/integrations/shopify/webhooks":{"post":{"operationId":"ShopifyController_webhook","parameters":[],"responses":{"200":{"description":""}},"tags":["shopify-integration"]}},"/api/integrations/woocommerce/connect":{"post":{"operationId":"WooCommerceController_connect","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["woocommerce-integration"]}},"/api/integrations/woocommerce/webhooks":{"post":{"operationId":"WooCommerceController_webhook","parameters":[],"responses":{"200":{"description":""}},"tags":["woocommerce-integration"]}},"/api/merchants/me/branded-tracking":{"get":{"operationId":"BrandedTrackingController_get","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["branded-tracking"]},"patch":{"operationId":"BrandedTrackingController_update","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["branded-tracking"]}},"/api/merchants/me/branded-tracking/logo":{"post":{"operationId":"BrandedTrackingController_uploadLogo","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["branded-tracking"]}},"/api/public/track/{token}/branding":{"get":{"operationId":"PublicBrandedTrackingController_branding","parameters":[{"name":"token","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["public-branded-tracking"]}},"/api/admin/ops/overview":{"get":{"operationId":"AdminOpsController_overview","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-ops"]}},"/api/admin/ops/lifecycle":{"get":{"operationId":"AdminOpsController_lifecycle","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-ops"]}},"/api/admin/finance/wallet/ledger":{"get":{"operationId":"AdminFinanceController_ledger","parameters":[{"name":"page","required":true,"in":"query","schema":{"type":"number"}},{"name":"pageSize","required":true,"in":"query","schema":{"type":"number"}},{"name":"merchantId","required":true,"in":"query","schema":{"type":"string"}},{"name":"category","required":true,"in":"query","schema":{"type":"string"}},{"name":"type","required":true,"in":"query","schema":{"type":"string"}},{"name":"from","required":true,"in":"query","schema":{"type":"string"}},{"name":"to","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-finance"]}},"/api/admin/finance/wallet/totals":{"get":{"operationId":"AdminFinanceController_walletTotals","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-finance"]}},"/api/admin/finance/cod/pending":{"get":{"operationId":"AdminFinanceController_pendingCod","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-finance"]}},"/api/admin/finance/cod/pending/{merchantId}":{"get":{"operationId":"AdminFinanceController_pendingCodDetail","parameters":[{"name":"merchantId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-finance"]}},"/api/admin/finance/cod/runs":{"post":{"operationId":"AdminFinanceController_createRun","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRemittanceRunDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-finance"]},"get":{"operationId":"AdminFinanceController_listRuns","parameters":[{"name":"page","required":true,"in":"query","schema":{"type":"number"}},{"name":"pageSize","required":true,"in":"query","schema":{"type":"number"}},{"name":"status","required":true,"in":"query","schema":{"type":"string"}},{"name":"merchantId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-finance"]}},"/api/admin/finance/cod/runs/{id}/mark-paid":{"post":{"operationId":"AdminFinanceController_markRunPaid","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkRemittancePaidDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-finance"]}},"/api/admin/finance/cod/runs/{id}/mark-failed":{"post":{"operationId":"AdminFinanceController_markRunFailed","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkRemittanceFailedDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-finance"]}},"/api/admin/finance/invoices":{"post":{"operationId":"AdminFinanceController_generateInvoice","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateInvoiceDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-finance"]},"get":{"operationId":"AdminFinanceController_listInvoices","parameters":[{"name":"page","required":true,"in":"query","schema":{"type":"number"}},{"name":"pageSize","required":true,"in":"query","schema":{"type":"number"}},{"name":"status","required":true,"in":"query","schema":{"type":"string"}},{"name":"merchantId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-finance"]}},"/api/admin/finance/invoices/{id}":{"get":{"operationId":"AdminFinanceController_getInvoice","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-finance"]}},"/api/admin/finance/invoices/{id}/issue":{"post":{"operationId":"AdminFinanceController_issueInvoice","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-finance"]}},"/api/admin/finance/invoices/{id}/void":{"post":{"operationId":"AdminFinanceController_voidInvoice","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoidInvoiceDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-finance"]}},"/api/admin/risk/fraud":{"get":{"operationId":"AdminRiskController_fraudConsole","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-risk"]}},"/api/admin/risk/kyc-reverification":{"get":{"operationId":"AdminRiskController_kycReverificationQueue","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-risk"]}},"/api/admin/risk/audit-export":{"get":{"operationId":"AdminRiskController_exportAudit","parameters":[{"name":"actorUserId","required":true,"in":"query","schema":{"type":"string"}},{"name":"orgId","required":true,"in":"query","schema":{"type":"string"}},{"name":"resourceType","required":true,"in":"query","schema":{"type":"string"}},{"name":"resourceId","required":true,"in":"query","schema":{"type":"string"}},{"name":"action","required":true,"in":"query","schema":{"type":"string"}},{"name":"from","required":true,"in":"query","schema":{"type":"string"}},{"name":"to","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-risk"]}},"/api/admin/reports/showcase/platform-margin":{"get":{"operationId":"AdminShowcaseReportsController_platformMargin","parameters":[{"name":"windowDays","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-showcase-reports"]}},"/api/admin/reports/showcase/franchise-cascade":{"get":{"operationId":"AdminShowcaseReportsController_franchiseCascade","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-showcase-reports"]}},"/api/admin/reports/showcase/chain-integrity":{"get":{"operationId":"AdminShowcaseReportsController_chainIntegrity","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-showcase-reports"]}},"/api/admin/reports/showcase/country-activity":{"get":{"operationId":"AdminShowcaseReportsController_countryActivity","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-showcase-reports"]}},"/api/admin/cms/announcements":{"get":{"operationId":"PlatformCmsController_listAnnouncements","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-cms"]},"post":{"operationId":"PlatformCmsController_createAnnouncement","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertAnnouncementDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-cms"]}},"/api/admin/cms/announcements/{id}":{"patch":{"operationId":"PlatformCmsController_updateAnnouncement","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertAnnouncementDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-cms"]},"delete":{"operationId":"PlatformCmsController_deleteAnnouncement","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-cms"]}},"/api/admin/cms/flags":{"get":{"operationId":"PlatformCmsController_listFlags","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-cms"]},"post":{"operationId":"PlatformCmsController_upsertFlag","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertFeatureFlagDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-cms"]}},"/api/admin/cms/flags/{id}/overrides":{"get":{"operationId":"PlatformCmsController_listFlagOverrides","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-cms"]},"post":{"operationId":"PlatformCmsController_setFlagOverride","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetFeatureFlagOverrideDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-cms"]}},"/api/admin/cms/flags/{id}/overrides/{merchantId}":{"delete":{"operationId":"PlatformCmsController_removeFlagOverride","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"merchantId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-cms"]}},"/api/admin/cms/staff":{"get":{"operationId":"PlatformCmsController_listStaff","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-cms"]}},"/api/admin/cms/staff/{userId}/force-logout":{"post":{"operationId":"PlatformCmsController_forceLogout","parameters":[{"name":"userId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-cms"]}},"/api/cms/announcements/mine":{"get":{"operationId":"MerchantCmsController_myAnnouncements","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["cms-merchant"]}},"/api/cms/announcements/{id}/dismiss":{"post":{"operationId":"MerchantCmsController_dismiss","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"204":{"description":""}},"security":[{"bearer":[]}],"tags":["cms-merchant"]}},"/api/partner/me/dashboard":{"get":{"operationId":"PartnerController_dashboard","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["partner"]}},"/api/partner/me/shipments":{"get":{"operationId":"PartnerController_shipments","parameters":[{"name":"page","required":true,"in":"query","schema":{"type":"number"}},{"name":"pageSize","required":true,"in":"query","schema":{"type":"number"}},{"name":"status","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["partner"]}},"/api/partner/me/weight-disputes":{"get":{"operationId":"PartnerController_weightDisputes","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["partner"]}},"/api/partner/me/serviceability":{"get":{"operationId":"PartnerController_serviceability","parameters":[{"name":"page","required":true,"in":"query","schema":{"type":"number"}},{"name":"pageSize","required":true,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["partner"]}},"/api/partner/me/rate-proposals":{"get":{"operationId":"PartnerController_listMyProposals","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["partner"]},"post":{"operationId":"PartnerController_createProposal","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRateProposalDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["partner"]}},"/api/partner/me/rate-proposals/{id}/withdraw":{"post":{"operationId":"PartnerController_withdrawProposal","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["partner"]}},"/api/admin/rate-proposals":{"get":{"operationId":"AdminRateProposalController_listPending","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-rate-proposals"]}},"/api/admin/rate-proposals/{id}/approve":{"post":{"operationId":"AdminRateProposalController_approve","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewRateProposalDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-rate-proposals"]}},"/api/admin/rate-proposals/{id}/reject":{"post":{"operationId":"AdminRateProposalController_reject","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RejectRateProposalDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-rate-proposals"]}},"/api/merchants/me/tickets":{"get":{"operationId":"MerchantTicketController_list","parameters":[{"name":"status","required":true,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"pageSize","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Merchant — list my support tickets","tags":["merchant-tickets"]},"post":{"operationId":"MerchantTicketController_create","parameters":[],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Merchant — open a new support ticket (category auto-routes to the right team)","tags":["merchant-tickets"]}},"/api/merchants/me/tickets/{id}":{"get":{"operationId":"MerchantTicketController_get","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Merchant — fetch one ticket with its message thread","tags":["merchant-tickets"]}},"/api/merchants/me/tickets/{id}/reply":{"post":{"operationId":"MerchantTicketController_reply","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Merchant — post a reply on a ticket","tags":["merchant-tickets"]}},"/api/merchants/me/tickets/{id}/close":{"post":{"operationId":"MerchantTicketController_close","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Merchant — close a ticket (optionally with a CSAT rating 1-5)","tags":["merchant-tickets"]}},"/api/merchants/me/tickets/{id}/messages/{messageId}/attachments":{"post":{"operationId":"MerchantTicketController_uploadAttachment","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"messageId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Merchant — attach a file to a ticket message (multipart form, field \"file\")","tags":["merchant-tickets"]}},"/api/merchants/me/tickets/{id}/attachments/{attachmentId}/download":{"get":{"operationId":"MerchantTicketController_downloadAttachment","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"attachmentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Merchant — 302 redirect to a short-lived download URL for a ticket attachment","tags":["merchant-tickets"]}},"/api/merchants/me/tickets/{id}/attachments/{attachmentId}/signed-url":{"get":{"operationId":"MerchantTicketController_attachmentSignedUrl","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"attachmentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Merchant — JSON companion: return the signed download URL for an attachment","tags":["merchant-tickets"]}},"/api/admin/tickets":{"get":{"operationId":"AdminTicketController_list","parameters":[{"name":"status","required":true,"in":"query","schema":{"type":"string"}},{"name":"priority","required":true,"in":"query","schema":{"type":"string"}},{"name":"category","required":true,"in":"query","schema":{"type":"string"}},{"name":"assignedToUserId","required":true,"in":"query","schema":{"type":"string"}},{"name":"search","required":true,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"pageSize","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — list every ticket (filters: status, priority, category, assignee, search)","tags":["admin-tickets"]}},"/api/admin/tickets/meta/assignable-users":{"get":{"operationId":"AdminTicketController_assignableUsers","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — list platform staff who can own a ticket","tags":["admin-tickets"]}},"/api/admin/tickets/routing-rules":{"get":{"operationId":"AdminTicketController_listRoutingRules","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — list auto-routing rules (category → default owner + priority)","tags":["admin-tickets"]}},"/api/admin/tickets/routing-rules/{category}":{"put":{"operationId":"AdminTicketController_upsertRoutingRule","parameters":[{"name":"category","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — upsert the auto-routing rule for one category","tags":["admin-tickets"]},"delete":{"operationId":"AdminTicketController_deleteRoutingRule","parameters":[{"name":"category","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — delete an auto-routing rule","tags":["admin-tickets"]}},"/api/admin/tickets/{id}":{"get":{"operationId":"AdminTicketController_get","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — fetch one ticket with the full thread (including internal notes)","tags":["admin-tickets"]}},"/api/admin/tickets/{id}/reply":{"post":{"operationId":"AdminTicketController_reply","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — reply to a ticket (pass isInternal:true for a private note)","tags":["admin-tickets"]}},"/api/admin/tickets/{id}/assign":{"post":{"operationId":"AdminTicketController_assign","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — assign (or unassign with userId:null) a ticket owner","tags":["admin-tickets"]}},"/api/admin/tickets/{id}/resolve":{"post":{"operationId":"AdminTicketController_resolve","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — mark a ticket as resolved","tags":["admin-tickets"]}},"/api/admin/tickets/{id}/reopen":{"post":{"operationId":"AdminTicketController_reopen","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — reopen a resolved/closed ticket","tags":["admin-tickets"]}},"/api/admin/tickets/{id}/messages/{messageId}/attachments":{"post":{"operationId":"AdminTicketController_uploadAttachment","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"messageId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — attach a file to a ticket message (multipart form)","tags":["admin-tickets"]}},"/api/admin/tickets/{id}/attachments/{attachmentId}/download":{"get":{"operationId":"AdminTicketController_downloadAttachment","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"attachmentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — 302 redirect to a short-lived download URL","tags":["admin-tickets"]}},"/api/admin/tickets/{id}/attachments/{attachmentId}/signed-url":{"get":{"operationId":"AdminTicketController_attachmentSignedUrl","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"attachmentId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Admin — JSON: return the signed download URL for an attachment","tags":["admin-tickets"]}},"/api/public/grievance":{"post":{"description":"Writes to the PublicGrievance table (no merchant FK) and fans out to the ops grievance officer.","operationId":"PublicGrievanceController_submit","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitPublicGrievanceDto"}}}},"responses":{"201":{"description":""}},"summary":"Public — submit a grievance from the marketing site. Rate-limited to 5 per IP per hour.","tags":["public-grievance"]}},"/api/admin/grievances":{"get":{"operationId":"AdminGrievanceController_list","parameters":[{"name":"status","required":true,"in":"query","schema":{"type":"string"}},{"name":"q","required":true,"in":"query","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}},{"name":"offset","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-grievance"]}},"/api/admin/grievances/{ticketNumber}":{"get":{"operationId":"AdminGrievanceController_detail","parameters":[{"name":"ticketNumber","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-grievance"]}},"/api/admin/grievances/{ticketNumber}/respond":{"post":{"operationId":"AdminGrievanceController_respond","parameters":[{"name":"ticketNumber","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RespondGrievanceDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-grievance"]}},"/api/admin/grievances/{ticketNumber}/resolve":{"post":{"operationId":"AdminGrievanceController_resolve","parameters":[{"name":"ticketNumber","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveGrievanceDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-grievance"]}},"/api/admin/grievances/{ticketNumber}/reopen":{"post":{"operationId":"AdminGrievanceController_reopen","parameters":[{"name":"ticketNumber","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"tags":["admin-grievance"]}},"/api/public/metrics":{"get":{"operationId":"PublicMetricsController_get","parameters":[],"responses":{"200":{"description":""}},"summary":"Public — fleet-wide metrics snapshot (shipments, merchants, couriers, countries). Cached 5 minutes.","tags":["metrics"]}}},"info":{"title":"Deliver Hub API","description":"Deliver Hub REST API — the single contract behind our merchant panel,\npartner panels, mobile apps and the typed TypeScript SDK (@hypership/sdk).\n\nAuth: Bearer tokens issued by POST /api/auth/login. Public endpoints\n(e.g. /api/verify/:shipmentId, /api/public/*) do not require a token.\n\nSigned events: every lifecycle event is Ed25519-signed and hashed into a\nper-shipment chain; see the \"verify\" tag for the public verifier.","version":"1.0","contact":{"name":"Deliver Hub developer team","url":"https://deliverhub.in/developers","email":"dev@deliverhub.in"},"license":{"name":"Proprietary","url":"https://deliverhub.in/terms"}},"tags":[],"servers":[{"url":"https://api.deliverhub.in","description":"Production"},{"url":"http://localhost:4000","description":"Local dev"}],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http"}},"schemas":{"ApprovePostpaidDto":{"type":"object","properties":{}},"RevokePostpaidDto":{"type":"object","properties":{}},"ApproveApplicationDto":{"type":"object","properties":{}},"RejectApplicationDto":{"type":"object","properties":{}},"RequestSignupOtpDto":{"type":"object","properties":{"email":{"type":"string","example":"jane@brand.in"}},"required":["email"]},"VerifySignupOtpDto":{"type":"object","properties":{"email":{"type":"string"},"code":{"type":"string","example":"123456"}},"required":["email","code"]},"SignupDto":{"type":"object","properties":{"email":{"type":"string","example":"jane@brand.in"},"name":{"type":"string","example":"Jane Doe","minLength":1,"maxLength":100},"password":{"type":"string","example":"Sup3r-Strong-Password","minLength":8,"maxLength":128},"otpCode":{"type":"string","description":"6-digit code from /auth/signup/request-otp — required for the new stepper flow"},"accountType":{"type":"string","enum":["individual","business"],"description":"individual = personal shipper; business = registered entity. Drives KYC path."},"businessType":{"type":"string","enum":["individual","sole_proprietor","partnership","llp","private_ltd","public_ltd","huf"],"description":"Entity type — required for business accounts, defaults to `individual` otherwise"},"category":{"type":"string","description":"Product category (fashion, electronics, food, etc.)"},"phone":{"type":"string","description":"Optional phone (E.164 or 10-digit Indian)"},"orgSlug":{"type":"string","description":"Org slug — auto-generated if omitted"},"orgName":{"type":"string","description":"Org display name — auto-derived from name/company if omitted"},"orgType":{"type":"string","enum":["merchant","partner"],"default":"merchant"},"subMerchantInviteToken":{"type":"string","description":"Sub-merchant invite token from a franchisee invite link"}},"required":["email","name","password"]},"LoginDto":{"type":"object","properties":{"email":{"type":"string"},"password":{"type":"string"},"mfaCode":{"type":"string","description":"6-digit TOTP or 10-char backup code, if MFA is enabled"}},"required":["email","password"]},"RefreshDto":{"type":"object","properties":{"refreshToken":{"type":"string"}},"required":["refreshToken"]},"ForgotPasswordDto":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"ResetPasswordDto":{"type":"object","properties":{"token":{"type":"string"},"newPassword":{"type":"string","minLength":8,"maxLength":128}},"required":["token","newPassword"]},"VerifyEmailDto":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"]},"UpdateProfileDto":{"type":"object","properties":{"name":{"type":"string"},"phone":{"type":"string"}}},"ChangePasswordDto":{"type":"object","properties":{"currentPassword":{"type":"string"},"newPassword":{"type":"string","minLength":8,"maxLength":128}},"required":["currentPassword","newPassword"]},"EnrollMfaConfirmDto":{"type":"object","properties":{"code":{"type":"string","minLength":6,"maxLength":6}},"required":["code"]},"InviteMemberDto":{"type":"object","properties":{"email":{"type":"string"},"role":{"type":"string","description":"A role slug valid for this org type"}},"required":["email","role"]},"AcceptInviteDto":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"]},"CreatePickupLocationDto":{"type":"object","properties":{"label":{"type":"string","example":"Main warehouse"},"contactName":{"type":"string","example":"Atul Timmons"},"contactPhone":{"type":"string","example":"+919876543210"},"addressLine1":{"type":"string"},"addressLine2":{"type":"string"},"landmark":{"type":"string"},"city":{"type":"string"},"state":{"type":"string","enum":["AN","AP","AR","AS","BR","CG","CH","DL","DN","GA","GJ","HP","HR","JH","JK","KA","KL","LA","LD","MH","ML","MN","MP","MZ","NL","OD","PB","PY","RJ","SK","TG","TN","TR","UK","UP","WB"]},"pincode":{"type":"string","example":"110001"},"country":{"type":"string","default":"IN"},"cutoffTime":{"type":"string","description":"HH:MM (24-hour) — e.g. 16:30"},"isPrimary":{"type":"boolean","default":false},"isActive":{"type":"boolean","default":true},"isDarkStore":{"type":"boolean","description":"Enable minute-SLA quick commerce from this location.","default":false},"deliveryRadiusKm":{"type":"number","example":5,"minimum":0.1,"maximum":50},"slaMinutes":{"type":"number","example":30,"minimum":5,"maximum":240},"lat":{"type":"number","example":12.9716,"minimum":-90,"maximum":90},"lng":{"type":"number","example":77.5946,"minimum":-180,"maximum":180},"instantPickupEnabled":{"type":"boolean","description":"Enable same-day priority pickup for this location.","default":false},"instantPickupFeeMinor":{"type":"number","description":"Per-pickup fee in minor units (paise). Default ₹5 = 500.","example":500,"minimum":0,"maximum":100000}},"required":["label","contactName","contactPhone","addressLine1","city","state","pincode"]},"UpdatePickupLocationDto":{"type":"object","properties":{"label":{"type":"string"},"contactName":{"type":"string"},"contactPhone":{"type":"string"},"addressLine1":{"type":"string"},"addressLine2":{"type":"string"},"landmark":{"type":"string"},"city":{"type":"string"},"state":{"type":"string","enum":["AN","AP","AR","AS","BR","CG","CH","DL","DN","GA","GJ","HP","HR","JH","JK","KA","KL","LA","LD","MH","ML","MN","MP","MZ","NL","OD","PB","PY","RJ","SK","TG","TN","TR","UK","UP","WB"]},"pincode":{"type":"string"},"country":{"type":"string"},"cutoffTime":{"type":"string"},"isPrimary":{"type":"boolean"},"isActive":{"type":"boolean"},"isDarkStore":{"type":"boolean"},"deliveryRadiusKm":{"type":"number","minimum":0.1,"maximum":50},"slaMinutes":{"type":"number","minimum":5,"maximum":240},"lat":{"type":"number","minimum":-90,"maximum":90},"lng":{"type":"number","minimum":-180,"maximum":180},"instantPickupEnabled":{"type":"boolean"},"instantPickupFeeMinor":{"type":"number","minimum":0,"maximum":100000}}},"WalletAdjustDto":{"type":"object","properties":{}},"SuspendDto":{"type":"object","properties":{}},"CreateRechargeDto":{"type":"object","properties":{"amountMinor":{"type":"number","description":"Amount in paise (₹500 minimum)","example":50000}},"required":["amountMinor"]},"VerifyRechargeDto":{"type":"object","properties":{"paymentId":{"type":"string"},"signature":{"type":"string"}},"required":["paymentId","signature"]},"SubmitPostpaidApplicationDto":{"type":"object","properties":{}},"UpdateBusinessDetailsDto":{"type":"object","properties":{"legalName":{"type":"string"},"displayName":{"type":"string"},"businessType":{"type":"string","enum":["individual","sole_proprietor","partnership","llp","private_ltd","public_ltd","huf"]},"category":{"type":"string","enum":["apparel","electronics","books","fmcg","beauty","jewellery","home_decor","sports","toys","food_beverage","pharma","other"]},"gstStatus":{"type":"string","enum":["registered","unregistered","composition"]},"pan":{"type":"string","description":"10-character PAN, e.g. ABCDE1234F"},"gstin":{"type":"string","description":"15-character GSTIN"}}},"SetBankDetailsDto":{"type":"object","properties":{"accountNumber":{"type":"string","description":"9–18 digit account number"},"ifsc":{"type":"string","description":"11-character IFSC, e.g. HDFC0001234"},"accountName":{"type":"string"}},"required":["accountNumber","ifsc","accountName"]},"RecordConsentDto":{"type":"object","properties":{"slug":{"type":"string","enum":["terms","privacy","prohibited_items","grievance","shipper_declaration","cookie_policy"]},"version":{"type":"number","description":"Version of the LegalDocument the user accepted."}},"required":["slug","version"]},"ApproveKycDto":{"type":"object","properties":{"tier":{"type":"number","enum":[1,2,3]}},"required":["tier"]},"RejectKycDto":{"type":"object","properties":{"reason":{"type":"string"}},"required":["reason"]},"ReviewDocumentDto":{"type":"object","properties":{"decision":{"type":"string","enum":["accept","reject"]},"reviewerNotes":{"type":"string"},"rejectionReason":{"type":"string","description":"Required when decision === \"reject\". Reason surfaced to the merchant."}},"required":["decision"]},"PublishLegalDocumentDto":{"type":"object","properties":{"slug":{"type":"string","enum":["terms","privacy","prohibited_items","grievance","shipper_declaration","cookie_policy"]},"title":{"type":"string"},"contentMarkdown":{"type":"string"}},"required":["slug","title","contentMarkdown"]},"CreateBuyerAddressDto":{"type":"object","properties":{"label":{"type":"string","example":"Office"},"name":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"addressLine1":{"type":"string"},"addressLine2":{"type":"string"},"landmark":{"type":"string"},"city":{"type":"string"},"state":{"type":"string","description":"2-letter India state code, e.g. KA"},"pincode":{"type":"string"},"gstin":{"type":"string","description":"GSTIN — set when consignee is a registered business"}},"required":["name","phone","addressLine1","city","state","pincode"]},"UpdateBuyerAddressDto":{"type":"object","properties":{"label":{"type":"string"},"name":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"addressLine1":{"type":"string"},"addressLine2":{"type":"string"},"landmark":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"pincode":{"type":"string"},"gstin":{"type":"string"}}},"CalculateRateDto":{"type":"object","properties":{"courierCode":{"type":"string","example":"delhivery"},"serviceType":{"type":"string","enum":["surface","express","same_day","next_day","reverse","b2b","heavy","international"]},"originPincode":{"type":"string"},"destinationPincode":{"type":"string"},"weightGrams":{"type":"number"},"length":{"type":"number"},"breadth":{"type":"number"},"height":{"type":"number"},"paymentMode":{"type":"string","enum":["prepaid","cod"]},"codAmountMinor":{"type":"number","description":"COD amount in paise"}},"required":["courierCode","serviceType","originPincode","destinationPincode","weightGrams","paymentMode"]},"CompareRatesDto":{"type":"object","properties":{"serviceType":{"type":"string","enum":["surface","express","same_day","next_day","reverse","b2b","heavy","international"]},"originPincode":{"type":"string"},"destinationPincode":{"type":"string"},"weightGrams":{"type":"number"},"length":{"type":"number"},"breadth":{"type":"number"},"height":{"type":"number"},"paymentMode":{"type":"string","enum":["prepaid","cod"]},"codAmountMinor":{"type":"number"}},"required":["serviceType","originPincode","destinationPincode","weightGrams","paymentMode"]},"CompareAllRatesDto":{"type":"object","properties":{"originPincode":{"type":"string","description":"Pickup PIN code"},"destinationPincode":{"type":"string","description":"Buyer PIN code"},"weightGrams":{"type":"number"},"length":{"type":"number"},"breadth":{"type":"number"},"height":{"type":"number"},"paymentMode":{"type":"string","enum":["prepaid","cod"]},"codAmountMinor":{"type":"number","description":"COD amount in paise"},"declaredValueMinor":{"type":"number","description":"Declared shipment value in paise (for insurance)"}},"required":["originPincode","destinationPincode","weightGrams","paymentMode"]},"CreateCourierDto":{"type":"object","properties":{"code":{"type":"string","example":"delhivery"},"displayName":{"type":"string"},"websiteUrl":{"type":"string"},"contactEmail":{"type":"string"},"logoUrl":{"type":"string"},"status":{"type":"string","enum":["sandbox","pilot","live","paused"]},"supportedServices":{"type":"array","items":{"type":"string","enum":["surface","express","same_day","next_day","reverse","b2b","heavy","international"]}},"apiAdapter":{"type":"object"},"notes":{"type":"object"}},"required":["code","displayName","supportedServices"]},"UpdateCourierDto":{"type":"object","properties":{"displayName":{"type":"string"},"websiteUrl":{"type":"string"},"contactEmail":{"type":"string"},"logoUrl":{"type":"string"},"status":{"type":"string","enum":["sandbox","pilot","live","paused"]},"supportedServices":{"type":"array","items":{"type":"string","enum":["surface","express","same_day","next_day","reverse","b2b","heavy","international"]}},"apiAdapter":{"type":"object"},"notes":{"type":"object"}}},"RateSlabDto":{"type":"object","properties":{"zone":{"type":"string","enum":["within_city","within_state","metro","rest_of_india","special"]},"upToWeightGrams":{"type":"number"},"baseChargeMinor":{"type":"number","description":"Base charge in paise"},"additionalPerSlabGrams":{"type":"number"},"additionalChargeMinor":{"type":"number","description":"Charge per additional slab in paise"}},"required":["zone","upToWeightGrams","baseChargeMinor","additionalPerSlabGrams","additionalChargeMinor"]},"CreateRateCardDto":{"type":"object","properties":{"courierId":{"type":"string"},"merchantId":{"type":"string","description":"Null = platform default; UUID = merchant override"},"serviceType":{"type":"string","enum":["surface","express","same_day","next_day","reverse","b2b","heavy","international"]},"slabs":{"type":"array","items":{"$ref":"#/components/schemas/RateSlabDto"}},"codFeePercent":{"type":"number","default":0},"codFeeMinAmountMinor":{"type":"number","default":0},"fuelSurchargePercent":{"type":"number","default":0},"rtoChargeMultiplier":{"type":"number","default":1},"reverseChargeMinor":{"type":"number","default":0},"gstPercent":{"type":"number","default":18},"volumetricDivisor":{"type":"number","default":5000},"notes":{"type":"string"}},"required":["courierId","serviceType","slabs"]},"UpsertCourierApiConfigDto":{"type":"object","properties":{"courierId":{"type":"string"},"environment":{"type":"string","enum":["sandbox","production"],"default":"sandbox"},"category":{"type":"string","enum":["b2c","b2b"],"default":"b2c","description":"b2c = standard parcel API · b2b = cargo / FTL / heavy API"},"baseUrl":{"type":"string","description":"Courier API base URL, e.g. https://track.delhivery.com"},"webhookUrl":{"type":"string"},"apiKey":{"type":"string","description":"API key — leave blank to keep existing"},"apiSecret":{"type":"string","description":"API secret — leave blank to keep existing"},"webhookSigningSecret":{"type":"string","description":"Webhook signing secret — leave blank to keep existing"},"customHeaders":{"type":"object","description":"Custom headers JSON object"},"notes":{"type":"string"}},"required":["courierId","baseUrl"]},"UpsertPlatformMarkupDto":{"type":"object","properties":{"id":{"type":"string","description":"Existing rule id (omit to create new)"},"courierId":{"type":"string","description":"Null = applies to all couriers"},"serviceType":{"type":"string","description":"Null = applies to all services for this courier"},"markupPercent":{"type":"number","description":"% of courier rate added as margin (0–100)"},"markupFixedMinor":{"type":"number","description":"Fixed margin per shipment in paise"},"platformFeeMinor":{"type":"number","description":"Per-shipment platform fee (running cost) in paise"},"displayLabel":{"type":"string","default":"Platform fee"},"isActive":{"type":"boolean","default":true},"effectiveFrom":{"type":"string"},"effectiveTo":{"type":"string"},"notes":{"type":"string"}},"required":["markupPercent","markupFixedMinor","platformFeeMinor"]},"DisputeDto":{"type":"object","properties":{"notes":{"type":"string"}},"required":["notes"]},"CreateClaimDto":{"type":"object","properties":{"shipmentId":{"type":"string"},"reweighWeightGrams":{"type":"number","minimum":1},"reweighLengthCm":{"type":"number"},"reweighBreadthCm":{"type":"number"},"reweighHeightCm":{"type":"number"},"reweighChargeableGrams":{"type":"number"},"claimedExtraChargeMinor":{"type":"number","description":"Extra charge in paise"},"courierClaimRef":{"type":"string"}},"required":["shipmentId","reweighWeightGrams","claimedExtraChargeMinor"]},"ArbitrateDto":{"type":"object","properties":{"decision":{"type":"string","enum":["courier","merchant"]},"notes":{"type":"string"}},"required":["decision","notes"]},"CancelDto":{"type":"object","properties":{"reason":{"type":"string"}},"required":["reason"]},"BulkCancelDto":{"type":"object","properties":{"orderIds":{"description":"Order IDs to cancel (max 200)","type":"array","items":{"type":"string"}}},"required":["orderIds"]},"BulkShipDto":{"type":"object","properties":{"orderIds":{"description":"Order IDs to ship (max 100)","type":"array","items":{"type":"string"}},"courierCode":{"type":"string","example":"delhivery"},"serviceType":{"type":"string","example":"surface"},"pickupLocationId":{"type":"string"}},"required":["orderIds","courierCode","serviceType","pickupLocationId"]},"OrderItemDto":{"type":"object","properties":{"sku":{"type":"string"},"name":{"type":"string"},"quantity":{"type":"number"},"unitPriceMinor":{"type":"number","description":"Unit price in paise"},"taxPercent":{"type":"number"},"hsnCode":{"type":"string"},"weightGrams":{"type":"number"}},"required":["name","quantity","unitPriceMinor"]},"AdditionalParcelDto":{"type":"object","properties":{"packageType":{"type":"string","description":"Optional package type, e.g. \"carton\", \"envelope\""},"weightGrams":{"type":"number","description":"Parcel weight in grams"},"lengthCm":{"type":"number"},"breadthCm":{"type":"number"},"heightCm":{"type":"number"},"contentSummary":{"type":"string","description":"Short description of contents (for label/manifest)"}},"required":["weightGrams"]},"CreateOrderDto":{"type":"object","properties":{"externalOrderRef":{"type":"string"},"paymentMode":{"type":"string","enum":["prepaid","cod","partial_cod"]},"codAmountMinor":{"type":"number"},"buyerName":{"type":"string"},"buyerPhone":{"type":"string"},"buyerEmail":{"type":"string"},"shippingAddressLine1":{"type":"string"},"shippingAddressLine2":{"type":"string"},"shippingCity":{"type":"string"},"shippingState":{"type":"string"},"shippingPincode":{"type":"string"},"weightGrams":{"type":"number","description":"Total parcel weight in grams"},"lengthCm":{"type":"number"},"breadthCm":{"type":"number"},"heightCm":{"type":"number"},"notes":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/components/schemas/OrderItemDto"}},"additionalParcels":{"description":"Additional boxes beyond Box 1 (which uses the order-level weight/dims). Order them as Box 2, Box 3, etc.","type":"array","items":{"$ref":"#/components/schemas/AdditionalParcelDto"}},"orderType":{"type":"string","enum":["parcel","b2b","cargo"],"default":"parcel"},"consigneeGstin":{"type":"string","description":"Buyer GSTIN (15 chars) — required when orderType=b2b"},"billingSameAsShipping":{"type":"boolean","default":true},"billingAddressLine1":{"type":"string"},"billingAddressLine2":{"type":"string"},"billingCity":{"type":"string"},"billingState":{"type":"string"},"billingPincode":{"type":"string"},"transportMode":{"type":"string","enum":["road","rail","air","ship"]},"vehicleNumber":{"type":"string","description":"Vehicle registration number, e.g. KA01AB1234"},"transporterId":{"type":"string","description":"NIC transporter ID"},"transporterName":{"type":"string"},"lrNumber":{"type":"string"}},"required":["paymentMode","buyerName","buyerPhone","shippingAddressLine1","shippingCity","shippingState","shippingPincode","weightGrams","items"]},"ShipOrderDto":{"type":"object","properties":{"courierCode":{"type":"string","example":"delhivery"},"serviceType":{"type":"string","example":"surface"},"pickupLocationId":{"type":"string","description":"Pickup location ID to ship from"},"weightFreeze":{"type":"boolean","description":"Enable Weight Freeze (platform absorbs billed-weight overage)"}},"required":["courierCode","serviceType","pickupLocationId"]},"BulkLabelsDto":{"type":"object","properties":{"shipmentIds":{"description":"Shipment IDs to print labels for (max 200)","type":"array","items":{"type":"string"}}},"required":["shipmentIds"]},"ManifestDto":{"type":"object","properties":{"shipmentIds":{"description":"Shipment IDs to include in the manifest (max 500)","type":"array","items":{"type":"string"}}},"required":["shipmentIds"]},"RtoActionBodyDto":{"type":"object","properties":{}},"CreateEwayBillDto":{"type":"object","properties":{"ebn":{"type":"string","description":"12-digit e-way bill number"},"validFrom":{"type":"string","description":"ISO date — when the bill becomes valid"},"validTo":{"type":"string","description":"ISO date — when the bill expires (1 day per 100 km from NIC)"},"vehicleNumber":{"type":"string","description":"Vehicle registration number, e.g. KA01AB1234"},"transporterId":{"type":"string"},"transporterName":{"type":"string"},"transportMode":{"type":"string","enum":["road","rail","air","ship"],"default":"road"},"distanceKm":{"type":"number"}},"required":["ebn","validFrom","validTo","vehicleNumber"]},"PushTrackingEventDto":{"type":"object","properties":{}},"UpdateAutoRuleDto":{"type":"object","properties":{"autoTriggerBuyerFlow":{"type":"boolean"},"maxAttemptsBeforeRto":{"type":"number","minimum":1,"maximum":10},"buyerFlowResendHours":{"type":"number","minimum":1,"maximum":168},"enabled":{"type":"boolean"}}},"ReattemptDto":{"type":"object","properties":{"notes":{"type":"string"}}},"UpdateAddressDto":{"type":"object","properties":{"line1":{"type":"string"},"line2":{"type":"string"},"landmark":{"type":"string"}},"required":["line1"]},"EscalateRtoDto":{"type":"object","properties":{"reason":{"type":"string"}},"required":["reason"]},"CancelNdrDto":{"type":"object","properties":{"reason":{"type":"string"}},"required":["reason"]},"BuyerActionDto":{"type":"object","properties":{"choice":{"type":"string","enum":["reschedule","update_address","cancel","self_collection"]},"newAddressLine1":{"type":"string"},"newAddressLine2":{"type":"string"},"newLandmark":{"type":"string"},"preferredSlot":{"type":"string"}},"required":["choice"]},"AdminReattemptDto":{"type":"object","properties":{}},"AdminUpdateAddressDto":{"type":"object","properties":{}},"AdminEscalateRtoDto":{"type":"object","properties":{}},"AdminCancelNdrDto":{"type":"object","properties":{}},"MerchantInitiateReturnDto":{"type":"object","properties":{"reason":{"type":"string","enum":["damaged","wrong_item","size_issue","quality_issue","not_as_described","no_longer_needed","other"]},"reasonNotes":{"type":"string"},"preferredAction":{"type":"string","enum":["refund","exchange"]},"forwardShipmentId":{"type":"string"}},"required":["reason","preferredAction","forwardShipmentId"]},"RejectReturnDto":{"type":"object","properties":{"reason":{"type":"string"}},"required":["reason"]},"SchedulePickupDto":{"type":"object","properties":{"courierCode":{"type":"string"}}},"QcDto":{"type":"object","properties":{"pass":{"type":"boolean"},"notes":{"type":"string"}},"required":["pass"]},"RefundDto":{"type":"object","properties":{"amountMinor":{"type":"number","description":"Refund amount in paise. Defaults to order total."}}},"CancelReturnDto":{"type":"object","properties":{"reason":{"type":"string"}},"required":["reason"]},"InitiateReturnDto":{"type":"object","properties":{"reason":{"type":"string","enum":["damaged","wrong_item","size_issue","quality_issue","not_as_described","no_longer_needed","other"]},"reasonNotes":{"type":"string"},"preferredAction":{"type":"string","enum":["refund","exchange"]}},"required":["reason","preferredAction"]},"CreateRemittanceRunDto":{"type":"object","properties":{"merchantId":{"type":"string"},"scheduledFor":{"type":"string","description":"ISO date-time when the run should be paid out"},"feeMinor":{"type":"number","description":"Optional flat fee (paise) to withhold from gross"},"notes":{"type":"string"}},"required":["merchantId","scheduledFor"]},"MarkRemittancePaidDto":{"type":"object","properties":{"bankUtr":{"type":"string","description":"Bank UTR / reference number from the settlement"}},"required":["bankUtr"]},"MarkRemittanceFailedDto":{"type":"object","properties":{"reason":{"type":"string"}},"required":["reason"]},"GenerateInvoiceDto":{"type":"object","properties":{"merchantId":{"type":"string"},"periodStart":{"type":"string","description":"ISO date for the first day of the billing period"},"periodEnd":{"type":"string","description":"ISO date for the last day (inclusive)"}},"required":["merchantId","periodStart","periodEnd"]},"VoidInvoiceDto":{"type":"object","properties":{"reason":{"type":"string"}},"required":["reason"]},"UpsertAnnouncementDto":{"type":"object","properties":{"title":{"type":"string"},"body":{"type":"string"},"severity":{"type":"string","enum":["info","warning","critical","changelog"]},"audience":{"type":"string","enum":["all","merchants","partners"]},"targetOrgIds":{"description":"Org IDs to target — empty = everyone in audience","type":"array","items":{"type":"string"}},"ctaLabel":{"type":"string"},"ctaUrl":{"type":"string"},"publishedAt":{"type":"string"},"expiresAt":{"type":"string"}},"required":["title","body","severity","audience"]},"UpsertFeatureFlagDto":{"type":"object","properties":{"key":{"type":"string","description":"Flag identifier — snake_case or dotted"},"description":{"type":"string"},"defaultState":{"type":"string","enum":["on","off","percentage"]},"rolloutPercent":{"type":"number"}},"required":["key","description","defaultState","rolloutPercent"]},"SetFeatureFlagOverrideDto":{"type":"object","properties":{"merchantId":{"type":"string"},"enabled":{"type":"boolean"},"note":{"type":"string"}},"required":["merchantId","enabled"]},"SlabDto":{"type":"object","properties":{"fromGrams":{"type":"number"},"toGrams":{"type":"object","description":"null = open-ended top slab"},"baseMinor":{"type":"number","description":"Base charge for the slab in paise"},"additionalMinor":{"type":"number","description":"Additional per 500g in paise"}},"required":["fromGrams","baseMinor","additionalMinor"]},"CreateRateProposalDto":{"type":"object","properties":{"serviceType":{"type":"string","example":"surface"},"slabs":{"type":"array","items":{"$ref":"#/components/schemas/SlabDto"}},"codFeePercent":{"type":"number"},"fuelSurchargePercent":{"type":"number"},"rtoChargeMultiplier":{"type":"number"},"gstPercent":{"type":"number"},"volumetricDivisor":{"type":"number"},"effectiveFrom":{"type":"string","description":"ISO date when this rate should take effect"},"notes":{"type":"string"}},"required":["serviceType","slabs","codFeePercent","fuelSurchargePercent","rtoChargeMultiplier","gstPercent","volumetricDivisor","effectiveFrom"]},"ReviewRateProposalDto":{"type":"object","properties":{"reviewNotes":{"type":"string"}}},"RejectRateProposalDto":{"type":"object","properties":{"reason":{"type":"string"}},"required":["reason"]},"SubmitPublicGrievanceDto":{"type":"object","properties":{"name":{"type":"string","example":"Priya Sharma","description":"Full name of the person filing the grievance"},"email":{"type":"string","example":"priya@example.com","description":"Email address where we will acknowledge the grievance"},"subject":{"type":"string","example":"Shipment stuck in transit for 15 days","description":"Short title of the grievance"},"message":{"type":"string","example":"My order with AWB DL1234567890 was picked up on 2026-09-20 but has not moved since 2026-09-23. The merchant tells me to contact you.","description":"Full grievance text (up to 4000 chars)"},"category":{"type":"string","enum":["order_issue","shipment_problem","weight_dispute","billing","kyc","api_integration","general","grievance","other"],"example":"shipment_problem","description":"Category for routing (defaults to `grievance` when omitted)"}},"required":["name","email","subject","message"]},"RespondGrievanceDto":{"type":"object","properties":{}},"ResolveGrievanceDto":{"type":"object","properties":{}}}}}