curl --request GET \
--url https://api.doers.sh/v2/inbox/history \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.doers.sh/v2/inbox/history"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.doers.sh/v2/inbox/history', 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.doers.sh/v2/inbox/history",
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.doers.sh/v2/inbox/history"
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.doers.sh/v2/inbox/history")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.doers.sh/v2/inbox/history")
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{
"items": [
{
"task": {
"id": "<string>",
"title": "<string>",
"notes": "<string>",
"status": "open",
"priority": 0,
"when": {
"kind": "today"
},
"deadline": "<string>",
"projectId": "<string>",
"areaId": "<string>",
"headingId": "<string>",
"tags": [
"<string>"
],
"checklist": [
{
"id": "<string>",
"label": "<string>",
"done": true
}
],
"completedAt": 123,
"durationMin": 123,
"kind": "task",
"repeat": {
"every": 183,
"unit": "day",
"mode": "calendar",
"weekdays": [
4
]
},
"visibility": "public",
"order": 123,
"notePath": "<string>",
"conversationPath": "<string>",
"assigneeId": "<string>",
"assignee": {
"id": "<string>",
"username": "<string>",
"name": "<string>",
"email": "<string>",
"image": "<string>"
},
"accessRole": "owner"
},
"processedAt": 123
}
],
"nextCursor": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": [
{
"field": "<string>",
"message": "<string>"
}
]
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": [
{
"field": "<string>",
"message": "<string>"
}
]
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": [
{
"field": "<string>",
"message": "<string>"
}
]
}
}Tasks you have already triaged
Returns the tasks that arrived in the Inbox and have since been placed, scheduled, completed or archived, most recently triaged first, with the instant each one left. Use it to look back at what an Inbox held, or to find something filed by mistake.
A task created straight into a project or an area never appears here: it was never in the Inbox. A task that returned to the Inbox and was triaged again keeps the instant it first left, and appears once.
Unlike listTasks, this does not exclude calendar blocks: a task turned into one left the Inbox like any other, and hiding it would make an item disappear without trace.
This is the task half of the Inbox history. Agent handbacks live in the local vault and messages come from listInboxComments; the Desktop client merges the three into one chronological list.
curl --request GET \
--url https://api.doers.sh/v2/inbox/history \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.doers.sh/v2/inbox/history"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.doers.sh/v2/inbox/history', 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.doers.sh/v2/inbox/history",
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.doers.sh/v2/inbox/history"
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.doers.sh/v2/inbox/history")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.doers.sh/v2/inbox/history")
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{
"items": [
{
"task": {
"id": "<string>",
"title": "<string>",
"notes": "<string>",
"status": "open",
"priority": 0,
"when": {
"kind": "today"
},
"deadline": "<string>",
"projectId": "<string>",
"areaId": "<string>",
"headingId": "<string>",
"tags": [
"<string>"
],
"checklist": [
{
"id": "<string>",
"label": "<string>",
"done": true
}
],
"completedAt": 123,
"durationMin": 123,
"kind": "task",
"repeat": {
"every": 183,
"unit": "day",
"mode": "calendar",
"weekdays": [
4
]
},
"visibility": "public",
"order": 123,
"notePath": "<string>",
"conversationPath": "<string>",
"assigneeId": "<string>",
"assignee": {
"id": "<string>",
"username": "<string>",
"name": "<string>",
"email": "<string>",
"image": "<string>"
},
"accessRole": "owner"
},
"processedAt": 123
}
],
"nextCursor": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": [
{
"field": "<string>",
"message": "<string>"
}
]
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": [
{
"field": "<string>",
"message": "<string>"
}
]
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": [
{
"field": "<string>",
"message": "<string>"
}
]
}
}Authorizations
A pc_… token generated from Settings > API & MCP.
Query Parameters
Opaque cursor from a previous page.
512How many triaged tasks to return.
1 <= x <= 200