After contacting Lightspeed support, I was able to get to the root of the problem, which was that someone else on my project had changed permissions for the Employee Role, and I was unaware of it.
The way you can test your Oauth token to see what roles it has is making a GET request to /API/Session . Mine was missing "vendor" under "Rights".
For anyone else with this problem, you can modify Employee Roles under Settings on Lightspeed's retail UI.
Here is the exact response that was emailed to me in case it helps anyone else:
A 403 should mean one of two things:- Your token's scope doesn't include access to vendors.
- The employee that granted the token doesn't have the rights to access to vendors.
It sounds like your token has the right scope, but someone may have changed the rights for the employee that granted it. You can make a call the /API/Session endpoint to see which employee it is and their rights. You'll see "vendors": "true" if they have access to vendors. If you don't see "vendors" at all, it means they don't have that right.
-----
The access you have also depends on the employee's rights. It will check your token's scope, then the employee's rights and only requests that are allowed by both will go through.
Someone must have changed the employee's rights in Lightspeed Retail. You'll need to contact them and ask them to change the rights back, or reauthorize to get a new token with a different user.
----