Endpoints
Add a board
Give it a company domain and it finds the careers page itself.
/v1/boardscurl -X POST "https://api.slashtrace.com/v1/boards" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"clay.com"}' You do not need to find the careers page. Give it clay.com and discovery works out where the roles live and how to read them — including JavaScript-gated and bot-blocked pages that return an empty document to an ordinary scraper.
202 means work started. The board comes back immediately with status: "pending" and no jobs; discovery can take up to a minute. Poll List boards until it reads ready. A 201 means the board was already known to us and fresh enough to serve as-is, so there is nothing to wait for.
locked: true is a warning on a success, not an error. You are over your plan’s board limit. The board is added and listed, but it is not read and will never fill with jobs until you free a slot or upgrade. A client that ignores this field gets a board that stays permanently empty, which is why it is stated rather than left to be inferred.
409 on a board you already track, with the existing boardId in details. This is the one place the API differs from the app on purpose: in the app, re-adding is a no-op that shows you the board you already have, which is right for someone who pasted a domain twice. A script needs the opposite — if “add these 40 domains” quietly succeeds for the 12 already present, the run cannot report what it actually did.
Note that a duplicate add may still refresh a stale board before returning 409. Nothing is added and no slot is spent; the board simply gets re-read sooner than it would have.
Body
urlstringrequired- A company domain (clay.com), a board URL (boards.greenhouse.io/discord), or a careers page. We resolve it.
companyNamestring- Optional display name, used only until a scrape discovers the real one.