Splunk Observability Cloud Synthetics API tests (V1)
API for creating, updating, retrieving, and deleting Splunk Synthetic Monitoring API tests using the legacy service routes (/tests/api).
API for creating, updating, retrieving, and deleting Splunk Synthetic Monitoring API tests using the legacy service routes (/tests/api).
openapi: 3.0.3
info:
title: Splunk Observability Cloud — Synthetics API tests (V1)
version: 1.0.2
description: 'API for creating, updating, retrieving, and deleting Splunk Synthetic Monitoring API tests using the legacy
service routes (/tests/api).
Note: This API is deprecated. For new integrations, use the Synthetics API tests V2 API instead. V2 endpoints are available
under /v2/tests/api.
Requirements
You must have an organization access token with the API permission or a session token endpoint.
You have to have the Splunk Observability Cloud admin or power role to use the POST /tests/api/try_now, POST /tests/api/validate,
PUT /tests/api/{id}/validate, PUT /tests/api/{id}, DELETE /tests/api/{id}, and POST /tests/api operations.
You have to have the Splunk Observability Cloud admin, power, or read_only role to use the GET /tests/api/{id} operation.'
x-provenance:
method: reconstructed
authored_by: Splunk (content) / API Evangelist (assembly)
reconstructed_by: API Evangelist
reconstructed_on: '2026-08-19'
first_party: false
provider_published: false
note: Splunk's own OpenAPI objects, extracted from the React Server Component payload embedded in each of the 48 API reference
pages at dev.splunk.com. The operations and schemas are Splunk's; the assembly into standalone documents is API Evangelist's.
Splunk serves no fetchable spec file — dev.splunk.com answers 200 with an identical 6,638-byte shell for every asset
path, including invented control paths — so this is NOT first-party publication and is not graded as such.
x-evidence:
- type: source
url: https://dev.splunk.com/observability/reference/
- type: source
url: https://dev.splunk.com/observability/docs/apibasics/api_list/
servers:
- url: https://api.{REALM}.observability.splunkcloud.com/v2/synthetics
description: Endpoint URL (legacy API tests V1; deprecated)
variables:
REALM:
default: us0
description: Splunk Observability Cloud realm the organization is provisioned in (for example us0, us1, eu0, jp0, au0).
security:
- SessionToken: []
components:
securitySchemes:
SessionToken:
type: apiKey
in: header
name: X-SF-Token
description: Splunk Observability Cloud session token or org access token.
paths:
/tests/api:
post:
summary: createApiTest
description: 'Creates a new API test, based on the specifications in the request body.
Requirements
You must have an organization access token with the API permission or a session token endpoint.
You have to have the Splunk Observability Cloud admin or power role.'
parameters:
- name: Content-Type
in: header
description: Format of the request body. Always "application/json".
required: true
schema:
type: string
- name: X-SF-TOKEN
in: header
description: Authentication token.
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
test:
type: object
properties:
active:
type: boolean
default: true
example: true
description: Describes if the test is active.
automaticRetries:
type: integer
default: 0
example: 1
description: Automatically retry if the run fails
deviceId:
type: integer
format: int32
example: 1
description: The unique ID of the device.
locationIds:
type: array
items:
type: string
example:
- aws-us-east-1
title: LocationIds
description: An array of location IDs where the test runs.
name:
type: string
example: My API test
frequency:
type: integer
format: int32
example: 5
title: Frequency
description: How often to run your test.
schedulingStrategy:
type: string
example: round_robin
title: SchedulingStrategy
description: 'Type of scheduling strategy. This can only be:
round_robin
concurrent'
requests:
type: array
items:
type: object
properties:
configuration:
type: object
properties:
name:
type: string
example: Get products
requestMethod:
type: string
example: GET
description: 'Must be one of the following:
GET
POST
PUT
PATCH
DELETE
HEAD
OPTIONS'
url:
type: string
example: https://dummyjson.com/products
headers:
type: object
properties:
Accept:
type: string
example: application/json
x-foo:
type: string
example: bar
description: HTTP headers to add to your request.
body:
type: string
example: '''{"alert_name":"the service is
down","url":"https://foo.com/bar"}''
'
certificateId:
type: integer
format: int64
nullable: true
example: 1
description: The unique ID of the client certificate.
httpVersion:
type: string
nullable: true
enum:
- '1.1'
- '2.0'
example: '1.1'
description: 'Must be one of the following:
1.1
2.0'
setup:
type: array
items:
anyOf:
- type: object
properties:
name:
type: string
example: First setup step
title: ApiTestSetupName
description: Name of your test setup step.
type:
type: string
example: extract_json
title: ApiTestExtractType
description: 'The type of document to extract. This should be one of the following:
extract_json
extract_html
extract_xml'
source:
type: string
example: '{''foo'': ''bar''}'
title: ApiTestSource
description: Source document to extract fields from.
extractor:
type: string
example: $$.foo
title: ApiTestExtractor
description: Extracting language. This must be in JSONPath, XMLPath, or HTMLPath
variable:
type: string
example: myVariable
title: ApiTestVariable
description: Variable to save your extraction.
title: ApiTestExtractSetup
description: Setup instructions for extracting data for API tests.
- type: object
properties:
name:
type: string
example: First setup step
title: ApiTestSetupName
description: Name of your test setup step.
type:
type: string
example: javascript
description: Value must be javascript
code:
type: string
example: console.log('hello world')
variable:
type: string
example: myVariable
title: ApiTestVariable
description: Variable to save your extraction.
title: ApiTestJavascript
description: Instructions for custom Javascript code
- type: object
properties:
name:
type: string
example: First setup step
title: ApiTestSetupName
description: Name of your test setup step.
type:
type: string
example: save
description: Value must be save
value:
type: string
example: '{{response.body}}'
description: 'The value of the variable you are saving. If you are saving the
response body, the value of this field should be {{response.body}}.
Other valid options include:
{{custom.<myCustomVariable>}}
{{env.<myGlobalVariable>}}
{{response.code}}
{{response.first_byte_time}}
{{response.body_size}}
{{response.dns_time}}
{{response.response_time}}
{{headers.<headerName>}}'
variable:
type: string
example: myVariable
title: ApiTestVariable
description: Variable to save your extraction.
title: ApiTestSave
description: Save a custom field, response value, response header, or response body to a variable.
validations:
type: array
items:
anyOf:
- type: object
properties:
name:
type: string
example: My validation step
title: ApiTestValidationName
description: Name of your validation step.
type:
type: string
example: assert_numeric
description: 'Type of assertion. Possible values for this must be paired with a valid
comparator. Values are:
assert_string
assert_numeric'
actual:
type: string
example: '{{response.code}}'
description: 'The actual value to validate. This can be any string, a variable, or a metric
value. Valid options include:
{{custom.<myCustomVariable>}}
{{env.<myGlobalVariable>}}
{{response.body}}
{{response.code}}
{{response.first_byte_time}}
{{response.body_size}}
{{response.dns_time}}
{{response.response_time}}
{{headers.<headerName>}}'
expected:
type: string
example: 200
description: What you expect the variable to be.
comparator:
type: string
example: equals
description: 'Comparator between the actual value and the expected value. Must be
one of the following depending on the type:
For assert_string:
is_empty
is_not_empty
contains
does_not_contain
equals
does_not_equal
matches
does_not_match
For assert_numeric:
is_less_than
is_less_than_or_equal_to
equals
does_not_equal
is_greater_than
is_greater_than_or_equal_to'
title: ApiTestValidationAssert
description: Validation step to assert custom data, response value, response header, or response
body.
- type: object
properties:
name:
type: string
example: My validation step
title: ApiTestValidationName
description: Name of your validation step.
type:
type: string
example: extract_json
title: ApiTestExtractType
description: 'The type of document to extract. This should be one of the following:
extract_json
extract_html
extract_xml'
source:
type: string
example: '{''foo'': ''bar''}'
title: ApiTestSource
description: Source document to extract fields from.
extractor:
type: string
example: $$.foo
title: ApiTestExtractor
description: Extracting language. This must be in JSONPath, XMLPath, or HTMLPath
variable:
type: string
example: myVariable
title: ApiTestVariable
description: Variable to save your extraction.
title: ApiTestValidationExtract
description: 'Validation step to extract values from custom data, response body, response
header, or
existing variable'
- type: object
properties:
name:
type: string
example: First setup step
title: ApiTestSetupName
description: Name of your test setup step.
type:
type: string
example: javascript
description: Value must be javascript
code:
type: string
example: console.log('hello world')
variable:
type: string
example: myVariable
title: ApiTestVariable
description: Variable to save your extraction.
title: ApiTestJavascript
description: Instructions for custom Javascript code
- type: object
properties:
name:
type: string
example: First setup step
title: ApiTestSetupName
description: Name of your test setup step.
type:
type: string
example: save
description: Value must be save
value:
type: string
example: '{{response.body}}'
description: 'The value of the variable you are saving. If you are saving the
response body, the value of this field should be {{response.body}}.
Other valid options include:
{{custom.<myCustomVariable>}}
{{env.<myGlobalVariable>}}
{{response.code}}
{{response.first_byte_time}}
{{response.body_size}}
{{response.dns_time}}
{{response.response_time}}
{{headers.<headerName>}}'
variable:
type: string
example: myVariable
title: ApiTestVariable
description: Variable to save your extraction.
title: ApiTestSave
description: Save a custom field, response value, response header, or response body to a variable.
title: ApiTestRequests
customProperties:
type: array
items:
type: object
required:
- key
- value
properties:
key:
type: string
example: Env
value:
type: string
example: production
title: CustomProperties
description: An array of custom properties. The section Custom Properties Criteria lists the requirements
for custom property names and values.
title: TestRequestBody
description: 'The request body sent by the following method/endpoint operations:
POST /tests/api
PATCH /tests/api/{id}
PUT /tests/api/{id}
POST /tests/api/validate
POST /tests/api/{id}/validate
PUT /tests/api/{id}/validate'
examples:
example:
value:
test:
active: true
automaticRetries: 1
customProperties:
- key: Env
value: production
deviceId: 1
frequency: 5
locationIds:
- aws-us-east-1
name: My API test
requests:
- configuration:
body: '''{"alert_name":"the service is
down","url":"https://foo.com/bar"}''
'
certificateId: 1
headers:
Accept: application/json
x-foo: bar
httpVersion: '1.1'
name: Get products
requestMethod: GET
url: https://dummyjson.com/products
setup:
- extractor: $$.foo
name: First setup step
source: '{''foo'': ''bar''}'
type: extract_json
variable: myVariable
validations:
- actual: '{{response.code}}'
comparator: equals
expected: 200
name: My validation step
type: assert_numeric
schedulingStrategy: round_robin
responses:
'201':
description: HTTP 201 response
content:
application/json:
schema:
properties:
test:
title: TestApiResponse
properties:
id:
type: integer
format: int64
readOnly: true
example: 1
description: 'Timestamp of when the test was last updated, in UTC.
This field is read-only, and the system always sets the value.'
name:
type: string
example: My Test
description: Name of the test.
active:
type: boolean
example: true
description: Describes if the test is active.
automaticRetries:
type: integer
default: 0
example: 1
description: Automatically retry if the run fails
frequency:
type: integer
format: int32
example: 5
title: Frequency
description: How often to run your test.
schedulingStrategy:
type: string
example: round_robin
title: SchedulingStrategy
description: 'Type of scheduling strategy. This can only be:
round_robin
concurrent'
createdAt:
type: string
readOnly: true
example: '2022-09-14T14:35:37.801Z'
title: CreatedAt
description: 'Timestamp of when the test was last updated, in UTC.
This field is read-only, and the system always sets the value.'
createdBy:
type: string
readOnly: true
example: abcdefgh1234
title: CreatedBy
description: 'Member ID of who created the test.
This field is read-only, and the system always sets the value.'
updatedAt:
type: string
readOnly: true
example: '2022-09-14T14:35:38.099Z'
title: UpdatedAt
description: 'Timestamp of when the test was last updated, in UTC.
This field is read-only, and the system always sets the value.'
updatedBy:
type: string
readOnly: true
example: abcdefgh1234
title: UpdatedBy
description: 'Member ID of who last updated the test.
This field is read-only, and the system always sets the value.'
locationIds:
type: array
items:
type: string
example:
- aws-us-east-1
title: LocationIds
description: An array of location IDs where the test runs.
type:
type: string
example: api
customProperties:
type: array
items:
type: object
required:
- key
- value
properties:
key:
type: string
example: Env
value:
type: string
example: production
title: CustomProperties
description: An array of custom properties. The section Custom Properties Criteria lists the requirements
for custom property names and values.
lastRunStatus:
type: string
example: success
enum:
- pending
- success
- failed
title: LastRunStatus
description: Status of the last test run.
lastRunAt:
type: string
readOnly: true
example: '2022-09-14T14:36:45.156Z'
title: LastRunAt
description: 'Timestamp of when the test was last run, in UTC.
This field is read-only, and the system always sets the value.'
device:
type: object
title: Device
properties:
id:
type: integer
format: int64
example: 1
description: The unique ID of the device.
label:
type: string
example: iPhone
description: User facing label of the device.
viewportWidth:
type: integer
format: int32
example: 375
description: Viewport width of the device.
viewportHeight:
type: integer
format: int32
example: 844
description: Viewport height of the device.
networkConnection:
type: object
title: Network Connection
properties:
description:
type: string
example: Mobile LTE
nullable: true
description: Type of network connection.
uploadBandwidth:
type: integer
format: int32
example: 12000
nullable: true
description: Upload limit of the network connection, in Kbps.
downloadBandwidth:
type: integer
format: int32
example: 12000
nullable: true
description: Download limit of the network connection, in Kbps.
latency:
type: integer
format: int32
example: 70
nullable: true
description: Latency amount of the network connection, in milliseconds.
packetLoss:
type: number
format: double
nullable: true
description: Packet loss amount of the network connection.
requests:
type: array
items:
type: object
properties:
configuration:
type: object
properties:
name:
# --- truncated at 32 KB (177 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/splunk-observability/refs/heads/main/openapi/splunk-observability-synthetics-api-tests-openapi.yml