Customer A reads customer B's invoice
The login check passes: A has a valid token for org A. The endpoint then loads invoice 9041 by id alone, with no filter on the caller's org. Changing one number in the URL returns another customer's data. Agent-written handlers repeat this when the filter lives in each query instead of one shared place.
OWASP API1:2023, broken object level authorizationconst [a, b] = await seedOrgs(2) const inv = await b.api.post('/invoices', fixture) for (const verb of ['get', 'patch', 'delete']) expect((await a.api[verb](`/invoices/${inv.id}`)).status).toBe(404) expect(ids(await a.api.get('/invoices'))).not.toContain(inv.id)