openapi: 3.0.3 info: { title: Payment API, version: 1.0.0 } servers: [ { url: https://your-domain.com/api/v1 } ] tags: [ { name: Payments } ] security: [ { bearerAuth: [] } ] paths: /payments: get: tags: [Payments] summary: List payments parameters: - in: query name: page schema: { type: integer, default: 1 } - in: query name: per_page schema: { type: integer, default: 20 } - in: query name: parent_id schema: { type: integer } - in: query name: status schema: { type: string } responses: "200": { description: Payments retrieved } post: tags: [Payments] summary: Create payment requestBody: required: true content: application/json: schema: type: object required: [parent_id, invoice_id, total_amount, payment_method, payment_date] properties: parent_id: { type: integer } invoice_id: { type: integer } total_amount: { type: number } paid_amount: { type: number } balance: { type: number } number_of_installments: { type: integer } payment_method: { type: string } payment_date: { type: string, format: date } check_number: { type: string } status: { type: string } responses: "201": { description: Payment created } /payments/{id}: get: tags: [Payments] summary: Get payment by ID parameters: - in: path name: id required: true schema: { type: integer } responses: "200": { description: Payment } "404": { description: Not found } put: tags: [Payments] summary: Update payment parameters: - in: path name: id required: true schema: { type: integer } requestBody: required: true content: application/json: schema: type: object properties: paid_amount: { type: number } balance: { type: number } status: { type: string } payment_method: { type: string } payment_date: { type: string, format: date } check_number: { type: string } responses: "200": { description: Payment updated } delete: tags: [Payments] summary: Delete payment parameters: - in: path name: id required: true schema: { type: integer } responses: "200": { description: Payment deleted } /payments/parent/{id}: get: tags: [Payments] summary: List payments by parent parameters: - in: path name: id required: true schema: { type: integer } responses: "200": { description: Parent payments list }