Kickstarter API endpoint
Returns one page of Kickstarter's own Discover results -- browse by category id and/or a free-text search term, sorted by magic/popularity/newest/end_date/most_funded, optionally filtered by campaign state and/or restricted to staff picks. Each result includes the campaign's funding snapshot (goal, pledged, percent funded, backers), category, location, creator, and cover photo.
/kickstarter/discoverQuery parameters:
category_id: optional. Kickstarter's own numeric category id (top-level or a narrower sub-category), for example 16 for Technology. Omit to browse/search across every category.term: optional. Free-text search query, matching Kickstarter's own Discover search box.sort: optional. Result order. Allowed values: magic, popularity, newest, end_date, most_funded. Defaults to magic (Kickstarter's own "Recommended" order).page: optional. 1-based page number. Defaults to 1.state: optional, repeatable (state=live&state=successful). Filter by campaign state. Allowed values: upcoming, live, late_pledge, canceled, failed, successful. Omit to use Kickstarter's own default for a category/search browse (live + late_pledge).staff_pick_only: optional, true/false, defaults to false. Restrict results to Kickstarter's own "Projects We Love" editorial picks.Returns one page of Kickstarter's own Discover results, sourced from kickstarter.com's own /discover/advanced?format=json endpoint — the same JSON API the site's own Discover/search UI calls, not DOM scraping.
Notable response behavior:
goal, pledged, percent_funded, backers_count, state, usd_pledged, converted_pledged_amount.category (id, name, slug, parent_id, url) and location (name, displayable_name, short_name, country) reflect Kickstarter's own taxonomy — pass a category.id back in as category_id on a follow-up call.creator is a short profile summary (id, name, avatar); photo is the campaign's cover image.created_at, launched_at, deadline, state_changed_at are RFC3339 timestamps.staff_pick and spotlight are Kickstarter's own editorial/completion flags; has_video reports whether the campaign has a pitch video.total_hits is Kickstarter's own result count for the query. A query with no matches returns a well-formed empty projects array rather than an error.| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| category_id | integer | No | Kickstarter's own numeric category id (top-level or sub-category), e.g. 16 for Technology | 16 | |
| term | string | No | Free-text search query | hologram | |
| sort | string | No | Result order Allowed values: magic, popularity, newest, end_date, most_funded. | ||
| page | integer | No | 1-based page number | ||
| state | array<string> | No | Repeatable campaign state filter Allowed values: upcoming, live, late_pledge, canceled, failed, successful. | ||
| staff_pick_only | boolean | No | Restrict results to Kickstarter's own \ | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/kickstarter/discover?sort=magic&page=1&state=upcoming&staff_pick_only=true" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"page": 1,
"total_hits": 1,
"projects": [
{
"id": 1114436418,
"name": "musubi: the first consumer holographic frame",
"slug": "musubi",
"url": "https://www.kickstarter.com/projects/lookingglass/musubi",
"blurb": "Turn any photo into a hologram.",
"state": "successful",
"country": "US",
"currency": "USD",
"currency_symbol": "$",
"goal": 50000,
"pledged": 423762.5,
"percent_funded": 847,
"backers_count": 3009,
"staff_pick": true,
"spotlight": true,
"category": {
"id": 16,
"name": "Technology",
"slug": "technology",
"url": "https://www.kickstarter.com/discover/categories/technology"
},
"location": {
"name": "Los Angeles",
"displayable_name": "Los Angeles, CA",
"short_name": "Los Angeles, CA",
"country": "US"
},
"creator": {
"id": 42,
"name": "Looking Glass",
"avatar": "https://example.com/avatar-medium.jpg"
},
"photo": {
"full": "https://example.com/photo-full.jpg"
},
"created_at": "2023-11-14T22:13:20Z",
"launched_at": "2023-11-26T13:33:20Z",
"deadline": "2023-12-30T09:20:00Z"
}
]
}
}Request schema
No body schema
Response schema
#/definitions/kickstarter.discoverResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | kickstarter.DiscoverResult | No | ||||
| data.page | integer | No | ||||
| data.projects | array | No | Project record, 73 fields: backers_count, blurb, category, comments_count, converted_pledged_amount, country, created_at, creator, currency, currency_symbol, deadline, faq_count and 21 more. Described under Get a Kickstarter campaign's detail API. | |||
| data.total_hits | integer | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/kickstarter/discover?sort=magic&page=1&state=upcoming&staff_pick_only=true" \
-H "x-api-key: $CRAWLORA_API_KEY"