openapi: 3.0.1 info: title: Gremlin agents schedules 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: schedules description: Get, create, and delete schedules paths: /schedules/attacks: get: tags: - schedules summary: Get all active experiment schedules. This functionality has moved to GET /schedules/attacks/paged. description: Requires the privilege [`EXPERIMENTS_READ`](https://www.gremlin.com/docs/user-management/access-control/#privileges) operationId: getAttackSchedules parameters: - name: teamId in: query description: Required when using company session token. required: true schema: type: string responses: default: content: application/json: schema: type: array items: $ref: '#/components/schemas/ScheduleResponse' '403': description: 'User requires privilege for target team: EXPERIMENTS_READ' '401': description: Authorization header missing or malformed. Please provide proper credentials in the authorization header. deprecated: true security: - privilege: - EXPERIMENTS_READ post: tags: - schedules summary: Create an attack schedule. description: Requires the privilege [`EXPERIMENTS_RUN`](https://www.gremlin.com/docs/user-management/access-control/#privileges) operationId: createAttackSchedule 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/Input' responses: default: content: application/json: schema: $ref: '#/components/schemas/ScheduleResponse' '403': description: 'User requires privilege for target team: EXPERIMENTS_RUN' '401': description: Authorization header missing or malformed. Please provide proper credentials in the authorization header. security: - privilege: - EXPERIMENTS_RUN /schedules: post: tags: - schedules summary: This functionality has moved to POST /schedules/attacks. description: Requires the privilege [`EXPERIMENTS_RUN`](https://www.gremlin.com/docs/user-management/access-control/#privileges) operationId: createAttackScheduleLegacy 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/Input' responses: default: content: application/json: schema: $ref: '#/components/schemas/ScheduleResponse' '403': description: 'User requires privilege for target team: EXPERIMENTS_RUN' '401': description: Authorization header missing or malformed. Please provide proper credentials in the authorization header. deprecated: true security: - privilege: - EXPERIMENTS_RUN /schedules/scenarios: get: tags: - schedules summary: Get all scenario schedules. This functionality has moved to GET /schedules/scenarios/paged. description: Requires the privilege [`SCENARIOS_READ`](https://www.gremlin.com/docs/user-management/access-control/#privileges) operationId: getScenarioSchedules_1 parameters: - name: teamId in: query description: Required when using company session token. required: true schema: type: string responses: default: content: application/json: schema: type: array items: $ref: '#/components/schemas/ScenarioScheduleResponse' '403': description: 'User requires privilege for target team: SCENARIOS_READ' '401': description: Authorization header missing or malformed. Please provide proper credentials in the authorization header. deprecated: true security: - privilege: - SCENARIOS_READ post: tags: - schedules summary: Create a scenario schedule. description: Requires the privilege [`SCENARIOS_RUN`](https://www.gremlin.com/docs/user-management/access-control/#privileges) operationId: createScenarioSchedule 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/CreateScenarioScheduleRequest' responses: default: content: text/plain: schema: $ref: '#/components/schemas/ScenarioSchedule' '403': description: 'User requires privilege for target team: SCENARIOS_RUN' '401': description: Authorization header missing or malformed. Please provide proper credentials in the authorization header. security: - privilege: - SCENARIOS_RUN /schedules/attacks/{guid}: get: tags: - schedules summary: Get an attack schedule. description: Requires the privilege [`EXPERIMENTS_READ`](https://www.gremlin.com/docs/user-management/access-control/#privileges) operationId: getSingleAttackSchedule parameters: - name: guid in: path description: This value represents the globally unique identifier of the record to fetch. required: true schema: type: string - name: teamId in: query description: Required when using company session token. required: true schema: type: string responses: default: content: application/json: schema: $ref: '#/components/schemas/ScheduleResponse' '403': description: 'User requires privilege for target team: EXPERIMENTS_READ' '401': description: Authorization header missing or malformed. Please provide proper credentials in the authorization header. security: - privilege: - EXPERIMENTS_READ delete: tags: - schedules summary: Delete an attack schedule. description: Requires the privilege [`HALT_WRITE`](https://www.gremlin.com/docs/user-management/access-control/#privileges) operationId: deleteAttackSchedule parameters: - name: guid in: path description: This value represents the globally unique identifier of the record to fetch. 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: text/plain: {} '403': description: 'User requires privilege for target team: HALT_WRITE' '401': description: Authorization header missing or malformed. Please provide proper credentials in the authorization header. security: - privilege: - HALT_WRITE /schedules/{guid}: get: tags: - schedules summary: This functionality has moved to GET /schedules/attacks/{guid}. description: Requires the privilege [`EXPERIMENTS_READ`](https://www.gremlin.com/docs/user-management/access-control/#privileges) operationId: getSingleAttackScheduleLegacy parameters: - name: guid in: path description: This value represents the globally unique identifier of the record to fetch. required: true schema: type: string - name: teamId in: query description: Required when using company session token. required: true schema: type: string responses: default: content: application/json: schema: $ref: '#/components/schemas/ScheduleResponse' '403': description: 'User requires privilege for target team: EXPERIMENTS_READ' '401': description: Authorization header missing or malformed. Please provide proper credentials in the authorization header. deprecated: true security: - privilege: - EXPERIMENTS_READ delete: tags: - schedules summary: This functionality has moved to DELETE /schedules/attacks/{guid} description: Requires the privilege [`HALT_WRITE`](https://www.gremlin.com/docs/user-management/access-control/#privileges) operationId: deleteAttackScheduleLegacy parameters: - name: guid in: path description: This value represents the globally unique identifier of the record to fetch. 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: text/plain: {} '403': description: 'User requires privilege for target team: HALT_WRITE' '401': description: Authorization header missing or malformed. Please provide proper credentials in the authorization header. deprecated: true security: - privilege: - HALT_WRITE /schedules/scenarios/{guid}: get: tags: - schedules summary: Get a scenario schedule. description: Requires the privilege [`SCENARIOS_READ`](https://www.gremlin.com/docs/user-management/access-control/#privileges) operationId: getSingleScenarioSchedule parameters: - name: guid in: path description: This value represents the globally unique identifier of the record to fetch. required: true schema: type: string - name: teamId in: query description: Required when using company session token. required: true schema: type: string responses: default: content: application/json: schema: $ref: '#/components/schemas/ScenarioScheduleResponse' '403': description: 'User requires privilege for target team: SCENARIOS_READ' '401': description: Authorization header missing or malformed. Please provide proper credentials in the authorization header. security: - privilege: - SCENARIOS_READ put: tags: - schedules summary: Update a scenario schedule. description: Requires the privilege [`SCENARIOS_WRITE`](https://www.gremlin.com/docs/user-management/access-control/#privileges) operationId: updateScenarioSchedule parameters: - name: guid in: path description: This value represents the globally unique identifier of the record to fetch. 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/UpdateScenarioScheduleRequest' responses: default: content: '*/*': schema: type: string '403': description: 'User requires privilege for target team: SCENARIOS_WRITE' '401': description: Authorization header missing or malformed. Please provide proper credentials in the authorization header. security: - privilege: - SCENARIOS_WRITE delete: tags: - schedules summary: Delete a scenario schedule. description: Requires the privilege [`SCENARIOS_WRITE`](https://www.gremlin.com/docs/user-management/access-control/#privileges) operationId: deleteScenarioSchedule parameters: - name: guid in: path description: This value represents the globally unique identifier of the record to fetch. 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: text/plain: {} '403': description: 'User requires privilege for target team: SCENARIOS_WRITE' '401': description: Authorization header missing or malformed. Please provide proper credentials in the authorization header. security: - privilege: - SCENARIOS_WRITE /schedules/scenarios/{guid}/enabled: post: tags: - schedules summary: Enable a scenario schedule. description: Requires the privilege [`SCENARIOS_WRITE`](https://www.gremlin.com/docs/user-management/access-control/#privileges) operationId: enableScenarioSchedule parameters: - name: guid in: path description: This value represents the globally unique identifier of the record to fetch. 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: text/plain: {} '403': description: 'User requires privilege for target team: SCENARIOS_WRITE' '401': description: Authorization header missing or malformed. Please provide proper credentials in the authorization header. security: - privilege: - SCENARIOS_WRITE delete: tags: - schedules summary: Disable a scenario schedule. description: Requires the privilege [`SCENARIOS_WRITE`](https://www.gremlin.com/docs/user-management/access-control/#privileges) operationId: disableScenarioSchedule parameters: - name: guid in: path description: This value represents the globally unique identifier of the record to fetch. 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: text/plain: {} '403': description: 'User requires privilege for target team: SCENARIOS_WRITE' '401': description: Authorization header missing or malformed. Please provide proper credentials in the authorization header. security: - privilege: - SCENARIOS_WRITE /schedules/active: get: tags: - schedules summary: This functionality has moved to GET /schedules/attacks. description: Requires the privilege [`EXPERIMENTS_READ`](https://www.gremlin.com/docs/user-management/access-control/#privileges) operationId: getAttackSchedulesLegacy parameters: - name: teamId in: query description: Required when using company session token. required: true schema: type: string responses: default: content: application/json: schema: type: array items: $ref: '#/components/schemas/ScheduleResponse' '403': description: 'User requires privilege for target team: EXPERIMENTS_READ' '401': description: Authorization header missing or malformed. Please provide proper credentials in the authorization header. deprecated: true security: - privilege: - EXPERIMENTS_READ /schedules/attacks/paged: get: tags: - schedules summary: Paginated endpoint for listing a team's experiment schedules ordered by trigger time. description: Requires the privilege [`EXPERIMENTS_READ`](https://www.gremlin.com/docs/user-management/access-control/#privileges) operationId: getPaginatedAttackSchedules 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: pageToken in: query description: Pass the pageToken to get the next page of experiment schedules 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: default: description: default response content: application/json: schema: $ref: '#/components/schemas/PagedResponseScheduleResponse' '403': description: 'User requires privilege for target team: EXPERIMENTS_READ' '401': description: Authorization header missing or malformed. Please provide proper credentials in the authorization header. security: - privilege: - EXPERIMENTS_READ /schedules/scenarios/paged: get: tags: - schedules summary: Paginated endpoint for listing a team's scenario schedules ordered by trigger time. description: Requires the privilege [`SCENARIOS_READ`](https://www.gremlin.com/docs/user-management/access-control/#privileges) operationId: getPaginatedScenarioSchedules 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: pageToken in: query description: Pass the pageToken to get the next page of scenario schedules 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: default: description: default response content: application/json: schema: $ref: '#/components/schemas/PagedResponseScenarioScheduleResponse' '403': description: 'User requires privilege for target team: SCENARIOS_READ' '401': description: Authorization header missing or malformed. Please provide proper credentials in the authorization header. security: - privilege: - SCENARIOS_READ /schedules/services/paged: get: tags: - schedules summary: Paginated endpoint for listing a team's service schedules ordered by trigger time. description: Requires the privilege [`SERVICES_READ`](https://www.gremlin.com/docs/user-management/access-control/#privileges) operationId: getPaginatedServiceSchedules 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: pageToken in: query description: Pass the pageToken to get the next page of service schedules 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: default: description: default response content: application/json: schema: $ref: '#/components/schemas/PagedResponseServiceScheduleResponse' '403': description: 'User requires privilege for target team: SERVICES_READ' '401': description: Authorization header missing or malformed. Please provide proper credentials in the authorization header. security: - privilege: - SERVICES_READ components: schemas: CreateScenarioScheduleRequest: title: ScenarioSchedule.Input type: object properties: trigger: type: object properties: windowType: type: string enum: - Once - Random type: type: string templateId: type: string optionalTemplateId: type: string empty: type: boolean additionalProperties: type: object enabled: type: boolean scenarioId: type: string PagedResponseScenarioScheduleResponse: type: object properties: pageNumber: type: integer format: int32 pageSize: type: integer description: 'The size of the page requested. If none was supplied this is a default value (depending on the endpoint). If the length of items is less than this number that means there are _no_ more pages to request. NOTE: if the length *is* equal there may or may not be additional pages to request, it is unknowable until they are requested ' format: int32 pageToken: type: string description: Supply this token on successive requests to retrieve the next page if there is one items: type: array items: $ref: '#/components/schemas/ScenarioScheduleResponse' Strategy: type: object properties: type: type: string enum: - Exact - RandomCount - RandomPercent tags: type: object additionalProperties: type: string multiSelectLabels: type: object additionalProperties: type: array items: type: string labels: type: object additionalProperties: type: string allHosts: type: boolean allContainers: type: boolean hostIds: type: array items: type: string containerIds: type: array items: type: string multiSelectTags: type: object additionalProperties: type: array items: type: string ServiceScheduleResponse: type: object properties: teamId: type: string serviceId: type: string serviceName: type: string nextReliabilityTestId: type: string nextReliabilityTestName: type: string nextReliabilityDependencyId: type: string nextReliabilityDependencyName: type: string nextFailureFlagName: type: string nextTestTriggerSource: type: string enum: - MANUAL - RUN_ALL - SCHEDULED - RECURRING_SCHEDULE nextTestTriggeredBy: type: string nextTriggerTime: type: string format: date-time ScenarioSchedule: type: object properties: orgId: type: string guid: type: string scenarioId: type: string scenarioName: type: string targets: type: array items: $ref: '#/components/schemas/ServiceTarget' failureFlagTargets: type: array items: $ref: '#/components/schemas/FailureFlagTarget' trigger: type: object properties: windowType: type: string enum: - Once - Random type: type: string templateId: type: string optionalTemplateId: type: string empty: type: boolean additionalProperties: type: object createSource: type: string enum: - WebApp - Api - Scheduled - Manual - Spinnaker - Concord - GremlinFeeder - GremlinSdkPython - Scenario - Chao - K8sBackend - Website - Neotys - IntegrationClient - Validation createdBy: type: string enabled: type: boolean nextWindowTriggerTimes: type: object additionalProperties: type: string nextTriggerTime: type: string format: date-time lastScenarioRun: type: string createdAt: type: string format: date-time updatedAt: type: string format: date-time companyId: type: string triggerSource: type: string enum: - MANUAL - RUN_ALL - SCHEDULED - RECURRING_SCHEDULE serviceIds: type: array items: type: string window: $ref: '#/components/schemas/Window' nextWindowTriggerTimesAfterConverting: type: object additionalProperties: type: string writeOnly: true triggerTimesLeft: type: array writeOnly: true items: type: integer format: int32 PagedResponseServiceScheduleResponse: type: object properties: pageNumber: type: integer format: int32 pageSize: type: integer description: 'The size of the page requested. If none was supplied this is a default value (depending on the endpoint). If the length of items is less than this number that means there are _no_ more pages to request. NOTE: if the length *is* equal there may or may not be additional pages to request, it is unknowable until they are requested ' format: int32 pageToken: type: string description: Supply this token on successive requests to retrieve the next page if there is one items: type: array items: $ref: '#/components/schemas/ServiceScheduleResponse' Window: type: object properties: type: type: string enum: - Once - Random triggerTimesLeft: type: array items: type: integer format: int32 end: type: string format: date-time start: type: string format: date-time interval: $ref: '#/components/schemas/Interval' maxRunsPerWindow: type: integer format: int32 ServiceTarget: required: - targetingStrategy type: object properties: serviceId: type: string targetingStrategy: $ref: '#/components/schemas/TargetingStrategy' Chronology: type: object properties: zone: $ref: '#/components/schemas/DateTimeZone' DateTimeZone: type: object properties: id: type: string fixed: type: boolean ScenarioScheduleResponse: type: object properties: orgId: type: string guid: type: string scenarioId: type: string scenarioName: type: string trigger: type: object properties: windowType: type: string enum: - Once - Random type: type: string templateId: type: string optionalTemplateId: type: string empty: type: boolean additionalProperties: type: object createdBy: type: string createSource: type: string enum: - WebApp - Api - Scheduled - Manual - Spinnaker - Concord - GremlinFeeder - GremlinSdkPython - Scenario - Chao - K8sBackend - Website - Neotys - IntegrationClient - Validation triggerSource: type: string enum: - MANUAL - RUN_ALL - SCHEDULED - RECURRING_SCHEDULE enabled: type: boolean createdAt: type: string format: date-time updatedAt: type: string format: date-time nextTriggerTime: type: string format: date-time targets: type: array items: $ref: '#/components/schemas/ServiceTarget' failureFlagTargets: type: array items: $ref: '#/components/schemas/FailureFlagTarget' TargetSampling: required: - type type: object properties: type: type: string discriminator: propertyName: type ScheduleResponse: type: object properties: orgId: type: string guid: type: string trigger: type: object properties: windowType: type: string enum: - Once - Random type: type: string templateId: type: string optionalTemplateId: type: string empty: type: boolean additionalProperties: type: object target: type: object properties: multiSelectTags: type: object additionalProperties: type: array items: type: string strategyInput: $ref: '#/components/schemas/TargetStrategy' multiSelectLabels: type: object additionalProperties: type: array items: type: string type: type: string templateId: type: string optionalTemplateId: type: string empty: type: boolean tags: type: object additionalProperties: type: string writeOnly: true additionalProperties: type: object command: type: object properties: providers: type: array items: type: string args: type: array items: type: string trafficImpactMapping: $ref: '#/components/schemas/TaskTrafficImpactMappingInput' trafficImpactFromWithSelectTags: type: object additionalProperties: type: array items: type: string writeOnly: true trafficImpactWithDependencyIds: type: array writeOnly: true items: type: string type: type: string templateId: type: string optionalTemplateId: type: string empty: type: boolean additionalProperties: type: object createdBy: type: string taskIds: type: array items: type: string createSource: type: string enum: - WebApp - Api - Scheduled - Manual - Spinnaker - Concord - GremlinFeeder - GremlinSdkPython - Scenario - Chao - K8sBackend - Website - Neotys - IntegrationClient - Validation triggerSource: type: string enum: - MANUAL - RUN_ALL - SCHEDULED - RECURRING_SCHEDULE createdAt: type: string format: date-time updatedAt: type: string format: date-time attackConfiguration: $ref: '#/components/schemas/AttackConfiguration' nextTriggerTime: type: string format: date-time TargetingStrategy: required: - type type: object properties: type: type: string discriminator: propertyName: type InfraCommandArgs: type: object properties: type: type: string enum: - CPU - IO - Memory - Disk - Thread_Bomb - Blackhole - DNS - Latency - Packet_Loss - Collect_Certs - Shutdown - Time_Travel - Process_Killer - Process_Exhaustion - GPU - Unknown unknownArgs: type: object additionalProperties: type: string duplicateArgs: type: array items: type: object additionalProperties: type: string cliArgs: type: array items: type: string lengthOrZero: type: integer format: int32 UpdateScenarioScheduleRequest: type: object properties: trigger: type: object properties: windowType: type: string enum: - Once - Random type: type: string templateId: type: string optionalTemplateId: type: string empty: type: boolean additionalProperties: type: object enabled: type: boolean Interval: type: object properties: chronology: $ref: '#/components/schemas/Chronology' end: type: string format: date-time start: type: string format: date-time startMillis: type: integer format: int64 endMillis: type: integer format: int64 afterNow: type: boolean beforeNow: type: boolean Selector: required: - labels - name type: object properties: name: type: string labels: type: object additionalProperties: type: array description: Label selectors for matching resources example: foo: - bar - baz items: type: string description: Label selectors for matching resources example: '{"foo":["bar","baz"]}' description: Label selectors for matching resources example: foo: - bar - baz TargetStrategy: type: object properties: type: type: string enum: - Exact - Regex - Random strategy: $ref: '#/components/schemas/Strategy' containerLabels: type: object additionalProperties: type: array items: type: string hostTags: type: object additionalProperties: type: array items: type: string allContainers: type: boolean allHosts: type: boolean hostIds: type: array items: type: string containerIds: type: array items: type: string hostsInput: type: object containersInput: type: object ServiceCommand: type: object properties: infraCommandType: type: string enum: - CPU - IO - Memory - Disk - Thread_Bomb - Blackhole - DNS - Latency - Packet_Loss - Collect_Certs - Shutdown - Time_Travel - Process_Killer - Process_Exhaustion - GPU - Unknown infraCommandArgs: $ref: '#/components/schemas/InfraCommandArgs' Input: type: object properties: command: type: object properties: providers: type: array items: type: string args: type: array items: type: string trafficImpactMapping: $ref: '#/components/schemas/TaskTrafficImpactMappingInput' trafficImpactFromWithSelectTags: type: object additionalProperties: type: array items: type: string writeOnly: true trafficImpactWithDependencyIds: type: array writeOnly: true items: type: string type: type: string templateId: type: string optionalTemplateId: type: string empty: type: boolean additionalProperties: type: object target: type: object properties: multiSelectTags: type: object additionalProperties: type: array items: type: string strategyInput: $ref: '#/components/schemas/TargetStrategy' multiSelectLabels: type: object additionalProperties: type: array items: type: string type: type: string templateId: type: string optionalTemplateId: type: string empty: type: boolean tags: type: object additionalProperties: type: string writeOnly: true additionalProperties: type: object trigger: type: object properties: windowType: type: string enum: - Once - Random type: type: string templateId: type: string optionalTemplateId: type: string empty: type: boolean additionalProperties: type: object attackConfiguration: $ref: '#/components/schemas/AttackConfiguration' TaskTrafficImpactMappingInput: type: object properties: multiSelectTags: type: object additionalProperties: type: array items: type: string dependencyIds: type: array items: type: string FailureFlagTarget: type: object properties: app: $ref: '#/components/schemas/Selector' flag: $ref: '#/components/schemas/Selector' appInstanceSampling: $ref: '#/components/schemas/TargetSampling' resolvedAppInstanceIds: type: array items: type: string AttackConfiguration: required: - command - targets type: object properties: command: $ref: '#/components/schemas/ServiceCommand' targets: type: array items: $ref: '#/components/schemas/ServiceTarget' sampling: $ref: '#/components/schemas/TargetSampling' PagedResponseScheduleResponse: type: object properties: pageNumber: type: integer format: int32 pageSize: type: integer description: 'The size of the page requested. If none was supplied this is a default value (depending on the endpoint). If the length of items is less than this number that means there are _no_ more pages to request. NOTE: if the length *is* equal there may or may not be additional pages to request, it is unknowable until they are requested ' format: int32 pageToken: type: string description: Supply this token on successive requests to retrieve the next page if there is one items: type: array items: $ref: '#/components/schemas/ScheduleResponse'