curl --request GET \
--url https://api.scripe.io/v1/ideas/{ideaId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.scripe.io/v1/ideas/{ideaId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.scripe.io/v1/ideas/{ideaId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.scripe.io/v1/ideas/{ideaId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.scripe.io/v1/ideas/{ideaId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.scripe.io/v1/ideas/{ideaId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.scripe.io/v1/ideas/{ideaId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"id": "idea_a1b2c3d4e5f6g7h8",
"title": "<string>",
"status": "inbox",
"awaitingInput": true,
"createdAt": "<string>",
"content": "<string>",
"pillar": "<string>",
"postType": "<string>",
"funnelStage": "REACH",
"assetFormat": "<string>",
"hook": "<string>",
"scheduledFor": "<string>",
"source": "<string>",
"linkedPost": {
"id": "post_a1b2c3d4e5f6g7h8",
"title": "<string>",
"statusCategory": "<string>"
},
"topic": "<string>",
"media": {
"mode": "asset",
"styleName": "<string>",
"referencePrompt": "<string>",
"styleImageUrl": "<string>",
"images": [
{
"assetId": "img_a1b2c3d4e5f6g7h8",
"imageUrl": "<string>"
}
],
"generationPending": true
},
"readiness": {
"verdict": "<string>",
"summary": "<string>",
"openQuestions": [
"<string>"
]
},
"evidence": {
"angle": "<string>",
"provenIdeaSummary": "<string>",
"referencePosts": [
{
"author": "<string>",
"excerpt": "<string>"
}
],
"originExcerpt": "<string>"
},
"attachedSources": [
{
"kind": "<string>",
"title": "<string>",
"url": "<string>",
"description": "<string>"
}
]
}
}{
"error": {
"code": "not_found",
"message": "<string>",
"request_id": "req_a1b2c3d4e5f6",
"docs_url": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "not_found",
"message": "<string>",
"request_id": "req_a1b2c3d4e5f6",
"docs_url": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "not_found",
"message": "<string>",
"request_id": "req_a1b2c3d4e5f6",
"docs_url": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "not_found",
"message": "<string>",
"request_id": "req_a1b2c3d4e5f6",
"docs_url": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "not_found",
"message": "<string>",
"request_id": "req_a1b2c3d4e5f6",
"docs_url": "<string>",
"details": "<unknown>"
}
}Get one idea in full
The creative brief, capture evidence (angle, proven-idea stats,
reference posts, origin), AI readiness with open clarifying
questions, attached source material, and the linked post.
Requires the ideas:read scope.
curl --request GET \
--url https://api.scripe.io/v1/ideas/{ideaId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.scripe.io/v1/ideas/{ideaId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.scripe.io/v1/ideas/{ideaId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.scripe.io/v1/ideas/{ideaId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.scripe.io/v1/ideas/{ideaId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.scripe.io/v1/ideas/{ideaId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.scripe.io/v1/ideas/{ideaId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"id": "idea_a1b2c3d4e5f6g7h8",
"title": "<string>",
"status": "inbox",
"awaitingInput": true,
"createdAt": "<string>",
"content": "<string>",
"pillar": "<string>",
"postType": "<string>",
"funnelStage": "REACH",
"assetFormat": "<string>",
"hook": "<string>",
"scheduledFor": "<string>",
"source": "<string>",
"linkedPost": {
"id": "post_a1b2c3d4e5f6g7h8",
"title": "<string>",
"statusCategory": "<string>"
},
"topic": "<string>",
"media": {
"mode": "asset",
"styleName": "<string>",
"referencePrompt": "<string>",
"styleImageUrl": "<string>",
"images": [
{
"assetId": "img_a1b2c3d4e5f6g7h8",
"imageUrl": "<string>"
}
],
"generationPending": true
},
"readiness": {
"verdict": "<string>",
"summary": "<string>",
"openQuestions": [
"<string>"
]
},
"evidence": {
"angle": "<string>",
"provenIdeaSummary": "<string>",
"referencePosts": [
{
"author": "<string>",
"excerpt": "<string>"
}
],
"originExcerpt": "<string>"
},
"attachedSources": [
{
"kind": "<string>",
"title": "<string>",
"url": "<string>",
"description": "<string>"
}
]
}
}{
"error": {
"code": "not_found",
"message": "<string>",
"request_id": "req_a1b2c3d4e5f6",
"docs_url": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "not_found",
"message": "<string>",
"request_id": "req_a1b2c3d4e5f6",
"docs_url": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "not_found",
"message": "<string>",
"request_id": "req_a1b2c3d4e5f6",
"docs_url": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "not_found",
"message": "<string>",
"request_id": "req_a1b2c3d4e5f6",
"docs_url": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "not_found",
"message": "<string>",
"request_id": "req_a1b2c3d4e5f6",
"docs_url": "<string>",
"details": "<unknown>"
}
}Authorizations
Pass Authorization: Bearer scripe_sk_live_<...> (or
scripe_sk_test_<...> for test keys) on every request. Keys
are scoped to a single workspace and can be revoked from the
Scripe dashboard.
The same header also accepts an OAuth 2.1 access token
(scripe_oat_*); both credentials share one scope vocabulary
and every operation below documents the scope it requires.
An API key can hold every scope named on this surface except
webhooks:manage, which is grantable to OAuth tokens only
today — the webhook-endpoint operations answer
403 scope_missing to every API key. Operations that name no
scope accept any valid token of the workspace.
Headers
Pin the API version. Format YYYY-MM-DD. Omit to receive the
currently rolling default. Unknown versions return 400 version_unsupported.
"2026-08-10"
Path Parameters
"idea_a1b2c3d4e5f6g7h8"
Query Parameters
"proj_a1b2c3d4e5f6g7h8"
Response
The idea.
The board fields both idea reads carry. Among these shared fields
the two reads differ in the body field only: a list row carries a
short excerpt (500 characters), the single read carries a longer
content (1500 characters). Both are plain text clipped from the
stored body, with an ellipsis appended when the body was longer;
neither read serves both fields, which is why this schema declares
neither. A body may be written up to 65535 bytes, so a longer one
is readable back only in clipped form — no field on either read
reports whether the clip happened.
Beyond these shared fields the single read carries further detail
fields the list row has no counterpart for (topic, media,
readiness and others) — see IdeaDetailResponse for its full
shape.
Show child attributes
Show child attributes