Skip to main content

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

  1. Sign in and open Dashboard → Settings → API Access to generate a key.
  2. Copy the key immediately — it's shown once and can't be retrieved again.
  3. 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.

GET/listings

List your listings

Returns a paginated list of listings owned by the authenticated key.

FieldTypeDescription
limitnumberResults per page, 1–100. Default 50.
pagenumberPage number, starting at 1. Default 1.
statusstringFilter by status (e.g. published, draft). Omit to return everything except deleted listings.
updated_sinceISO dateOnly 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'
POST/listings

Create a listing

Creates a new published listing owned by the authenticated key.

FieldTypeDescription
titlestringRequired.
pricenumberRequired. Positive number, rounded to the nearest whole dollar.
categorystringRequired. See the category note above.
descriptionstringOptional.
conditionstringOptional.
photourlsstring[]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"]
  }'
GET/listings/:id

Get 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'
PATCH/listings/:id

Update a listing

Partial update — send only the fields you want to change.

FieldTypeDescription
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" }'
DELETE/listings/:id

Delete 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:

StatusMeaningDetails
400Bad requestMissing or invalid fields — see the message for specifics.
401UnauthorizedMissing, invalid, or revoked API key.
403ForbiddenThe listing exists but belongs to a different account.
404Not foundNo listing with that id, or it was deleted.
429Rate limitedMore than 60 requests in the last minute — back off and retry.
500Server errorSomething 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 →