curl --request GET \
--url https://app.pepline.ai/api/v1/onboarding \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.pepline.ai/api/v1/onboarding"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.pepline.ai/api/v1/onboarding', 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://app.pepline.ai/api/v1/onboarding",
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://app.pepline.ai/api/v1/onboarding"
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://app.pepline.ai/api/v1/onboarding")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.pepline.ai/api/v1/onboarding")
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{
"object": "onboarding",
"stage": "choosing_path",
"handoff": {
"handed_off": true,
"handed_off_at": "2023-11-07T05:31:56Z",
"reviewed_at": "2023-11-07T05:31:56Z",
"pending": true,
"mailed_at": "2023-11-07T05:31:56Z",
"reminded_at": "2023-11-07T05:31:56Z"
},
"agent": {
"slug": "<string>",
"name": "<string>",
"status": "active"
},
"live": true,
"verified": true,
"go_live_blockers": [
"<string>"
],
"checklist": {},
"journey": {
"current": "<string>",
"done": 123,
"total": 123
},
"queues": {
"proposed_drafts": {},
"unreviewed_services": 123,
"unreviewed_facts": 123,
"retired_unreviewed_facts": 123,
"other_pages": 123,
"running_generations": 123,
"open_gaps": 123
},
"credits": {
"used": 123,
"allowance": 123,
"refusal": "<string>"
},
"smoke_test": {
"eligible": true,
"reasons": [
"<string>"
]
},
"path": "ui",
"source": {},
"extraction": {
"done": true,
"floor_met": true,
"pending_facts": 123
},
"activity": {},
"receipts": 123,
"thread": {}
}{
"error": {
"type": "authentication_error",
"code": "missing_api_key",
"message": "<string>",
"param": "<string>"
}
}Where the organization stands with setup
One read of onboarding readiness: the stage (choosing_path, open, pre_flow, handoff_pending, completed, skipped), the first agent and what blocks going live, the primary source’s extraction state, the setup checklist, what awaits triage (proposed drafts per kind, unreviewed services and facts, retired facts, unread pages, running generations), credits, and whether a smoke test makes sense yet.
curl --request GET \
--url https://app.pepline.ai/api/v1/onboarding \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.pepline.ai/api/v1/onboarding"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.pepline.ai/api/v1/onboarding', 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://app.pepline.ai/api/v1/onboarding",
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://app.pepline.ai/api/v1/onboarding"
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://app.pepline.ai/api/v1/onboarding")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.pepline.ai/api/v1/onboarding")
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{
"object": "onboarding",
"stage": "choosing_path",
"handoff": {
"handed_off": true,
"handed_off_at": "2023-11-07T05:31:56Z",
"reviewed_at": "2023-11-07T05:31:56Z",
"pending": true,
"mailed_at": "2023-11-07T05:31:56Z",
"reminded_at": "2023-11-07T05:31:56Z"
},
"agent": {
"slug": "<string>",
"name": "<string>",
"status": "active"
},
"live": true,
"verified": true,
"go_live_blockers": [
"<string>"
],
"checklist": {},
"journey": {
"current": "<string>",
"done": 123,
"total": 123
},
"queues": {
"proposed_drafts": {},
"unreviewed_services": 123,
"unreviewed_facts": 123,
"retired_unreviewed_facts": 123,
"other_pages": 123,
"running_generations": 123,
"open_gaps": 123
},
"credits": {
"used": 123,
"allowance": 123,
"refusal": "<string>"
},
"smoke_test": {
"eligible": true,
"reasons": [
"<string>"
]
},
"path": "ui",
"source": {},
"extraction": {
"done": true,
"floor_met": true,
"pending_facts": 123
},
"activity": {},
"receipts": 123,
"thread": {}
}{
"error": {
"type": "authentication_error",
"code": "missing_api_key",
"message": "<string>",
"param": "<string>"
}
}Authorizations
Your secret key (pep_sk_…) from Settings → API. Keys are org-scoped; treat them like passwords.
Response
The readiness reading.
"onboarding"choosing_path, open, pre_flow, handoff_pending, completed, skipped Show child attributes
Show child attributes
Show child attributes
Show child attributes
The setup checklist (items, done, total, complete).
Show child attributes
Show child attributes
What awaits triage.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
ui, ai, skipped, null The primary onboarding source (website or document), when one exists.
Show child attributes
Show child attributes
What is running now, one reading for every surface: live, stage (reading | extracting | summarizing | reading_again | drafting | idle), headline, detail, kinds (live run kinds), labels.
Curation receipts recorded so far.
The assistant's open thread, when one exists.

