OpenAPI Specification
openapi: 3.0.1
info:
title: Gremlin agents gamedays API
description: The API for interacting with the Gremlin Failure-as-a-Service platform
termsOfService: https://www.gremlin.com/terms_of_service_2017_03_24
contact:
name: Gremlin Support
email: support@gremlin.com
license:
name: Gremlin License
url: https://www.gremlin.com/license_2017_03_24
version: '1.0'
servers:
- url: https://api.gremlin.com/v1
description: Gremlin API v1
tags:
- name: gamedays
description: Create, update and run GameDays
paths:
/gamedays:
get:
tags:
- gamedays
summary: Get all GameDays by team.
description: Requires the privilege [`MINIMUM_TEAM_PRIVILEGES`](https://www.gremlin.com/docs/user-management/access-control/#privileges)
operationId: getGameDaysForTeam
parameters:
- name: pageSize
in: query
description: This value determines how many results will be returned per call.
schema:
type: integer
format: int32
example: None (unlimited)
- name: pageNumber
in: query
description: Get the specific page of GameDays. Only pageNumber or pageToken accepted along with pageSize
schema:
type: integer
format: int32
example: 1
- name: pageToken
in: query
description: Token corresponding to the last page of GameDays. Pass the pageToken to get the next page of GameDays. Only pageNumber or pageToken accepted along with pageSize
schema:
type: string
example: None (returns first page)
- name: teamId
in: query
description: Required when using company session token.
required: true
schema:
type: string
responses:
'200':
description: Get all GameDays by team.
'404':
description: Not found
'403':
description: 'User requires privilege for target team: MINIMUM_TEAM_PRIVILEGES'
'401':
description: Authorization header missing or malformed. Please provide proper credentials in the authorization header.
security:
- privilege:
- MINIMUM_TEAM_PRIVILEGES
post:
tags:
- gamedays
summary: Create new GameDay plan.
description: Requires the privilege [`MINIMUM_TEAM_PRIVILEGES`](https://www.gremlin.com/docs/user-management/access-control/#privileges)
operationId: createGameDayPlan
parameters:
- name: teamId
in: query
description: Required when using company session token.
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateGameDayPlanRequest'
required: true
responses:
'201':
description: New GameDay plan created
'400':
description: Bad request
'404':
description: Not found
'403':
description: 'User requires privilege for target team: MINIMUM_TEAM_PRIVILEGES'
'401':
description: Authorization header missing or malformed. Please provide proper credentials in the authorization header.
security:
- privilege:
- MINIMUM_TEAM_PRIVILEGES
/gamedays/{gameDayId}/summary/images/{imageName}:
delete:
tags:
- gamedays
summary: Remove an image associated with a gameday
description: 'Deletes a specific image associated with a gameday. This does delete the image on the backend so there is *no* recovery
Requires the privilege [`MINIMUM_TEAM_PRIVILEGES`](https://www.gremlin.com/docs/user-management/access-control/#privileges)'
operationId: delete_1
parameters:
- name: imageName
in: path
required: true
schema:
type: string
- name: gameDayId
in: path
required: true
schema:
type: string
- name: teamId
in: query
description: Required when using company session token.
required: true
schema:
type: string
responses:
default:
description: default response
content:
'*/*': {}
'403':
description: 'User requires privilege for target team: MINIMUM_TEAM_PRIVILEGES'
'401':
description: Authorization header missing or malformed. Please provide proper credentials in the authorization header.
security:
- privilege:
- MINIMUM_TEAM_PRIVILEGES
patch:
tags:
- gamedays
summary: Upload an image to a given gameday
description: "This takes an image as a multipart/form-data (parameter name \"file\") and uploads it to Gremlin's backend and associates it with a given Gameday. \nNOTE: imageNames must be S3 compatible strings ([a-zA-Z0-9!-_'\\(\\)]) with under 1000 characters (including file type)\nRequires the privilege [`MINIMUM_TEAM_PRIVILEGES`](https://www.gremlin.com/docs/user-management/access-control/#privileges)"
operationId: put_1
parameters:
- name: imageName
in: path
required: true
schema:
maxLength: 987
minLength: 0
pattern: '[a-zA-Z0-9\!\-\_\.\*\''\(\)\ ]+'
type: string
- name: gameDayId
in: path
required: true
schema:
type: string
- name: teamId
in: query
description: Required when using company session token.
required: true
schema:
type: string
requestBody:
content:
multipart/form-data:
schema:
type: object
properties:
file:
$ref: '#/components/schemas/FormDataContentDisposition'
responses:
default:
description: default response
content:
'*/*':
schema:
$ref: '#/components/schemas/GameDayResponse'
'403':
description: 'User requires privilege for target team: MINIMUM_TEAM_PRIVILEGES'
'401':
description: Authorization header missing or malformed. Please provide proper credentials in the authorization header.
security:
- privilege:
- MINIMUM_TEAM_PRIVILEGES
/gamedays/{gameDayId}/summary/export:
get:
tags:
- gamedays
summary: Exports GameDay Summary PDF file.
description: Requires the privilege [`MINIMUM_TEAM_PRIVILEGES`](https://www.gremlin.com/docs/user-management/access-control/#privileges)
operationId: export
parameters:
- name: gameDayId
in: path
required: true
schema:
type: string
- name: teamId
in: query
description: Required when using company session token.
required: true
schema:
type: string
responses:
'200':
description: GameDay Summary PDF file
'404':
description: Not found
'403':
description: 'User requires privilege for target team: MINIMUM_TEAM_PRIVILEGES'
'401':
description: Authorization header missing or malformed. Please provide proper credentials in the authorization header.
security:
- privilege:
- MINIMUM_TEAM_PRIVILEGES
/gamedays/{gameDayId}:
get:
tags:
- gamedays
summary: Get GameDay details by id.
description: Requires the privilege [`MINIMUM_TEAM_PRIVILEGES`](https://www.gremlin.com/docs/user-management/access-control/#privileges)
operationId: getGameDay
parameters:
- name: gameDayId
in: path
required: true
schema:
type: string
- name: teamId
in: query
description: Required when using company session token.
required: true
schema:
type: string
responses:
'200':
description: Get GameDay details by id
'404':
description: Not found
'403':
description: 'User requires privilege for target team: MINIMUM_TEAM_PRIVILEGES'
'401':
description: Authorization header missing or malformed. Please provide proper credentials in the authorization header.
security:
- privilege:
- MINIMUM_TEAM_PRIVILEGES
patch:
tags:
- gamedays
summary: Updates a GameDay plan.
description: Requires the privilege [`MINIMUM_TEAM_PRIVILEGES`](https://www.gremlin.com/docs/user-management/access-control/#privileges)
operationId: updateGameDay
parameters:
- name: gameDayId
in: path
required: true
schema:
type: string
- name: teamId
in: query
description: Required when using company session token.
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateGameDayPlanRequest'
required: true
responses:
'200':
description: Updates a GameDay plan.
'400':
description: Bad request
'404':
description: Not found
'403':
description: 'User requires privilege for target team: MINIMUM_TEAM_PRIVILEGES'
'401':
description: Authorization header missing or malformed. Please provide proper credentials in the authorization header.
security:
- privilege:
- MINIMUM_TEAM_PRIVILEGES
/gamedays/{gameDayId}/runs/{scenarioId}:
post:
tags:
- gamedays
summary: Runs specific Scenario associated with GameDay.
description: Requires the privilege [`MINIMUM_TEAM_PRIVILEGES`](https://www.gremlin.com/docs/user-management/access-control/#privileges)
operationId: runScenarioForGameDay
parameters:
- name: gameDayId
in: path
required: true
schema:
type: string
- name: scenarioId
in: path
required: true
schema:
type: string
- name: scenarioVersion
in: query
description: Expected version of scenario. If the current version is different this will receive a 418 with the correct version
schema:
type: integer
format: int32
- name: teamId
in: query
description: Required when using company session token.
required: true
schema:
type: string
responses:
'201':
description: Runs specific Scenario associated with GameDay
'404':
description: Not found
'409':
description: Conflicting execution in progress
'418':
description: Mismatch of current version of scenario with the one passed
'403':
description: 'User requires privilege for target team: MINIMUM_TEAM_PRIVILEGES'
'401':
description: Authorization header missing or malformed. Please provide proper credentials in the authorization header.
security:
- privilege:
- MINIMUM_TEAM_PRIVILEGES
/gamedays/{gameDayId}/summary:
patch:
tags:
- gamedays
summary: Updates a GameDay summary.
description: Requires the privilege [`MINIMUM_TEAM_PRIVILEGES`](https://www.gremlin.com/docs/user-management/access-control/#privileges)
operationId: updateGameDaySummary
parameters:
- name: gameDayId
in: path
required: true
schema:
type: string
- name: teamId
in: query
description: Required when using company session token.
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateGameDaySummaryRequest'
required: true
responses:
'200':
description: Updates a GameDay summary.
'400':
description: Bad request
'404':
description: Not found
'403':
description: 'User requires privilege for target team: MINIMUM_TEAM_PRIVILEGES'
'401':
description: Authorization header missing or malformed. Please provide proper credentials in the authorization header.
security:
- privilege:
- MINIMUM_TEAM_PRIVILEGES
components:
schemas:
ExternalActionNode:
type: object
allOf:
- $ref: '#/components/schemas/GraphNodeObject'
- type: object
properties:
externalActionRequest:
$ref: '#/components/schemas/ExternalActionRequest'
state:
$ref: '#/components/schemas/State'
stateDetails:
$ref: '#/components/schemas/ExternalCallFailedException'
ResponseBodyEvaluation:
required:
- op
- predicates
type: object
properties:
op:
type: string
description: The operation to logically combine predicates into a success or failure
enum:
- AND
- OR
predicates:
type: array
description: The list of predicates to evaluate against the status check response body
items:
$ref: '#/components/schemas/PredicateObject'
description: The configuration for evaluating the success of a response body
StatusCheckNodeRequest:
type: object
properties:
type:
type: string
discriminator:
propertyName: type
ScenarioRunResults:
type: object
properties:
status:
type: string
enum:
- Passed
- Failed
- Unsure
incidentDetected:
type: boolean
incidentMitigated:
type: boolean
GameDayPlan:
type: object
properties:
name:
type: string
goal:
type: string
type:
type: string
enum:
- Exploratory
- TrainTeams
- ValidatePastOutages
- TuneObservability
- Other
createdBy:
type: string
createdAt:
type: string
format: date-time
updatedBy:
type: string
updatedAt:
type: string
format: date-time
participants:
type: array
items:
$ref: '#/components/schemas/Participant'
scenarios:
type: array
items:
$ref: '#/components/schemas/ScenarioSummary'
environment:
type: string
dashboards:
type: array
items:
type: string
format: uri
runbooks:
type: array
items:
type: string
format: uri
GameDaySummary:
type: object
properties:
createdBy:
type: string
createdAt:
type: string
format: date-time
updatedBy:
type: string
updatedAt:
type: string
format: date-time
notes:
type: string
actions:
type: string
gameDayImages:
type: array
items:
type: string
ScenarioRunResponse:
type: object
properties:
scenarioId:
type: string
runNumber:
type: integer
format: int64
orgId:
type: string
name:
type: string
description:
type: string
hypothesis:
type: string
stageInfo:
type: object
additionalProperties:
type: object
createdBy:
type: string
createdByFirstName:
type: string
createdByLastName:
type: string
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
endTime:
type: string
format: date-time
createSource:
type: string
triggerSource:
type: string
enum:
- MANUAL
- RUN_ALL
- SCHEDULED
- RECURRING_SCHEDULE
graph:
$ref: '#/components/schemas/ScenarioRunGraph'
resultNotes:
type: string
resultFlags:
type: object
additionalProperties:
type: boolean
results:
$ref: '#/components/schemas/ScenarioRunResults'
scheduleId:
type: string
scenarioEditCounterAtRunTime:
type: integer
format: int32
scenarioRunImages:
type: array
items:
type: string
gameDayInfo:
$ref: '#/components/schemas/GameDayInfo'
passCriteria:
type: string
enum:
- ALL_PASS
- AT_LEAST_ONE_FAILED
largeScaleTestId:
type: string
HasCompareFunctionObject:
type: object
FormDataContentDisposition:
type: object
properties:
type:
type: string
parameters:
type: object
additionalProperties:
type: string
fileName:
type: string
creationDate:
type: string
format: date-time
modificationDate:
type: string
format: date-time
readDate:
type: string
format: date-time
size:
type: integer
format: int64
name:
type: string
EndpointConfiguration:
required:
- url
type: object
properties:
url:
type: string
description: The URL of the status check
format: url
method:
type: string
description: The method type of the status check
enum:
- GET
- POST
- PUT
- PATCH
headers:
type: object
additionalProperties:
type: string
description: Optional request headers to be used when the status check is invoked
description: Optional request headers to be used when the status check is invoked
payload:
type: string
description: Payload for POST type of request
headersArn:
type: string
description: Optional request headers pulled from a remote AWS resource holding JSON-encoded key-values that make up the headers
ExternalActionRequest:
required:
- type
type: object
properties:
semanticType:
type: string
type:
type: string
discriminator:
propertyName: type
GameDayResponse:
type: object
properties:
guid:
type: string
teamId:
type: string
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
plan:
$ref: '#/components/schemas/GameDayPlan'
summary:
$ref: '#/components/schemas/GameDaySummary'
execution:
$ref: '#/components/schemas/GameDayExecution'
CreateGameDayPlanRequest:
title: CreateGameDayPlanRequest.Input
required:
- name
type: object
properties:
name:
type: string
goal:
type: string
type:
type: string
enum:
- Exploratory
- TrainTeams
- ValidatePastOutages
- TuneObservability
- Other
participants:
maxItems: 20
minItems: 0
type: array
items:
$ref: '#/components/schemas/Participant'
scenarioIds:
maxItems: 20
minItems: 0
type: array
items:
type: string
environment:
type: string
dashboards:
maxItems: 20
minItems: 0
type: array
items:
type: string
format: uri
runbooks:
maxItems: 20
minItems: 0
type: array
items:
type: string
format: uri
description: Represents a request to create a GameDay plan for a team
GameDayExecution:
type: object
properties:
createdBy:
type: string
createdAt:
type: string
format: date-time
lastRunAt:
type: string
format: date-time
results:
type: array
items:
$ref: '#/components/schemas/ExecutionResult'
ExecutionResult:
type: object
properties:
scenario:
$ref: '#/components/schemas/ScenarioSummary'
createdBy:
type: string
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
updatedBy:
type: string
runs:
type: array
items:
$ref: '#/components/schemas/ScenarioRunResponse'
lastResult:
type: string
enum:
- Passed
- Failed
- Unsure
- Completed_Input_Results
- Failed_Input_Results
- Halted_Input_Results
- SetupFailed_Input_Results
- Setup
- Active
lastResultAt:
type: string
format: date-time
lastRunAt:
type: string
format: date-time
lastRunVersion:
type: integer
format: int32
StatusCheckNode:
type: object
allOf:
- $ref: '#/components/schemas/GraphNodeObject'
- type: object
properties:
state:
$ref: '#/components/schemas/State'
name:
type: string
description:
type: string
thirdPartyPresets:
type: string
category:
type: string
enum:
- ERRORS
- LATENCY
- REQUESTS
- UNKNOWN
requestConfiguration:
$ref: '#/components/schemas/StatusCheckNodeRequest'
endpointConfiguration:
$ref: '#/components/schemas/EndpointConfiguration'
rawEndpointConfiguration:
$ref: '#/components/schemas/EndpointConfiguration'
evaluationConfiguration:
$ref: '#/components/schemas/EvaluationConfiguration'
statusCheckId:
type: string
externalIntegrationId:
type: string
statusCheckReferenceId:
type: string
isPrivateNetwork:
type: boolean
isHaltable:
type: boolean
payload:
type: string
isAutoGenerated:
type: boolean
autoGeneratedStatusCheckId:
type: string
resourceIdentifier:
type: string
statusCheckRequest:
$ref: '#/components/schemas/StatusCheckNodeRequest'
intervalSeconds:
type: integer
format: int32
additionalTimeInSecsToRunAfterCompletion:
type: integer
format: int32
RollbackExternalActionNode:
type: object
allOf:
- $ref: '#/components/schemas/GraphNodeObject'
- type: object
properties:
referenceExternalActionId:
type: string
state:
$ref: '#/components/schemas/State'
stateDetails:
$ref: '#/components/schemas/ExternalCallFailedException'
externalActionRequest:
$ref: '#/components/schemas/ExternalActionRequest'
externalActionLifecycle:
type: string
enum:
- NotStarted
- Active
- HaltRequested
- Successful
- Halted
- Failed
didExternalActionNoOp:
type: boolean
GraphNodeObject:
type: object
properties:
type:
type: string
enum:
- Concurrent
- ContinuousStatusCheck
- StatusCheckNode
- Delay
- InfraAttack
- SynchronousStatusCheck
- Continuous
- FailureFlag
- ExternalAction
- RollbackExternalAction
id:
type: string
state:
type: object
readOnly: true
guid:
type: string
next:
type: string
discriminator:
propertyName: type
UpdateGameDayPlanRequest:
title: UpdateGameDayPlanRequest.Input
type: object
properties:
name:
type: string
goal:
type: string
type:
type: string
enum:
- Exploratory
- TrainTeams
- ValidatePastOutages
- TuneObservability
- Other
participants:
maxItems: 20
minItems: 0
type: array
items:
$ref: '#/components/schemas/Participant'
scenarioIds:
maxItems: 20
minItems: 0
type: array
items:
type: string
environment:
type: string
dashboards:
maxItems: 20
minItems: 0
type: array
items:
type: string
format: uri
runbooks:
maxItems: 20
minItems: 0
type: array
items:
type: string
format: uri
description: Represents a request to update a GameDay plan for a team
UpdateGameDaySummaryRequest:
title: UpdateGameDaySummaryRequest.Input
type: object
properties:
notes:
type: string
actions:
type: string
description: Represents a request to update a GameDay summary for a team
ScenarioRunGraph:
type: object
properties:
nodes:
type: object
additionalProperties:
$ref: '#/components/schemas/GraphNodeObject'
start_id:
type: string
writeOnly: true
observers:
type: array
items:
$ref: '#/components/schemas/StatusCheckNode'
current_id:
type: string
writeOnly: true
external_actions:
type: array
writeOnly: true
items:
$ref: '#/components/schemas/ExternalActionNode'
external_rollbacks:
type: array
writeOnly: true
items:
$ref: '#/components/schemas/RollbackExternalActionNode'
startId:
type: string
externalActions:
type: array
items:
$ref: '#/components/schemas/ExternalActionNode'
externalRollbacks:
type: array
readOnly: true
items:
$ref: '#/components/schemas/RollbackExternalActionNode'
currentId:
type: string
readOnly: true
next:
$ref: '#/components/schemas/GraphNodeObject'
nextId:
type: string
nodesRecursive:
type: array
items:
$ref: '#/components/schemas/GraphNodeObject'
expectedLengthWithDelays:
type: integer
format: int32
readOnly: true
eligibleForServiceCreation:
type: boolean
expectedLength:
type: integer
format: int32
readOnly: true
attackTypeQuantity:
type: object
additionalProperties:
type: integer
format: int64
readOnly: true
readOnly: true
providersCountForNodes:
type: object
additionalProperties:
type: integer
format: int32
readOnly: true
readOnly: true
State:
type: object
properties:
lifecycle:
type: string
enum:
- NotStarted
- Active
- HaltRequested
- Successful
- Halted
- Failed
startTime:
type: string
format: date-time
endTime:
type: string
format: date-time
failedReason:
type: string
nodeHaltedByGuid:
type: string
nodeHaltedById:
type: string
readOnly: true
EvaluationConfiguration:
required:
- okStatusCodes
type: object
properties:
okLatencyMaxMs:
type: integer
description: The maximum latency in milliseconds for a successful status check
format: int32
okStatusCodes:
type: array
description: The list of successful response status codes for a successful status check
items:
type: string
description: The list of successful response status codes for a successful status check
responseBodyEvaluation:
$ref: '#/components/schemas/ResponseBodyEvaluation'
description: The configuration for evaluating the success/failure of a status check
GameDayInfo:
type: object
properties:
guid:
type: string
name:
type: string
ScenarioSummary:
type: object
properties:
guid:
type: string
name:
type: string
Participant:
title: CreateGameDayPlanRequest.Participant
required:
- position
type: object
properties:
position:
type: string
enum:
- Owner
- Coordinator
- Observer
- Reporter
email:
type: string
description: Represents a participant in the GameDay
ExternalCallFailedException:
type: object
properties:
cause:
type: object
properties:
stackTrace:
type: array
items:
type: object
properties:
classLoaderName:
type: string
moduleName:
type: string
moduleVersion:
type: string
methodName:
type: string
fileName:
type: string
lineNumber:
type: integer
format: int32
className:
type: string
nativeMethod:
type: boolean
message:
type: string
localizedMessage:
type: string
stackTrace:
type: array
items:
type: object
properties:
classLoaderName:
type: string
moduleName:
type: string
moduleVersion:
type: string
methodName:
type: string
fileName:
type: string
lineNumber:
type: integer
format: int32
className:
type: string
nativeMethod:
type: boolean
errorCode:
type: string
requestId:
type: string
statusCode:
type: integer
format: int32
message:
type: string
suppressed:
type: array
items:
type: object
properties:
stackTrace:
type: array
items:
type: object
properties:
classLoaderName:
type: string
moduleName:
type: string
moduleVersion:
type: string
methodName:
type: string
fileName:
type: string
lineNumber:
type: integer
format: int32
className:
type: string
nativeMethod:
type: boolean
message:
type: string
localizedMessage:
type: string
localizedMessage:
type: strin
# --- truncated at 32 KB (32 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/gremlin/refs/heads/main/openapi/gremlin-gamedays-api-openapi.yml