List public group boards for a keyword
const url = 'https://api-v1.tailwind.ai/v1/group-boards?keyword=example';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://api-v1.tailwind.ai/v1/group-boards?keyword=example' \ --header 'Authorization: Bearer <token>'Public Pinterest group boards matching a keyword, from Tailwind’s Group Board Finder scrape cache. This is public benchmark context, not the authenticated user’s own boards — use list-boards for those.
Results are cached and refreshed in the background, so the response carries a status: ready means the data below is what we have (including an empty list, when a completed search found no group boards), warming means a search is running and no results are cached yet, and unavailable means the most recent search failed. On warming, retry after retryAfterSeconds.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Search keyword. Trimmed, whitespace-collapsed and lowercased before lookup; 100 characters maximum.
Responses
Section titled “Responses”Group boards for the keyword, with the scrape status
object
object
The normalized keyword the results are keyed on
State of the underlying scrape for this keyword
A public Pinterest group board from the Group Board Finder scrape cache. Not one of the authenticated user’s own boards, and not usable as a boardId when scheduling.
object
Pinterest board ID
Board name
Board description
Board URL on Pinterest
Pinterest username of the board owner
Board cover image URL
Pins on the board when last scraped
Followers of the board owner when last scraped
Whether the board accepts collaborators
Whether the board was open to join
Up to four example Pin thumbnails from the board
When a search for this keyword last completed successfully
On warming, how long to wait before asking again
object
Unique request ID for debugging
Example
{ "data": { "status": "warming" }}Invalid request
object
object
Error code
Error message
Machine-readable denial reason. Present on PAYMENT_REQUIRED errors: insufficient_credits, trial_exhausted, no_access, account_not_connected, legacy_post_limit_exceeded.
Present on PAYMENT_REQUIRED errors: where the denial can be resolved. Reason-specific, because buying credits does not clear a trial, access or connection denial. Requests sent with X-Request-Source: mcp receive an informational plans page instead, so agent surfaces never present a purchase link.
object
Unique request ID for debugging
Example
{ "error": { "code": "BAD_REQUEST", "message": "Invalid request body" }, "meta": { "requestId": "abc123" }}Authentication required or invalid bearer credentials
object
object
Error code
Error message
Machine-readable denial reason. Present on PAYMENT_REQUIRED errors: insufficient_credits, trial_exhausted, no_access, account_not_connected, legacy_post_limit_exceeded.
Present on PAYMENT_REQUIRED errors: where the denial can be resolved. Reason-specific, because buying credits does not clear a trial, access or connection denial. Requests sent with X-Request-Source: mcp receive an informational plans page instead, so agent surfaces never present a purchase link.
object
Unique request ID for debugging
Example
{ "error": { "code": "UNAUTHORIZED", "message": "Invalid API key" }, "meta": { "requestId": "abc123" }}Rate limit exceeded
object
object
Error code
Error message
Machine-readable denial reason. Present on PAYMENT_REQUIRED errors: insufficient_credits, trial_exhausted, no_access, account_not_connected, legacy_post_limit_exceeded.
Present on PAYMENT_REQUIRED errors: where the denial can be resolved. Reason-specific, because buying credits does not clear a trial, access or connection denial. Requests sent with X-Request-Source: mcp receive an informational plans page instead, so agent surfaces never present a purchase link.
object
Unique request ID for debugging
Example
{ "error": { "code": "RATE_LIMIT_EXCEEDED", "message": "Daily rate limit of 5000 requests exceeded. Resets at midnight UTC." }, "meta": { "requestId": "abc123" }}