{
    "variable": [
        {
            "id": "baseUrl",
            "key": "baseUrl",
            "type": "string",
            "name": "string",
            "value": "https:\/\/vorgio.app"
        }
    ],
    "info": {
        "name": "accounting API",
        "_postman_id": "97356a72-14d9-476e-b97e-032d7a3acfae",
        "description": "Public REST API for managing clients, invoices, and recurring forecasts. Authenticated with Sanctum personal access tokens, scoped to a single team.",
        "schema": "https:\/\/schema.getpostman.com\/json\/collection\/v2.1.0\/collection.json"
    },
    "item": [
        {
            "name": "Checkout intents",
            "description": "\nTwo-step checkout for the JS widget (sub-plan 11 \u00a76):\n\n  1. Shop's server: `POST \/v1\/checkout-intents` (Bearer token,\n     `checkouts:write`). Stores the payload, returns id + one-shot\n     `client_secret`.\n  2. Browser (`vorgio.js`): `POST \/v1\/checkout-intents\/{id}\/confirm` with\n     the `client_secret`. No Sanctum auth \u2014 the secret IS the credential.\n     The same {@see CreateCheckout} composition that backs `\/v1\/checkouts`\n     runs, so the contract surface for shop integrators stays one shape.",
            "item": [
                {
                    "name": "Create a checkout intent.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/checkout-intents",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/checkout-intents"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Idempotency-Key",
                                "value": "Required."
                            },
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"client\":{\"name\":\"z\",\"name_addition\":\"m\",\"address\":\"i\",\"address_addition\":\"y\",\"zip\":\"vdljnikhwaykcmyu\",\"city\":\"w\",\"country\":\"pw\",\"email\":\"emelie.baumbach@example.net\",\"email_cc\":[\"s\"],\"email_text\":\"architecto\",\"language\":\"en\",\"rate\":39,\"vat\":7,\"default_position_mode\":\"hourly\",\"invoice_note\":\"architecto\",\"iban\":\"n\",\"bic\":\"gzmiyv\",\"vat_id\":\"d\",\"buyer_reference\":\"l\",\"e_invoice_format\":\"none\",\"external_id\":\"j\"},\"invoice\":{\"positions\":[{\"id\":\"977e5426-8d13-3824-86aa-b092f8ae52c5\",\"date\":\"2026-05-18T10:08:43\",\"mode\":\"fixed\",\"description\":\"Fugiat sunt nihil accusantium harum mollitia.\",\"hours\":4326.41688,\"amount_cents\":16}],\"tax_rate\":17,\"billing_date\":\"2026-05-18T10:08:43\",\"billing_period\":\"ikhwayk\",\"due_offset_days\":8,\"due_at\":\"2026-05-18T10:08:43\",\"subject\":\"m\",\"salutation\":\"y\",\"description\":\"Eius et animi quos velit et.\",\"note\":\"architecto\",\"every\":\"monthly\",\"next_invoice_at\":\"2026-05-18T10:08:43\"},\"send\":{\"subject\":\"b\",\"body\":\"n\",\"cc\":[\"g\"]},\"return_url\":\"http:\\\/\\\/bailey.com\\\/\"}"
                        },
                        "description": "Server-to-server. Validates the same body shape as `POST \/v1\/checkouts`\n(plus an optional `return_url`) and stores it for the browser to\nconfirm."
                    },
                    "response": []
                },
                {
                    "name": "Confirm a checkout intent.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/checkout-intents\/:id\/confirm",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/checkout-intents\/:id\/confirm",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": "architecto",
                                    "description": "The ID of the checkout intent."
                                }
                            ]
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"client_secret\":\"b\"}"
                        },
                        "description": "Public endpoint \u2014 authenticated only by the `client_secret` body\nfield. One-shot: a second confirm returns 409. Composes the same\nclient + invoice + send flow as `\/v1\/checkouts`."
                    },
                    "response": []
                }
            ]
        },
        {
            "name": "Checkouts",
            "description": "\nHigh-level integration endpoint for third-party shops. One call creates or\nupdates the customer (`client.external_id` keyed per team), issues a\ngapless-numbered invoice, and queues the invoice email. The shop receives\n`invoice.sent` and `invoice.paid` webhook events for fulfilment.",
            "item": [
                {
                    "name": "Create a checkout",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/checkouts",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/checkouts"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Idempotency-Key",
                                "value": "Required."
                            },
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"client\":{\"name\":\"architecto\",\"name_addition\":\"m\",\"address\":\"architecto\",\"address_addition\":\"y\",\"zip\":\"architecto\",\"city\":\"architecto\",\"country\":\"architecto\",\"email\":\"gbailey@example.net\",\"email_cc\":[\"s\"],\"email_text\":\"architecto\",\"language\":\"en\",\"rate\":16,\"vat\":4326.41688,\"default_position_mode\":\"fixed\",\"invoice_note\":\"architecto\",\"iban\":\"n\",\"bic\":\"gzmiyv\",\"vat_id\":\"d\",\"buyer_reference\":\"l\",\"e_invoice_format\":\"xrechnung\",\"external_id\":\"architecto\"},\"invoice\":{\"positions\":[{\"id\":\"architecto\",\"date\":\"architecto\",\"mode\":\"hourly\",\"description\":\"Eius et animi quos velit et.\",\"hours\":4326.41688,\"amount_cents\":16}],\"tax_rate\":4326.41688,\"billing_date\":\"2026-05-18T10:08:43\",\"billing_period\":\"ikhwayk\",\"due_offset_days\":16,\"due_at\":\"2026-05-18T10:08:43\",\"subject\":\"architecto\",\"salutation\":\"y\",\"description\":\"Eius et animi quos velit et.\",\"note\":\"architecto\",\"every\":\"quarterly\",\"next_invoice_at\":\"2026-05-18T10:08:43\"},\"send\":{\"subject\":\"architecto\",\"body\":\"architecto\",\"cc\":[\"architecto\"]},\"metadata\":[]}"
                        },
                        "description": "Wraps client find-or-create + invoice creation + invoice email send\ninto one idempotent call."
                    },
                    "response": []
                }
            ]
        },
        {
            "name": "Clients",
            "description": "\nManage the clients (customers) inside your team.",
            "item": [
                {
                    "name": "List clients",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/clients",
                            "query": [
                                {
                                    "key": "limit",
                                    "value": "25",
                                    "description": "Page size (max 100).",
                                    "disabled": false
                                },
                                {
                                    "key": "cursor",
                                    "value": "architecto",
                                    "description": "Opaque cursor returned in `meta.next_cursor`. Example:",
                                    "disabled": false
                                }
                            ],
                            "raw": "{{baseUrl}}\/api\/v1\/clients?limit=25&cursor=architecto"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Returns the team's clients, cursor-paginated."
                    },
                    "response": [
                        {
                            "header": [
                                {
                                    "key": "content-type",
                                    "value": "application\/problem+json"
                                },
                                {
                                    "key": "cache-control",
                                    "value": "no-cache, private"
                                }
                            ],
                            "code": 401,
                            "body": "{\"type\":\"https:\\\/\\\/accounting.example\\\/problems\\\/unauthenticated\",\"title\":\"Unauthenticated\",\"status\":401,\"detail\":\"Unauthenticated.\"}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Create a client",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/clients",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/clients"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Idempotency-Key",
                                "value": "Required. Unique per logical request; replays return the original response with `Idempotency-Replay: true`."
                            },
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"team_id\":16,\"name\":\"Acme GmbH\",\"name_addition\":\"Berlin Office\",\"address\":\"Musterstra\u00dfe 1\",\"address_addition\":\"architecto\",\"zip\":\"10115\",\"city\":\"Berlin\",\"country\":\"DE\",\"email\":\"billing@acme.example\",\"email_cc\":[\"accounting@acme.example\"],\"email_text\":\"architecto\",\"language\":\"de\",\"rate\":12000,\"vat\":19,\"default_position_mode\":\"hourly\",\"invoice_note\":\"architecto\",\"iban\":\"architecto\",\"bic\":\"architecto\",\"vat_id\":\"architecto\",\"buyer_reference\":\"04011000-12345-34\",\"e_invoice_format\":\"xrechnung\",\"external_id\":\"j\"}"
                        },
                        "description": ""
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 201,
                            "body": "{\"data\": {\"id\": \"0193f7b0-1b8a-7b7d-9ad0-0c7b5b1d5f3e\", \"name\": \"Acme GmbH\"}}",
                            "name": "created"
                        }
                    ]
                },
                {
                    "name": "Get a client",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/clients\/:id",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/clients\/:id",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": "014b17a6-c8e3-45c2-a2ff-78b1449daa26",
                                    "description": "The ID of the client."
                                },
                                {
                                    "id": "client",
                                    "key": "client",
                                    "value": "architecto",
                                    "description": "Client UUID."
                                }
                            ]
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": ""
                    },
                    "response": [
                        {
                            "header": [
                                {
                                    "key": "content-type",
                                    "value": "application\/problem+json"
                                },
                                {
                                    "key": "cache-control",
                                    "value": "no-cache, private"
                                }
                            ],
                            "code": 401,
                            "body": "{\"type\":\"https:\\\/\\\/accounting.example\\\/problems\\\/unauthenticated\",\"title\":\"Unauthenticated\",\"status\":401,\"detail\":\"Unauthenticated.\"}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Update a client",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/clients\/:id",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/clients\/:id",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": "014b17a6-c8e3-45c2-a2ff-78b1449daa26",
                                    "description": "The ID of the client."
                                },
                                {
                                    "id": "client",
                                    "key": "client",
                                    "value": "architecto",
                                    "description": "Client UUID."
                                }
                            ]
                        },
                        "method": "PATCH",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"team_id\":16,\"name\":\"n\",\"name_addition\":\"g\",\"address\":\"z\",\"address_addition\":\"m\",\"zip\":\"iyvdljnikhwaykcm\",\"city\":\"y\",\"country\":\"uw\",\"email\":\"theo.hauck@example.com\",\"email_cc\":[\"w\"],\"email_text\":\"architecto\",\"language\":\"en\",\"rate\":39,\"vat\":7,\"default_position_mode\":\"fixed\",\"invoice_note\":\"architecto\",\"iban\":\"n\",\"bic\":\"gzmiyv\",\"vat_id\":\"d\",\"buyer_reference\":\"l\",\"e_invoice_format\":\"xrechnung\",\"external_id\":\"j\"}"
                        },
                        "description": "Same body shape as create. Pass only the fields you want to change."
                    },
                    "response": []
                },
                {
                    "name": "Delete a client",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/clients\/:id",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/clients\/:id",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": "014b17a6-c8e3-45c2-a2ff-78b1449daa26",
                                    "description": "The ID of the client."
                                },
                                {
                                    "id": "client",
                                    "key": "client",
                                    "value": "architecto",
                                    "description": "Client UUID."
                                }
                            ]
                        },
                        "method": "DELETE",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Soft-delete. Refused with 409 if the client has any invoice still inside its 10-year legal-retention window."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 204,
                            "body": "",
                            "name": "deleted"
                        },
                        {
                            "header": [],
                            "code": 409,
                            "body": "{\"type\": \"https:\/\/accounting.example\/problems\/client-has-retained-invoices\", \"title\": \"Client has retained invoices\", \"status\": 409}",
                            "name": "retained invoices exist"
                        }
                    ]
                }
            ]
        },
        {
            "name": "Invoices",
            "description": "\nCreate, send, and manage invoices and offers.",
            "item": [
                {
                    "name": "List invoices",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/invoices",
                            "query": [
                                {
                                    "key": "limit",
                                    "value": "25",
                                    "description": "Page size (max 100).",
                                    "disabled": false
                                },
                                {
                                    "key": "cursor",
                                    "value": "architecto",
                                    "description": "Opaque cursor returned in `meta.next_cursor`. Example:",
                                    "disabled": false
                                },
                                {
                                    "key": "include",
                                    "value": "drafts",
                                    "description": "Use `drafts` to include draft invoices.",
                                    "disabled": false
                                }
                            ],
                            "raw": "{{baseUrl}}\/api\/v1\/invoices?limit=25&cursor=architecto&include=drafts"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Returns the team's invoices, cursor-paginated. Drafts are hidden by default \u2014 pass `?include=drafts` (or `?include_drafts=1`) to include them."
                    },
                    "response": [
                        {
                            "header": [
                                {
                                    "key": "content-type",
                                    "value": "application\/problem+json"
                                },
                                {
                                    "key": "cache-control",
                                    "value": "no-cache, private"
                                }
                            ],
                            "code": 401,
                            "body": "{\"type\":\"https:\\\/\\\/accounting.example\\\/problems\\\/unauthenticated\",\"title\":\"Unauthenticated\",\"status\":401,\"detail\":\"Unauthenticated.\"}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Create an invoice",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/invoices",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/invoices"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Idempotency-Key",
                                "value": "Required."
                            },
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"team_id\":16,\"client_id\":\"architecto\",\"type\":\"invoice\",\"tax_rate\":19,\"billing_date\":\"2026-05-07\",\"billing_period\":\"miyvdlj\",\"due_offset_days\":14,\"due_at\":\"2026-05-18T10:08:43\",\"paid_at\":\"2026-05-18T10:08:43\",\"every\":\"daily\",\"next_invoice_at\":\"architecto\",\"is_draft\":false,\"subject\":\"architecto\",\"salutation\":\"architecto\",\"description\":\"Eius et animi quos velit et.\",\"note\":\"architecto\",\"positions\":[{\"id\":\"architecto\",\"date\":\"architecto\",\"mode\":\"hourly\",\"description\":\"Eius et animi quos velit et.\",\"hours\":4326.41688,\"amount_cents\":16}]}"
                        },
                        "description": ""
                    },
                    "response": []
                },
                {
                    "name": "Get an invoice",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/invoices\/:id",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/invoices\/:id",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": "019e167c-cbf7-73fe-94e0-c99b6907e435",
                                    "description": "The ID of the invoice."
                                },
                                {
                                    "id": "invoice",
                                    "key": "invoice",
                                    "value": "architecto",
                                    "description": "Invoice UUID."
                                }
                            ]
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": ""
                    },
                    "response": [
                        {
                            "header": [
                                {
                                    "key": "content-type",
                                    "value": "application\/problem+json"
                                },
                                {
                                    "key": "cache-control",
                                    "value": "no-cache, private"
                                }
                            ],
                            "code": 401,
                            "body": "{\"type\":\"https:\\\/\\\/accounting.example\\\/problems\\\/unauthenticated\",\"title\":\"Unauthenticated\",\"status\":401,\"detail\":\"Unauthenticated.\"}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Update an invoice",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/invoices\/:id",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/invoices\/:id",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": "019e167c-cbf7-73fe-94e0-c99b6907e435",
                                    "description": "The ID of the invoice."
                                },
                                {
                                    "id": "invoice",
                                    "key": "invoice",
                                    "value": "architecto",
                                    "description": "Invoice UUID."
                                }
                            ]
                        },
                        "method": "PATCH",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"team_id\":16,\"client_id\":\"a4855dc5-0acb-33c3-b921-f4291f719ca0\",\"type\":\"invoice\",\"tax_rate\":16,\"billing_date\":\"2026-05-18T10:08:43\",\"billing_period\":\"miyvdlj\",\"due_offset_days\":17,\"due_at\":\"2026-05-18T10:08:43\",\"paid_at\":\"2026-05-18T10:08:43\",\"every\":\"monthly\",\"next_invoice_at\":\"2052-06-10\",\"is_draft\":true,\"subject\":\"n\",\"salutation\":\"g\",\"description\":\"Eius et animi quos velit et.\",\"note\":\"architecto\",\"positions\":[{\"id\":\"6ff8f7f6-1eb3-3525-be4a-3932c805afed\",\"date\":\"2026-05-18T10:08:43\",\"mode\":\"hourly\",\"description\":\"Animi quos velit et fugiat.\",\"hours\":4326.41688,\"amount_cents\":16}]}"
                        },
                        "description": "Same body shape as create. A draft invoice gets its gapless number assigned the moment `is_draft` flips to `false`."
                    },
                    "response": []
                },
                {
                    "name": "Delete an invoice",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/invoices\/:id",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/invoices\/:id",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": "019e167c-cbf7-73fe-94e0-c99b6907e435",
                                    "description": "The ID of the invoice."
                                },
                                {
                                    "id": "invoice",
                                    "key": "invoice",
                                    "value": "architecto",
                                    "description": "Invoice UUID."
                                }
                            ]
                        },
                        "method": "DELETE",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Soft-delete, restricted to true drafts. Finalised \/ sent invoices must\nbe reversed via Stornorechnung \u2014 `POST \/v1\/invoices\/{id}\/cancel`.\nRecurring templates must be stopped via\n`POST \/v1\/invoices\/{id}\/stop-recurring`."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 204,
                            "body": "",
                            "name": "deleted"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "",
                            "name": "finalised invoice \u2014 use \/cancel"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "",
                            "name": "recurring template \u2014 use \/stop-recurring"
                        }
                    ]
                },
                {
                    "name": "Download the invoice PDF",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/invoices\/:invoice_id\/pdf",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/invoices\/:invoice_id\/pdf",
                            "variable": [
                                {
                                    "id": "invoice_id",
                                    "key": "invoice_id",
                                    "value": "019e167c-cbf7-73fe-94e0-c99b6907e435",
                                    "description": "The ID of the invoice."
                                },
                                {
                                    "id": "invoice",
                                    "key": "invoice",
                                    "value": "architecto",
                                    "description": "Invoice UUID."
                                }
                            ]
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Returns the rendered PDF as `application\/pdf`. The response carries an `ETag` keyed on `(invoice.id, invoice.updated_at)`. Send `If-None-Match: <etag>` to get a 304 when the PDF hasn't changed. The PDF is regenerated on cache miss and stored on the `pdf-cache` disk for 7 days."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "",
                            "name": "pdf bytes"
                        },
                        {
                            "header": [],
                            "code": 304,
                            "body": "",
                            "name": "not modified"
                        }
                    ]
                },
                {
                    "name": "Send an invoice by email",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/invoices\/:invoice_id\/send",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/invoices\/:invoice_id\/send",
                            "variable": [
                                {
                                    "id": "invoice_id",
                                    "key": "invoice_id",
                                    "value": "019e167c-cbf7-73fe-94e0-c99b6907e435",
                                    "description": "The ID of the invoice."
                                },
                                {
                                    "id": "invoice",
                                    "key": "invoice",
                                    "value": "architecto",
                                    "description": "Invoice UUID."
                                }
                            ]
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Idempotency-Key",
                                "value": "Required."
                            },
                            {
                                "key": "Content-Type",
                                "value": "multipart\/form-data"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "formdata",
                            "formdata": [
                                {
                                    "key": "cc[0]",
                                    "value": "architecto",
                                    "type": "text",
                                    "description": ""
                                },
                                {
                                    "key": "subject",
                                    "value": "Your invoice INV-2026-0042",
                                    "type": "text",
                                    "description": "Mail subject."
                                },
                                {
                                    "key": "body",
                                    "value": "Please find attached\u2026",
                                    "type": "text",
                                    "description": "Mail body (plain text)."
                                },
                                {
                                    "key": "attachments[]",
                                    "src": [],
                                    "type": "file"
                                }
                            ]
                        },
                        "description": "Queues a `SendInvoiceMail` job. The mail is rendered in the **client's** language (`clients.language`), not the caller's. Returns `202 Accepted` immediately with a `mail_event_id` that can be correlated with the `mail_events` table once the worker has run."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 202,
                            "body": "{\"mail_event_id\": \"0193f7b0-1b8a-7b7d-9ad0-0c7b5b1d5f3e\", \"status\": \"queued\"}",
                            "name": "queued"
                        }
                    ]
                },
                {
                    "name": "Mark an invoice as paid",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/invoices\/:invoice_id\/mark-paid",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/invoices\/:invoice_id\/mark-paid",
                            "variable": [
                                {
                                    "id": "invoice_id",
                                    "key": "invoice_id",
                                    "value": "019e167c-cbf7-73fe-94e0-c99b6907e435",
                                    "description": "The ID of the invoice."
                                },
                                {
                                    "id": "invoice",
                                    "key": "invoice",
                                    "value": "architecto",
                                    "description": "Invoice UUID."
                                }
                            ]
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Idempotency-Key",
                                "value": "Required."
                            },
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"paid_at\":\"2026-05-07\"}"
                        },
                        "description": ""
                    },
                    "response": []
                },
                {
                    "name": "Stop a recurring invoice template",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/invoices\/:invoice_id\/stop-recurring",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/invoices\/:invoice_id\/stop-recurring",
                            "variable": [
                                {
                                    "id": "invoice_id",
                                    "key": "invoice_id",
                                    "value": "019e167c-cbf7-73fe-94e0-c99b6907e435",
                                    "description": "The ID of the invoice."
                                },
                                {
                                    "id": "invoice",
                                    "key": "invoice",
                                    "value": "architecto",
                                    "description": "Invoice UUID."
                                }
                            ]
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Idempotency-Key",
                                "value": "Required."
                            },
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Sets `every` to `null` so the scheduler stops generating further\nchildren, and stamps `recurring_stopped_at`. The template stays visible\nwith its full history. Idempotent: a second call returns the same\nresource."
                    },
                    "response": []
                },
                {
                    "name": "Change the cadence of a recurring invoice template",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/invoices\/:invoice_id\/change-cycle",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/invoices\/:invoice_id\/change-cycle",
                            "variable": [
                                {
                                    "id": "invoice_id",
                                    "key": "invoice_id",
                                    "value": "019e167c-cbf7-73fe-94e0-c99b6907e435",
                                    "description": "The ID of the invoice."
                                },
                                {
                                    "id": "invoice",
                                    "key": "invoice",
                                    "value": "architecto",
                                    "description": "Invoice UUID."
                                }
                            ]
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Idempotency-Key",
                                "value": "Required."
                            },
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"every\":\"yearly\",\"next_invoice_at\":\"2026-06-15\"}"
                        },
                        "description": "Mutates `every` (required) and `next_invoice_at` (optional \u2014 derived\nfrom current `next_invoice_at` + new cadence when omitted). Rejected\nwith 422 if `every` is currently `null` (the template was stopped \u2014\nstart a new one instead). Idempotent: a second call with the same\npayload returns the same resource."
                    },
                    "response": []
                },
                {
                    "name": "Cancel an invoice via Stornorechnung",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/invoices\/:invoice_id\/cancel",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/invoices\/:invoice_id\/cancel",
                            "variable": [
                                {
                                    "id": "invoice_id",
                                    "key": "invoice_id",
                                    "value": "019e167c-cbf7-73fe-94e0-c99b6907e435",
                                    "description": "The ID of the invoice."
                                },
                                {
                                    "id": "invoice",
                                    "key": "invoice",
                                    "value": "architecto",
                                    "description": "Invoice UUID."
                                }
                            ]
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Idempotency-Key",
                                "value": "Required."
                            },
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"reason\":\"customer downgraded\"}"
                        },
                        "description": "Issues a Stornorechnung (negative-amount reversing invoice) that\nlegally cancels the original under UStG \u00a714c \/ GoBD. Returns the\nnew Stornorechnung resource (not the original). Idempotent via the\n`Idempotency-Key` header: a second call with the same key replays\nthe same response. Rejected with 422 if the invoice is not in a\ncancellable state (draft, offer, already a Storno, already cancelled)."
                    },
                    "response": []
                }
            ]
        },
        {
            "name": "Recurring",
            "description": "\nForecasts of upcoming recurring-invoice generations.\n\nThe full forecast computation lands in sub-plan 07; this controller exposes\nwhatever is already on `invoices.next_invoice_at` so consumers can integrate\nagainst the route contract today.",
            "item": [
                {
                    "name": "30-day recurring forecast",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/recurring",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/recurring"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Returns recurring invoices whose `next_invoice_at` falls within the next 30 days, ordered by date."
                    },
                    "response": [
                        {
                            "header": [
                                {
                                    "key": "content-type",
                                    "value": "application\/problem+json"
                                },
                                {
                                    "key": "cache-control",
                                    "value": "no-cache, private"
                                }
                            ],
                            "code": 401,
                            "body": "{\"type\":\"https:\\\/\\\/accounting.example\\\/problems\\\/unauthenticated\",\"title\":\"Unauthenticated\",\"status\":401,\"detail\":\"Unauthenticated.\"}",
                            "name": ""
                        }
                    ]
                }
            ]
        }
    ],
    "auth": {
        "type": "bearer",
        "bearer": [
            {
                "key": "Authorization",
                "type": "string"
            }
        ]
    }
}