---
title: "Drain the ticket embedding outbox"
method: POST
path: "/admin/seed-ticket-embeddings"
tags: ["Admin"]
---

# Drain the ticket embedding outbox

`POST /admin/seed-ticket-embeddings`

## Request

- Base URL: `https://api.apphandoff.com/api`
- URL: `https://api.apphandoff.com/api/admin/seed-ticket-embeddings`
- Auth: API key in cookie `sb-access-token`

Admin-only embedding outbox drain (HO-14315). Seeds a job for every ticket
with neither a vector nor a job, then claims, embeds and settles up to
`max_tickets` outbox jobs from the background budget lane. The Slipstream
schedule `embedding-drain` calls it every ten minutes; a manual call is the
same run. Auth via the `x-cron-secret` header matching CRON_SECRET.
The body also carries the global outbox health the schedule fails on
(HO-14476). `dead_letters` runs no drain: it marks every new dead letter
handled and, with `requeue`, gives each dead-lettered ticket a fresh job.

## Query parameters

- `max_tickets` integer
- `dead_letters` 'acknowledge' | 'requeue'

## Response `200`

Drain run counts, or the dead-letter reset counts when `dead_letters` is set

- object
  - `ok` boolean
  - `seeded` integer
  - `searchDocsSeeded` integer
  - `claimed` integer
  - `embedded` integer
  - `unchanged` integer
  - `failed` integer
  - `deadLettered` integer
  - `refused` integer
  - `stopped` 'drained' | 'cap' | 'deadline' | 'budget'
  - `new_dead_letters` integer: Dead letters across every project not yet acknowledged.
  - `due_unleased_pending` integer: Pending jobs due at or before this run's start and not leased.
  - `completed_this_run` integer: Jobs this run settled as done (embedded + unchanged).
  - `oldest_job_age_s` integer, nullable: Age in seconds of the oldest pending job from its creation; null when none.
  - `cache_swept` integer: Durable embedding-cache rows this run removed, unread for 30 days (HO-14603).
  - `dead_letters` 'acknowledge' | 'requeue'
  - `acknowledged` integer
  - `requeued` integer

## Other responses

- `401`: Not authenticated
- `500`: Server error
- `504`: Server error

---

[API](https://skmtc.dev/apphandoff/apis/apphandoff-api.md) · [All operations](https://skmtc.dev/apphandoff/apis/apphandoff-api/llms.txt) · [OpenAPI document](https://skmtc.dev/apphandoff/apis/apphandoff-api/revisions/9f138fe46d56?raw)
