An archive digitization project may have hundreds of object descriptions to classify, and one long-running response can outlast a normal web request. The tempting shortcut is to set every record to “processed” as soon as the API accepts the job. That creates a misleading inventory: a queued request has not generated an answer, and a generated answer has not been approved for publication.
OpenAI Background Mode provides an asynchronous path through the Responses API. This is a hypothetical integration blueprint, not a report of a production experiment or measured throughput. The practical goal is to make status visible, preserve source evidence, and keep automatic suggestions separate from verified catalog metadata.
Separate three different kinds of completion
Define *request accepted*, *response completed*, and *archive record approved* as different events. The first means the service returned a response identifier. The second means generation reached a successful terminal state. The third requires your own catalog-review procedure. A database column named `completed` is too ambiguous when all three events are compressed into one flag.
Use distinct fields such as `api_status`, `result_reviewed_at`, and `catalog_update_approved_by`. For a sample accession A-042, a request may be queued at 8:00 p.m., complete at 8:04 p.m., and remain unapproved until a researcher checks whether “photographic print” is supported by the source image. None of those timestamps should be inferred from the others.
Create a bounded background request
The documented mechanism is a Responses API request with `background: true` and a compatible model. Supply a narrow input: an object ID, a sanitized transcription, an approved taxonomy, and an instruction to return candidate tags with supporting excerpts. Do not assume all models or endpoints behave identically; verify the current background-mode guidance and the account’s model access first.
Log the returned response ID alongside a locally generated job ID that also identifies the authorized source revision. Never put your API key in an archive row or public diagnostic message. A response ID helps you retrieve that particular request, while the local ID lets you reconcile retries and prevent a new request from silently replacing a previously reviewed catalog suggestion.
Poll the status rather than guessing from elapsed time

OpenAI documents retrieving the response while it remains `queued` or `in_progress`. Those are not success states. A worker should keep the source row in a waiting queue, apply sensible retry intervals to polling, and show operators when the last check occurred. Do not fabricate a universal completion estimate based on a single previous run.
Once the response leaves those running states, inspect its actual terminal status and any error or incomplete information. Only `completed` allows the generated output to proceed to semantic review. A failed, cancelled, or incomplete response needs its own recorded outcome, not an empty answer treated as “no tags found.”
Keep results and evidence connected
When the response completes, save the candidate labels with the exact accession number, source revision, allowed taxonomy version, and the response ID. A reviewer should be able to open the original scan or transcription and see where each proposed label came from. If a label has no supporting text, mark it unresolved rather than accepting it because it fits common museum language.
For example, an unlabeled brass instrument may resemble a surveying tool. The model can propose “survey equipment,” but the archival record might only prove “metal measuring instrument.” A good review interface displays the model’s suggestion next to the source excerpt and an explicit “not established” option. It never substitutes a plausible historical identity for documented evidence.
Canceling a request is not publishing a result

Background responses can be cancelled through the documented cancel endpoint. Cancellation is useful when the staff realize they uploaded the wrong transcription revision or when a request is no longer needed. The cancellation action returns response information, but it does not remove any previously copied information from your own logs or roll back unrelated catalog changes.
Maintain a state such as `cancel_requested` until the response’s actual state is reconciled. If a network request fails after a cancel attempt, retrieve the existing response instead of blindly starting a replacement. Separate operator intent from confirmed service outcome, just as you separate a proposed AI tag from an approved archive field.
Treat timeout and retention as design constraints
The documentation explains that background execution temporarily stores response data to support polling, even in configurations that use `store=false`. It also describes approximately ten-minute temporary retention considerations for certain configurations, including Zero Data Retention projects. Do not assume background mode means zero transient storage or unlimited later retrieval.
Use an application-owned reconciliation process while respecting platform retention controls. Avoid storing personal donor contact details in prompts when the task only needs object-description text. If the organization requires stronger data handling terms, have its privacy owner assess the exact OpenAI project settings and deployment path before enabling the feature.
Test the status machine with deliberately awkward outcomes
Build a local test matrix with simulated queued, in-progress, completed, failed, cancelled, and incomplete responses. Include a duplicate callback, a dropped polling connection, a stale source revision, and a reviewer rejecting a confident-looking tag. Each transition should have a clear database effect, and none should mark an unreviewed record as approved.
Also check operational metrics without inventing service performance: count jobs awaiting review, confirmed terminal failures, and records with unmatched response IDs. These are measurements your own application can report after it is deployed. The diagram contrasts a bad shortcut that turns “queued” into “published” with a gated process that requires retrieval, source inspection, and reviewer sign-off.
Release tags only after a catalog-specific approval

The final stage is not another model call. An authorized cataloger checks the terminology, accession ID, source revision, and uncertainty. Publish only approved fields, retain the rejected suggestions for audit if policy allows, and avoid changing the archival source record. When staff later correct the scan, initiate a new review cycle rather than hiding the edit beneath the old response ID.
A sensible result is a queue that visibly contains more “needs review” entries than a frictionless marketing dashboard would prefer. That is a feature, not a failure: the system distinguishes running AI work, generated candidates, and established collection facts. It also gives the team a clear rollback path when a label turns out to be wrong.
How We Research
For the November 5, 2026 editorial review, we consulted these named primary sources: OpenAI API: Background mode, OpenAI API: Cancel a response. We compared the published feature description, supported entry points, permission boundaries, and stated limitations with the hypothetical use case above. We did not access a subscriber account, run the described service against real customer or archive data, measure accuracy, or reproduce any product interface. All artwork is an original instructional illustration, not a product screenshot or test result. Feature availability, plan eligibility, security settings, and UI labels may change; recheck the official help pages and local policy before deploying this workflow.
Frequently Asked Questions
No. Queued and in-progress states say the request is still being handled. Retrieve the response and inspect a successful terminal status before considering the generated content.
The documented cancel endpoint applies to responses created using background mode. A cancel request is not a substitute for checking the resulting response status and your own application state.
No. OpenAI documents temporary storage needed for asynchronous processing and polling, even for some store-false configurations. Assess the current retention rules before sending sensitive records.
Not for this evidence-sensitive workflow. Treat its output as candidate metadata until a reviewer verifies the accession, source revision, taxonomy and uncertainty.
Keep the response ID, retrieve the existing job status, and reconcile the outcome. Do not submit a duplicate job merely because the initial polling connection failed.
