Experimental endpoints
| Endpoint | Semantic operation | Current build | Request fields | Response fields | State semantics |
|---|---|---|---|---|---|
POST /halro/v1/runs | governance | configurable; still experimental | 3 | 5 | ledger-authoritative idempotent Run creation |
GET /halro/v1/runs/{id} | governance | configurable; still experimental | 1 | 7 | project-owned ledger-derived Run read |
POST /halro/v1/runs/{id}/close | governance | configurable; still experimental | 2 | 4 | ledger-authoritative idempotent Run close |
POST /halro/v1/work-units | governance | configurable; still experimental | 1 | 4 | ledger-authoritative idempotent Work Unit creation |
GET /halro/v1/work-units/{id} | governance | configurable; still experimental | 1 | 3 | project-owned dual-source read: Work Unit and Runs from Accounting Ledger, Outcomes from Governance Journal |
POST /halro/v1/work-units/{id}/close | governance | configurable; still experimental | 1 | 4 | ledger-authoritative idempotent Work Unit close |
POST /halro/v1/work-units/{id}/outcomes | governance | configurable; still experimental | 7 | 11 | governance-journal-authoritative idempotent Outcome report |
POST /v1/async/invocations | async_generate | not served (no creatable Profile) | 7 | 6 | project-owned resource with 7 day TTL |
GET /v1/async/invocations/{id} | async_generate | not served (no creatable Profile) | 1 | 6 | project-owned resource |
POST /v1/async/invocations/{id}/cancel | async_generate | not served (no creatable Profile) | 1 | 1 | always fails closed because Bedrock has no cancellation operation |
POST /v1/audio/speech | synthesize | configurable; still experimental | 5 | 1 | stateless |
POST /v1/audio/transcriptions | transcribe | configurable; still experimental | 6 | 1 | stateless |
POST /v1/batches | batch | configurable; still experimental | 4 | 16 | project-owned resource with 7 day TTL |
GET /v1/batches/{id} | batch | configurable; still experimental | 1 | 16 | project-owned resource |
POST /v1/batches/{id}/cancel | batch | configurable; still experimental | 1 | 16 | project-owned cancellable resource |
POST /v1/files | file | configurable; still experimental | 3 | 8 | project-owned resource with 30 day TTL |
GET /v1/files/{id} | file | configurable; still experimental | 1 | 8 | project-owned resource |
DELETE /v1/files/{id} | file | configurable; still experimental | 1 | 3 | deletes upstream, metadata, and local content |
GET /v1/files/{id}/content | file | configurable; still experimental | 1 | 1 | content served from the private local object directory |
POST /v1/images/generations | image | configurable; still experimental | 7 | 5 | stateless |
POST /v1/moderations | moderate | configurable; still experimental | 2 | 3 | stateless |
POST /v1/rerank | rerank | not served (no creatable Profile) | 4 | 1 | stateless Halro extension |
GET /v1/responses/{id} | generate | configurable; still experimental | 1 | 10 | project-owned deferred record; polling is authoritative and writes no accounting events |
DELETE /v1/responses/{id} | generate | configurable; still experimental | 1 | 3 | project-owned deferred record |
POST /v1/responses/{id}/cancel | generate | configurable; still experimental | 1 | 10 | project-owned deferred record |
Shared contract deviations
Section titled “Shared contract deviations”- unknown fields and unsupported profile fields are rejected before provider I/O
- resource identifiers are opaque Halro identifiers scoped to one project
- a batch served by the Anthropic profile has its requests carried inline: the input file is stored by Halro and never uploaded, so its identifier names a Halro object rather than one the upstream also holds
- results collected from a provider that does not return them as a file are bounded by the gateway’s response ceiling; a batch whose results exceed it is reported as undeliverable rather than truncated
- completion_window is honoured only where the provider has one; the Anthropic profile expires a batch 24 hours after creation and accepts no other value
- this is a Halro extension and has no OpenAI official SDK surface
- Run Governance remains experimental until a real business pilot validates the Work Unit and Outcome Definition boundary
Fields and endpoint-specific deviations
Section titled “Fields and endpoint-specific deviations”Expand an endpoint to inspect accepted headers, path fields, body/form fields, response fields, and unique deviations.
POST /halro/v1/runs
- Request headers:
Authorization,Content-Type,Idempotency-Key - Path fields: none
- Body or form fields:
work_unit_id,budget_micros_usd,ttl_seconds - Response fields:
id,work_unit_id,budget_micros_usd,status,expires_at
GET /halro/v1/runs/{id}
- Request headers:
Authorization - Path fields:
id - Body or form fields: no request body
- Response fields:
id,work_unit_id,budget_micros_usd,committed_micros_usd,reserved_micros_usd,unknown_attempts,status
POST /halro/v1/runs/{id}/close
- Request headers:
Authorization,Content-Type,Idempotency-Key - Path fields:
id - Body or form fields:
reason - Response fields:
id,status,closed_at,close_reason
POST /halro/v1/work-units
- Request headers:
Authorization,Content-Type,Idempotency-Key - Path fields: none
- Body or form fields:
outcome_definition_ids - Response fields:
id,project_id,status,created_at
GET /halro/v1/work-units/{id}
- Request headers:
Authorization - Path fields:
id - Body or form fields: no request body
- Response fields:
work_unit,runs,outcomes
POST /halro/v1/work-units/{id}/close
- Request headers:
Authorization,Content-Type,Idempotency-Key - Path fields:
id - Body or form fields: required empty JSON object
{} - Response fields:
id,project_id,status,closed_at
POST /halro/v1/work-units/{id}/outcomes
- Request headers:
Authorization,Content-Type,Idempotency-Key - Path fields:
id - Body or form fields:
definition_id,value,observed_at,evidence_ref,evidence_sha256,supersedes_outcome_id - Response fields:
id,work_unit_id,definition_id,definition_version,value,reporter_key_id,observed_at,ingested_at,revision,governance_sequence,provisional
POST /v1/async/invocations
- Request headers:
Authorization,Content-Type,Idempotency-Key - Path fields: none
- Body or form fields:
model,prompt,s3_output_uri,duration_seconds,dimension,fps,seed - Response fields:
invocation_arn,status,s3_output_uri,failure_message,submitted_at,last_modified_at - Not served by this build: its only Provider Profile is withheld.
GET /v1/async/invocations/{id}
- Request headers:
Authorization - Path fields:
id - Body or form fields: no request body
- Response fields:
invocation_arn,status,s3_output_uri,failure_message,submitted_at,last_modified_at - Not served by this build: its only Provider Profile is withheld.
POST /v1/async/invocations/{id}/cancel
- Request headers:
Authorization - Path fields:
id - Body or form fields: no request body
- Response fields:
error - Not served by this build: its only Provider Profile is withheld.
POST /v1/audio/speech
- Request headers:
Authorization,Content-Type - Path fields: none
- Body or form fields:
model,input,voice,response_format,speed - Response fields:
binary audio
POST /v1/audio/transcriptions
- Request headers:
Authorization,Content-Type - Path fields: none
- Body or form fields:
file,model,language,prompt,response_format,temperature - Response fields:
text
POST /v1/batches
- Request headers:
Authorization,Content-Type,Idempotency-Key - Path fields: none
- Body or form fields:
input_file_id,endpoint,completion_window,metadata - Response fields:
id,object,endpoint,input_file_id,completion_window,status,output_file_id,error_file_id,created_at,expires_at,completed_at,failed_at,cancelling_at,cancelled_at,metadata,errors - Endpoint deviation: every line of the input is checked against the selected profile before the batch is created, because a batch is routed once for many requests; a line the profile cannot carry fails the batch and names itself
GET /v1/batches/{id}
- Request headers:
Authorization - Path fields:
id - Body or form fields: no request body
- Response fields:
id,object,endpoint,input_file_id,completion_window,status,output_file_id,error_file_id,created_at,expires_at,completed_at,failed_at,cancelling_at,cancelled_at,metadata,errors
POST /v1/batches/{id}/cancel
- Request headers:
Authorization - Path fields:
id - Body or form fields: no request body
- Response fields:
id,object,endpoint,input_file_id,completion_window,status,output_file_id,error_file_id,created_at,expires_at,completed_at,failed_at,cancelling_at,cancelled_at,metadata,errors
POST /v1/files
- Request headers:
Authorization,Content-Type,Idempotency-Key,Halro-Route - Path fields: none
- Body or form fields:
file,purpose - Response fields:
id,object,bytes,created_at,filename,purpose,status,status_details
GET /v1/files/{id}
- Request headers:
Authorization - Path fields:
id - Body or form fields: no request body
- Response fields:
id,object,bytes,created_at,filename,purpose,status,status_details
DELETE /v1/files/{id}
- Request headers:
Authorization - Path fields:
id - Body or form fields: no request body
- Response fields:
id,object,deleted
GET /v1/files/{id}/content
- Request headers:
Authorization - Path fields:
id - Body or form fields: no request body
- Response fields:
binary content
POST /v1/images/generations
- Request headers:
Authorization,Content-Type - Path fields: none
- Body or form fields:
model,prompt,n,quality,response_format,size,style - Response fields:
created,data,data[].url,data[].b64_json,data[].revised_prompt - Endpoint deviation: the OpenAI user field is not accepted by this experimental tier
POST /v1/moderations
- Request headers:
Authorization,Content-Type - Path fields: none
- Body or form fields:
model,input - Response fields:
id,model,results
POST /v1/rerank
- Request headers:
Authorization,Content-Type - Path fields: none
- Body or form fields:
model,query,documents,top_n - Response fields:
results - Not served by this build: its only Provider Profile is withheld.
GET /v1/responses/{id}
- Request headers:
Authorization - Path fields:
id - Body or form fields: no request body
- Response fields:
id,object,created_at,completed_at,status,background,error,model,output,usage - Endpoint deviation: only a submission made with background=true is retrievable; a synchronous response is never stored
- Endpoint deviation: the polling cadence is carried in the Retry-After header rather than as a non-standard member of the Response object
- Endpoint deviation: retrieval makes no upstream call and writes no ledger events
- Endpoint deviation: the record is reaped 15 minutes after its first successful retrieval, or at its 24 hour TTL, whichever comes first
DELETE /v1/responses/{id}
- Request headers:
Authorization - Path fields:
id - Body or form fields: no request body
- Response fields:
id,object,deleted - Endpoint deviation: deletion removes the record and both of its sealed objects; it does not undo accounting for work that already happened
- Endpoint deviation: a submission still owed an answer answers 409: cancel it first
POST /v1/responses/{id}/cancel
- Request headers:
Authorization - Path fields:
id - Body or form fields: no request body
- Response fields:
id,object,created_at,completed_at,status,background,error,model,output,usage - Endpoint deviation: cancelling a queued submission is determinate; cancelling one already running is best-effort and is settled conservatively, so the record says plainly that it may have been billed upstream
- Endpoint deviation: a request that has already finished answers 409 rather than pretending to cancel
Best practices
Section titled “Best practices”Use the scenario library for governance, media, Files, Batches, Async, and
deferred-resource lifecycles. Use the advanced API guide for minimal requests,
Halro-Route, idempotency, polling, and current availability.
Why these endpoints share one page
Section titled “Why these endpoints share one page”The 25 endpoints average few request fields. Separate pages would mostly repeat maturity and evidence disclaimers; this consolidated page retains every endpoint’s synchronized fields and deviations.