curl --request POST \
--url https://api.recoupable.dev/api/context \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"action": "ingest",
"url": "<string>",
"idempotency_key": "<string>",
"organization_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"topics": [],
"direction": "<string>"
}
'import requests
url = "https://api.recoupable.dev/api/context"
payload = {
"action": "ingest",
"url": "<string>",
"idempotency_key": "<string>",
"organization_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"topics": [],
"direction": "<string>"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
action: 'ingest',
url: '<string>',
idempotency_key: '<string>',
organization_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
topics: [],
direction: '<string>'
})
};
fetch('https://api.recoupable.dev/api/context', 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.recoupable.dev/api/context",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'action' => 'ingest',
'url' => '<string>',
'idempotency_key' => '<string>',
'organization_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'topics' => [
],
'direction' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.recoupable.dev/api/context"
payload := strings.NewReader("{\n \"action\": \"ingest\",\n \"url\": \"<string>\",\n \"idempotency_key\": \"<string>\",\n \"organization_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"topics\": [],\n \"direction\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.recoupable.dev/api/context")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"action\": \"ingest\",\n \"url\": \"<string>\",\n \"idempotency_key\": \"<string>\",\n \"organization_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"topics\": [],\n \"direction\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.recoupable.dev/api/context")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"action\": \"ingest\",\n \"url\": \"<string>\",\n \"idempotency_key\": \"<string>\",\n \"organization_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"topics\": [],\n \"direction\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodyContext Engine
Metadata pilot; release only after companion database/API deployments. Saves Spotify track, release and credited artist metadata for reuse. The MCP context tool uses the same operations. No paid enrichment runs yet: lyrics, audio analysis, artwork interpretation and artist research are reported as gaps. Briefs select saved evidence and do not generate creative concepts. Inspect readiness and missingTopics before using them. Ingest dispatches a durable workflow; retry the same input and idempotency key after dispatch failure. Private context is scoped to the authenticated account or authorized organization.
curl --request POST \
--url https://api.recoupable.dev/api/context \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"action": "ingest",
"url": "<string>",
"idempotency_key": "<string>",
"organization_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"topics": [],
"direction": "<string>"
}
'import requests
url = "https://api.recoupable.dev/api/context"
payload = {
"action": "ingest",
"url": "<string>",
"idempotency_key": "<string>",
"organization_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"topics": [],
"direction": "<string>"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
action: 'ingest',
url: '<string>',
idempotency_key: '<string>',
organization_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
topics: [],
direction: '<string>'
})
};
fetch('https://api.recoupable.dev/api/context', 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.recoupable.dev/api/context",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'action' => 'ingest',
'url' => '<string>',
'idempotency_key' => '<string>',
'organization_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'topics' => [
],
'direction' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.recoupable.dev/api/context"
payload := strings.NewReader("{\n \"action\": \"ingest\",\n \"url\": \"<string>\",\n \"idempotency_key\": \"<string>\",\n \"organization_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"topics\": [],\n \"direction\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.recoupable.dev/api/context")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"action\": \"ingest\",\n \"url\": \"<string>\",\n \"idempotency_key\": \"<string>\",\n \"organization_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"topics\": [],\n \"direction\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.recoupable.dev/api/context")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"action\": \"ingest\",\n \"url\": \"<string>\",\n \"idempotency_key\": \"<string>\",\n \"organization_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"topics\": [],\n \"direction\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodyAuthorizations
Body
- Option 1
- Option 2
- Option 3
"ingest"Spotify track URL. Albums, playlists and YouTube ingestion are not enabled in this pilot.
Stable key for retrying the same input without duplicate work.
1 - 128^[A-Za-z0-9._:-]+$Optional organization that owns the private context. Current membership is checked.
1 - 10 elementsrelease_metadata, artist_metadata, catalog_metadata, lyrics, song_summary, artwork_branding, artist_research, artist_brand, era, video_narrative Stored customer direction. Metadata extraction does not interpret it as source facts.
4000Response
Read returns request. Brief returns purpose, readiness, documents, characters, missingTopics, guidance and gaps. Documents include saved result/version references and source citations.
Was this page helpful?
