The Swipe file's mark on each of up to 60 reels, kept_at when kept and null when not, with the file's count now. The frame asks this when it reopens so an old card tells the truth, and once more a few seconds later, since a keep an earlier frame started may still be on its way.
curl --request POST \
--url https://dally.ai/v1/swipe_file.marks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"reels": [
{
"content_id": "fd5c8284-4b1e-4d8a-9a9f-0e5a1c2b3d4e",
"platform": "instagram"
}
]
}
'import requests
url = "https://dally.ai/v1/swipe_file.marks"
payload = { "reels": [
{
"content_id": "fd5c8284-4b1e-4d8a-9a9f-0e5a1c2b3d4e",
"platform": "instagram"
}
] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
reels: [{content_id: 'fd5c8284-4b1e-4d8a-9a9f-0e5a1c2b3d4e', platform: 'instagram'}]
})
};
fetch('https://dally.ai/v1/swipe_file.marks', 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://dally.ai/v1/swipe_file.marks",
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([
'reels' => [
[
'content_id' => 'fd5c8284-4b1e-4d8a-9a9f-0e5a1c2b3d4e',
'platform' => 'instagram'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://dally.ai/v1/swipe_file.marks"
payload := strings.NewReader("{\n \"reels\": [\n {\n \"content_id\": \"fd5c8284-4b1e-4d8a-9a9f-0e5a1c2b3d4e\",\n \"platform\": \"instagram\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://dally.ai/v1/swipe_file.marks")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"reels\": [\n {\n \"content_id\": \"fd5c8284-4b1e-4d8a-9a9f-0e5a1c2b3d4e\",\n \"platform\": \"instagram\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://dally.ai/v1/swipe_file.marks")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"reels\": [\n {\n \"content_id\": \"fd5c8284-4b1e-4d8a-9a9f-0e5a1c2b3d4e\",\n \"platform\": \"instagram\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"marks": [
{
"content_id": "fd5c8284-4b1e-4d8a-9a9f-0e5a1c2b3d4e",
"platform": "instagram",
"kept_at": "2026-09-09T17:19:39Z"
}
],
"file_count": 4,
"request_id": "req_01j8zkq"
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
},
"request_id": "<string>"
}swipe_file
swipe_file.marks
Access: public. Send a JSON body; unknown keys are rejected with 400 invalid_request (inputs are strict). Responses may gain fields additively — never remove or repurpose; ignore unknown response fields.
POST
/
v1
/
swipe_file.marks
The Swipe file's mark on each of up to 60 reels, kept_at when kept and null when not, with the file's count now. The frame asks this when it reopens so an old card tells the truth, and once more a few seconds later, since a keep an earlier frame started may still be on its way.
curl --request POST \
--url https://dally.ai/v1/swipe_file.marks \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"reels": [
{
"content_id": "fd5c8284-4b1e-4d8a-9a9f-0e5a1c2b3d4e",
"platform": "instagram"
}
]
}
'import requests
url = "https://dally.ai/v1/swipe_file.marks"
payload = { "reels": [
{
"content_id": "fd5c8284-4b1e-4d8a-9a9f-0e5a1c2b3d4e",
"platform": "instagram"
}
] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
reels: [{content_id: 'fd5c8284-4b1e-4d8a-9a9f-0e5a1c2b3d4e', platform: 'instagram'}]
})
};
fetch('https://dally.ai/v1/swipe_file.marks', 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://dally.ai/v1/swipe_file.marks",
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([
'reels' => [
[
'content_id' => 'fd5c8284-4b1e-4d8a-9a9f-0e5a1c2b3d4e',
'platform' => 'instagram'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://dally.ai/v1/swipe_file.marks"
payload := strings.NewReader("{\n \"reels\": [\n {\n \"content_id\": \"fd5c8284-4b1e-4d8a-9a9f-0e5a1c2b3d4e\",\n \"platform\": \"instagram\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://dally.ai/v1/swipe_file.marks")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"reels\": [\n {\n \"content_id\": \"fd5c8284-4b1e-4d8a-9a9f-0e5a1c2b3d4e\",\n \"platform\": \"instagram\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://dally.ai/v1/swipe_file.marks")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"reels\": [\n {\n \"content_id\": \"fd5c8284-4b1e-4d8a-9a9f-0e5a1c2b3d4e\",\n \"platform\": \"instagram\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"marks": [
{
"content_id": "fd5c8284-4b1e-4d8a-9a9f-0e5a1c2b3d4e",
"platform": "instagram",
"kept_at": "2026-09-09T17:19:39Z"
}
],
"file_count": 4,
"request_id": "req_01j8zkq"
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
},
"request_id": "<string>"
}Authorizations
bearerAuthapiKeyAuth
A WorkOS-dashboard-issued internal API key on Authorization: Bearer.
Body
application/json
The reels this call is about, one to 60; the same reel twice counts once.
Required array length:
1 - 60 elementsShow child attributes
Show child attributes
Response
Success. request_id is present on every response.
One mark per reel sent, in the order sent.
Show child attributes
Show child attributes
How many reels the creator's Swipe file holds now.
Required range:
x >= 0Server-minted id for this request. Present on every response, success and error — quote it when reporting a problem.
Minimum string length:
1