Trigger projection resync for all aggregates via Workflow
Lists all aggregate IDs from R2 and starts a Cloudflare Workflow that processes DOs in small batches with configurable delays to avoid overwhelming SpacetimeDB. Returns the workflow instance ID for status tracking. Optionally filter by aggregate type. Requires dual auth: X-Admin-API-Key + JWT.
curl -X POST "https://api.spkey.co/admin/resync-projections?aggregateType=user&aggregateId=example_string&batchSize=example_string&delaySeconds=example_string" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN (JWT)" \
-H "X-API-Key: YOUR_API_KEY"
import requests
import json
url = "https://api.spkey.co/admin/resync-projections?aggregateType=user&aggregateId=example_string&batchSize=example_string&delaySeconds=example_string"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN (JWT)",
"X-API-Key": "YOUR_API_KEY"
}
response = requests.post(url, headers=headers)
print(response.json())
const response = await fetch("https://api.spkey.co/admin/resync-projections?aggregateType=user&aggregateId=example_string&batchSize=example_string&delaySeconds=example_string", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN (JWT)",
"X-API-Key": "YOUR_API_KEY"
}
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
)
func main() {
req, err := http.NewRequest("POST", "https://api.spkey.co/admin/resync-projections?aggregateType=user&aggregateId=example_string&batchSize=example_string&delaySeconds=example_string", nil)
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer YOUR_API_TOKEN (JWT)")
req.Header.Set("X-API-Key", "YOUR_API_KEY")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("Response Status:", resp.Status)
}
require 'net/http'
require 'json'
uri = URI('https://api.spkey.co/admin/resync-projections?aggregateType=user&aggregateId=example_string&batchSize=example_string&delaySeconds=example_string')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
request['Authorization'] = 'Bearer YOUR_API_TOKEN (JWT)'
request['X-API-Key'] = 'YOUR_API_KEY'
response = http.request(request)
puts response.body
{
"success": true,
"instanceId": "example_string",
"aggregateTypes": [
"example_string"
],
"total": 3.14,
"batchSize": 3.14,
"delaySeconds": 3.14,
"batches": 3.14,
"counts": {
"user": 3.14,
"lock": 3.14,
"hub": 3.14,
"matter-device": 3.14,
"camera": 3.14,
"camera-role": 3.14,
"rtsp-camera": 3.14
},
"errors": [
"example_string"
]
}
{
"error": "Unauthorized",
"message": "Authentication required. Please provide a valid API token",
"code": 401
}
{
"error": "Forbidden",
"message": "You don't have permission to access this resource",
"code": 403
}
{
"error": "Internal Server Error",
"message": "An unexpected error occurred on the server",
"code": 500,
"requestId": "req_1234567890"
}
/admin/resync-projections
Target server for requests. Edit to use your own host.
JWT token from SmartphoneKey authentication. Identifies the B2C user or B2B service.
API key for B2B organization access. Provided during organization onboarding.
Limit resync to a single aggregate type. Omit to resync all supported types.
Optional single aggregate ID to resync. Requires aggregateType. When set, the R2 list step is skipped — the workflow enqueues just this one DO.
Number of DOs to poke per batch (default: 20)
Seconds to wait between batches (default: 3)
Request Preview
Response
Response will appear here after sending the request
Authentication
Bearer token (JWT). JWT token from SmartphoneKey authentication. Identifies the B2C user or B2B service.
API Key for authentication. API key for B2B organization access. Provided during organization onboarding.
Query Parameters
Limit resync to a single aggregate type. Omit to resync all supported types.
userlockhubmatter-devicecameracamera-rolertsp-cameraOptional single aggregate ID to resync. Requires aggregateType. When set, the R2 list step is skipped — the workflow enqueues just this one DO.
Number of DOs to poke per batch (default: 20)
Seconds to wait between batches (default: 3)