meta { name: 05 Get detail type: http seq: 5 } get { url: {{baseUrl}}/api/v1/invoices/{{invoiceId}} body: none auth: inherit } tests { test("200 OK", function () { expect(res.getStatus()).to.equal(200); }); test("client preload present", function () { expect(res.getBody().data.client).to.have.property("name"); }); test("timeline is array with `issued` event", function () { const tl = res.getBody().data.timeline; expect(tl).to.be.an("array"); expect(tl[0].state).to.equal("past"); }); } docs { GET /api/v1/invoices/:id Détail enrichi : champs Invoice + `client` (Client préchargé) + `plan` (Plan + steps préchargés) + `timeline` composée par le serveur. La timeline calque les `plan.steps` sur `dueDate + offsetDays` et marque chaque étape `past` / `current` / `future` selon l'horodatage courant. }