{ "openapi": "3.0.0", "paths": { "/minimal": { "get": { "operationId": "MinimalController_getMinimal", "parameters": [], "responses": { "200": { "description": "Success" } }, "summary": "Minimal endpoint for OpenAPI generation", "tags": [ "System" ] } }, "/invoices": { "get": { "description": "Retrieves invoices for the authenticated user with pagination and optional status filtering", "operationId": "InvoicesController_getInvoices", "parameters": [ { "name": "status", "required": false, "in": "query", "description": "Filter by invoice status", "schema": { "type": "string" } }, { "name": "limit", "required": false, "in": "query", "description": "Items per page (default: 10)", "schema": { "type": "number" } }, { "name": "page", "required": false, "in": "query", "description": "Page number (default: 1)", "schema": { "type": "number" } } ], "responses": { "200": { "description": "List of invoices with pagination", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InvoiceListDto" } } } } }, "security": [ { "bearer": [] } ], "summary": "Get paginated list of user invoices", "tags": [ "invoices" ] } }, "/invoices/payment-methods": { "get": { "description": "Retrieves all saved payment methods for the authenticated user", "operationId": "InvoicesController_getPaymentMethods", "parameters": [], "responses": { "200": { "description": "List of payment methods" } }, "security": [ { "bearer": [] } ], "summary": "Get user payment methods", "tags": [ "invoices" ] } }, "/invoices/payment-gateways": { "get": { "description": "Retrieves all active payment gateways available for payments", "operationId": "InvoicesController_getPaymentGateways", "parameters": [], "responses": { "200": { "description": "List of payment gateways" } }, "security": [ { "bearer": [] } ], "summary": "Get available payment gateways", "tags": [ "invoices" ] } }, "/invoices/payment-methods/refresh": { "post": { "description": "Invalidates and refreshes payment methods cache for the current user", "operationId": "InvoicesController_refreshPaymentMethods", "parameters": [], "responses": { "200": { "description": "Payment methods cache refreshed" } }, "security": [ { "bearer": [] } ], "summary": "Refresh payment methods cache", "tags": [ "invoices" ] } }, "/invoices/{id}": { "get": { "description": "Retrieves detailed information for a specific invoice", "operationId": "InvoicesController_getInvoiceById", "parameters": [ { "name": "id", "required": true, "in": "path", "description": "Invoice ID", "schema": { "type": "number" } } ], "responses": { "200": { "description": "Invoice details", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InvoiceDto" } } } }, "404": { "description": "Invoice not found" } }, "security": [ { "bearer": [] } ], "summary": "Get invoice details by ID", "tags": [ "invoices" ] } }, "/invoices/{id}/subscriptions": { "get": { "description": "Retrieves all subscriptions that are referenced in the invoice items", "operationId": "InvoicesController_getInvoiceSubscriptions", "parameters": [ { "name": "id", "required": true, "in": "path", "description": "Invoice ID", "schema": { "type": "number" } } ], "responses": { "200": { "description": "List of related subscriptions" }, "404": { "description": "Invoice not found" } }, "security": [ { "bearer": [] } ], "summary": "Get subscriptions related to an invoice", "tags": [ "invoices" ] } }, "/invoices/{id}/sso-link": { "post": { "description": "Generates a single sign-on link to view/pay the invoice or download PDF in WHMCS", "operationId": "InvoicesController_createSsoLink", "parameters": [ { "name": "target", "required": false, "in": "query", "description": "Link target: view invoice, download PDF, or go to payment page (default: view)", "schema": { "enum": [ "view", "download", "pay" ], "type": "string" } }, { "name": "id", "required": true, "in": "path", "description": "Invoice ID", "schema": { "type": "number" } } ], "responses": { "200": { "description": "SSO link created successfully" }, "404": { "description": "Invoice not found" } }, "security": [ { "bearer": [] } ], "summary": "Create SSO link for invoice", "tags": [ "invoices" ] } }, "/invoices/{id}/payment-link": { "post": { "description": "Generates a payment link for the invoice with a specific payment method or gateway", "operationId": "InvoicesController_createPaymentLink", "parameters": [ { "name": "gatewayName", "required": false, "in": "query", "description": "Payment gateway name", "schema": { "type": "string" } }, { "name": "paymentMethodId", "required": false, "in": "query", "description": "Payment method ID", "schema": { "type": "number" } }, { "name": "id", "required": true, "in": "path", "description": "Invoice ID", "schema": { "type": "number" } } ], "responses": { "200": { "description": "Payment link created successfully" }, "404": { "description": "Invoice not found" } }, "security": [ { "bearer": [] } ], "summary": "Create payment link for invoice with payment method", "tags": [ "invoices" ] } } }, "info": { "title": "Customer Portal API", "description": "Backend for Frontend API for customer portal", "version": "1.0", "contact": {} }, "tags": [], "servers": [], "components": { "securitySchemes": { "bearer": { "scheme": "bearer", "bearerFormat": "JWT", "type": "http" } }, "schemas": { "InvoiceListDto": { "type": "object", "properties": { "invoices": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 }, "number": { "type": "string", "minLength": 1 }, "status": { "type": "string", "enum": [ "Draft", "Pending", "Paid", "Unpaid", "Overdue", "Cancelled", "Refunded", "Collections" ] }, "currency": { "type": "string", "minLength": 1 }, "currencySymbol": { "type": "string", "minLength": 1 }, "total": { "type": "number" }, "subtotal": { "type": "number" }, "tax": { "type": "number" }, "issuedAt": { "type": "string" }, "dueDate": { "type": "string" }, "paidDate": { "type": "string" }, "pdfUrl": { "type": "string" }, "paymentUrl": { "type": "string" }, "description": { "type": "string" }, "items": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 }, "description": { "type": "string", "minLength": 1 }, "amount": { "type": "number" }, "quantity": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 }, "type": { "type": "string", "minLength": 1 }, "serviceId": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 } }, "required": [ "id", "description", "amount", "type" ] } }, "daysOverdue": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 } }, "required": [ "id", "number", "status", "currency", "total", "subtotal", "tax" ] } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }, "totalPages": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }, "totalItems": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }, "nextCursor": { "type": "string" } }, "required": [ "page", "totalPages", "totalItems" ] } }, "required": [ "invoices", "pagination" ] }, "InvoiceDto": { "type": "object", "properties": { "id": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 }, "number": { "type": "string", "minLength": 1 }, "status": { "type": "string", "enum": [ "Draft", "Pending", "Paid", "Unpaid", "Overdue", "Cancelled", "Refunded", "Collections" ] }, "currency": { "type": "string", "minLength": 1 }, "currencySymbol": { "type": "string", "minLength": 1 }, "total": { "type": "number" }, "subtotal": { "type": "number" }, "tax": { "type": "number" }, "issuedAt": { "type": "string" }, "dueDate": { "type": "string" }, "paidDate": { "type": "string" }, "pdfUrl": { "type": "string" }, "paymentUrl": { "type": "string" }, "description": { "type": "string" }, "items": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 }, "description": { "type": "string", "minLength": 1 }, "amount": { "type": "number" }, "quantity": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 }, "type": { "type": "string", "minLength": 1 }, "serviceId": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 } }, "required": [ "id", "description", "amount", "type" ] } }, "daysOverdue": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 } }, "required": [ "id", "number", "status", "currency", "total", "subtotal", "tax" ] } } } }