Run, Enable, Disable & Items
curl --request POST \
--url https://api.example.com/v0/sources/{id}/runimport requests
url = "https://api.example.com/v0/sources/{id}/run"
response = requests.post(url)
print(response.text)const options = {method: 'POST'};
fetch('https://api.example.com/v0/sources/{id}/run', 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.example.com/v0/sources/{id}/run",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
]);
$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.example.com/v0/sources/{id}/run"
req, _ := http.NewRequest("POST", url, nil)
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.example.com/v0/sources/{id}/run")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v0/sources/{id}/run")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
response = http.request(request)
puts response.read_bodySources
Run, Enable, Disable & Items
POST /v0/sources/:id/ and GET /v0/sources/:id/items
POST
/
v0
/
sources
/
{id}
/
run
Run, Enable, Disable & Items
curl --request POST \
--url https://api.example.com/v0/sources/{id}/runimport requests
url = "https://api.example.com/v0/sources/{id}/run"
response = requests.post(url)
print(response.text)const options = {method: 'POST'};
fetch('https://api.example.com/v0/sources/{id}/run', 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.example.com/v0/sources/{id}/run",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
]);
$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.example.com/v0/sources/{id}/run"
req, _ := http.NewRequest("POST", url, nil)
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.example.com/v0/sources/{id}/run")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v0/sources/{id}/run")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
response = http.request(request)
puts response.read_bodyDraft — needs review
Auth:Authorization: Bearer tr_...
POST /v0/sources/{id}/run
Schedules the source to run on the next runner tick — it does not run synchronously. The runner ticks every minute.
rip source run <id>
POST /v0/sources/{id}/enable
Re-enables a disabled source, clears its failure counter and last error, and schedules an immediate run.
POST /v0/sources/{id}/disable
Stops the source polling. Idempotent — disabling an already-disabled source leaves it alone.
Sources also disable themselves. Twenty consecutive failures auto-disables one and emails its creator; so does losing a brain a
fathom source needs, or the creator leaving the team the source belongs to.GET /v0/sources/{id}/items
The item ledger — what the source discovered and what each item produced.
| Parameter | Type | Required | Description |
|---|---|---|---|
state | string | No | Comma list of seen, awaiting_content, landed, failed, skipped |
limit | integer | No | Page size |
rip source items <id> --state landed,failed
Item states
| State | Meaning |
|---|---|
seen | Discovered, not yet processed |
awaiting_content | The upstream is still preparing the content — retried with an exponential backoff |
landed | Content stored, deposited into the brain, and any task filed. The row carries the artifact and task ids |
failed | Gave up. Readiness times out after 48 hours; a thrown error is retried for 168 hours before going terminal |
skipped | The adapter decided there was nothing to land — an empty transcript, a meeting under a minute |
Error codes
| Error | Description |
|---|---|
SOURCE_NOT_FOUND | No such source in this scope |
INVALID_SOURCE_CONFIG | The source is in a state it cannot run from — most often a legacy cron row with no taskKind |
NOT_A_MEMBER / TEAM_NOT_FOUND | Team scope problems |
Operator mirror
POST /v0/operator/sources/{id}/{run,enable,disable} and GET /v0/operator/sources/{id}/items.