OpenAPI Specification
openapi: 3.1.0
info:
title: Archal Auth Sessions API
summary: Public API for Archal CLI, session, trace, result, and runtime clone integrations.
description: Archal provisions service-shaped clones of third-party services so AI agents can be tested before they touch production. This spec covers Archal-owned control-plane endpoints and the runtime proxy shape agents use to call clone APIs.
version: 0.3.0
servers:
- url: https://archal.ai
description: Archal web and CLI API
- url: https://api.archal.ai
description: Hosted runtime proxy
security:
- archalToken: []
tags:
- name: Sessions
description: Hosted clone session lifecycle.
paths:
/api/sessions:
get:
operationId: listSessions
summary: List active hosted clone sessions
tags:
- Sessions
responses:
'200':
description: Active sessions owned by the authenticated user.
content:
application/json:
schema:
$ref: '#/components/schemas/SessionListResponse'
'401':
$ref: '#/components/responses/Unauthorized'
post:
operationId: createSession
summary: Create a hosted clone session
tags:
- Sessions
parameters:
- $ref: '#/components/parameters/IdempotencyKey'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateSessionRequest'
responses:
'200':
description: Created hosted clone session.
content:
application/json:
schema:
$ref: '#/components/schemas/SessionSummary'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'426':
description: CLI upgrade required.
/api/sessions/{sessionId}:
get:
operationId: getSession
summary: Get hosted clone session status
tags:
- Sessions
parameters:
- $ref: '#/components/parameters/SessionId'
responses:
'200':
description: Current session status and endpoints.
content:
application/json:
schema:
$ref: '#/components/schemas/SessionSummary'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
delete:
operationId: deleteSession
summary: Stop a hosted clone session
tags:
- Sessions
parameters:
- $ref: '#/components/parameters/SessionId'
responses:
'204':
description: Session stopped.
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'502':
description: Runtime teardown failed.
components:
responses:
Forbidden:
description: Authenticated user cannot access the requested resource.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
Unauthorized:
description: Missing, invalid, or expired Archal token.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
BadRequest:
description: Request is malformed or failed validation.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
NotFound:
description: Requested resource was not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
schemas:
CreateSessionRequest:
type: object
required:
- clones
properties:
clones:
type: array
minItems: 1
items:
type: string
examples:
- - github
scenarioId:
type: string
preflightOnly:
type: boolean
transport:
type: string
default: cloud
examples:
- cloud
ttlSeconds:
type: integer
minimum: 1
maximum: 86400
scenarioRunCount:
type: integer
minimum: 1
maximum: 1000
default: 1
rateLimit:
type: integer
minimum: 1
maximum: 100000
routing:
$ref: '#/components/schemas/JsonObject'
seeds:
type: object
additionalProperties:
type: string
source:
$ref: '#/components/schemas/JsonObject'
credential:
$ref: '#/components/schemas/JsonObject'
runConfig:
$ref: '#/components/schemas/JsonObject'
scenarioDraft:
$ref: '#/components/schemas/JsonObject'
runProject:
$ref: '#/components/schemas/JsonObject'
additionalProperties: false
JsonObject:
type: object
additionalProperties: true
ErrorResponse:
type: object
properties:
error:
type: string
code:
type: string
message:
type: string
detail:
type: string
additionalProperties: true
SessionSummary:
type: object
required:
- sessionId
- status
- cloneIds
- endpoints
- apiBaseUrls
- createdAt
- expiresAt
properties:
sessionId:
type: string
status:
type: string
examples:
- starting
- running
- ended
- failed
alive:
type: boolean
cloneIds:
type: array
items:
type: string
endpoints:
type: object
additionalProperties:
type: string
format: uri
mcp:
type: object
additionalProperties:
type: string
format: uri
apiBaseUrls:
type: object
additionalProperties:
type: string
format: uri
resolvedSeeds:
type: object
additionalProperties:
type: string
evidence:
$ref: '#/components/schemas/JsonObject'
runtimeProvider:
type: string
scenarioId:
type:
- string
- 'null'
batchId:
type:
- string
- 'null'
createdAt:
type: string
format: date-time
expiresAt:
type: string
format: date-time
endedAt:
type:
- string
- 'null'
format: date-time
lastError:
type:
- string
- 'null'
additionalProperties: true
SessionListResponse:
type: object
required:
- sessions
properties:
sessions:
type: array
items:
$ref: '#/components/schemas/SessionSummary'
additionalProperties: false
parameters:
SessionId:
name: sessionId
in: path
required: true
schema:
type: string
examples:
- env_12345
IdempotencyKey:
name: Idempotency-Key
in: header
schema:
type: string
maxLength: 200
securitySchemes:
archalToken:
type: http
scheme: bearer
bearerFormat: Archal API token
routeAuthorization:
type: apiKey
in: header
name: x-route-authorization