Developers
Build on top of
Tools of Golf.
A simple REST API for syncing your inventory with Tools of Golf — create, read, update, and delete your own listings from a shop system, spreadsheet, or any tool you already use.
Quickstart
- Sign in and open Dashboard → Settings → API Access to generate a key.
- Copy the key immediately — it's shown once and can't be retrieved again.
- Send it as a Bearer token on every request below.
curl https://toolsof.golf/api/public/v1/listings \
-H 'Authorization: Bearer tog_live_your_key_here'Authentication
Every request must include your key in an Authorization header. Keys look like tog_live_… and are scoped to the listings owned by the account that generated them — there's no way to read or modify another user's listings with your key.
Authorization: Bearer tog_live_your_key_here Keys can be revoked any time from Dashboard → Settings. A revoked or inactive key returns 401 on every request.
Rate limits
Each API key is limited to 60 requests per minute. Exceeding this returns a 429 with message Rate limit exceeded — max 60 requests per minute. Back off and retry after a few seconds.
Endpoints
All endpoints are prefixed with https://toolsof.golf/api/public/v1. A listing's category should match one of the platform's category slugs — fetch the current list from the public, unauthenticated GET /api/categories helper so a listing shows up correctly when buyers browse by category.
/listingsList your listings
Returns a paginated list of listings owned by the authenticated key.
| Field | Type | Description |
|---|---|---|
| limit | number | Results per page, 1–100. Default 50. |
| page | number | Page number, starting at 1. Default 1. |
| status | string | Filter by status (e.g. published, draft). Omit to return everything except deleted listings. |
| updated_since | ISO date | Only return listings updated at or after this timestamp — use this for incremental sync instead of refetching everything. |
curl "https://toolsof.golf/api/public/v1/listings?limit=25&updated_since=2026-09-01T00:00:00Z" \
-H 'Authorization: Bearer tog_live_your_key_here'/listingsCreate a listing
Creates a new published listing owned by the authenticated key.
| Field | Type | Description |
|---|---|---|
| title | string | Required. |
| price | number | Required. Positive number, rounded to the nearest whole dollar. |
| category | string | Required. See the category note above. |
| description | string | Optional. |
| condition | string | Optional. |
| photourls | string[] | Optional array of image URLs. |
curl -X POST https://toolsof.golf/api/public/v1/listings \
-H 'Authorization: Bearer tog_live_your_key_here' \
-H 'Content-Type: application/json' \
-d '{
"title": "Titleist T100 Irons 4-PW",
"price": 650,
"category": "irons",
"condition": "very-good",
"photourls": ["https://example.com/photo1.jpg"]
}'/listings/:idGet a listing
Returns a single listing by its id. Returns 403 if the id belongs to a listing you don't own, and 404 if it doesn't exist or was deleted.
curl https://toolsof.golf/api/public/v1/listings/LISTING_ID \
-H 'Authorization: Bearer tog_live_your_key_here'/listings/:idUpdate a listing
Partial update — send only the fields you want to change.
| Field | Type | Description |
|---|---|---|
| title, description, price, category, condition, photourls, status | — | Any subset of these fields. |
curl -X PATCH https://toolsof.golf/api/public/v1/listings/LISTING_ID \
-H 'Authorization: Bearer tog_live_your_key_here' \
-H 'Content-Type: application/json' \
-d '{ "price": 599, "status": "published" }'/listings/:idDelete a listing
Soft-deletes the listing (sets its status to deleted) — it's immediately removed from the marketplace.
curl -X DELETE https://toolsof.golf/api/public/v1/listings/LISTING_ID \
-H 'Authorization: Bearer tog_live_your_key_here'Errors
Errors return a JSON body with a message field and one of these status codes:
| Status | Meaning | Details |
|---|---|---|
| 400 | Bad request | Missing or invalid fields — see the message for specifics. |
| 401 | Unauthorized | Missing, invalid, or revoked API key. |
| 403 | Forbidden | The listing exists but belongs to a different account. |
| 404 | Not found | No listing with that id, or it was deleted. |
| 429 | Rate limited | More than 60 requests in the last minute — back off and retry. |
| 500 | Server error | Something went wrong on our end — safe to retry. |
Ready to connect your tools?
Generate a key from your dashboard and start syncing listings in minutes.
Get an API key →