Currents · Schema
ContextResponse
CompanyTestingPlaywrightTest AutomationCI/CDTest OrchestrationDeveloper ToolsMCP
Properties
| Name | Type | Description |
|---|---|---|
| status | string | |
| data | object |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/currents-dev/json-schema/currents-dev-context-response-schema.json",
"title": "ContextResponse",
"x-generated": "2026-11-10",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/currents-dev-context-api-openapi.yml#/components/schemas/ContextResponse",
"type": "object",
"required": [
"status",
"data"
],
"properties": {
"status": {
"type": "string",
"enum": [
"OK"
]
},
"data": {
"oneOf": [
{
"$ref": "#/$defs/ContextTestData"
},
{
"$ref": "#/$defs/ContextInstanceData"
},
{
"$ref": "#/$defs/ContextRunData"
}
]
}
},
"$defs": {
"ContextAsset": {
"type": "object",
"description": "A link to a stored artifact (trace, screenshot, video, attachment, or instance stdout).",
"properties": {
"name": {
"type": "string"
},
"url": {
"type": "string",
"description": "Short link to the artifact. It redirects (302) to a signed, time-limited storage URL, so the client must follow redirects. The link lasts as long as the signature it replaced. Compression applies to the response it redirects to: the object may be stored gzipped, so decompress when the response carries `Content-Encoding: gzip` or the body starts with the gzip magic bytes `0x1f 0x8b`."
}
}
},
"ContextError": {
"type": [
"object",
"null"
],
"description": "Error details including message, stack, location, and code snippet",
"properties": {
"message": {
"type": [
"string",
"null"
]
},
"stack": {
"type": [
"string",
"null"
]
},
"location": {
"$ref": "#/$defs/ContextErrorLocation"
},
"snippet": {
"type": [
"string",
"null"
],
"description": "Code snippet around the error location"
}
}
},
"ContextErrorLocation": {
"type": [
"object",
"null"
],
"description": "Source code location of an error",
"properties": {
"file": {
"type": "string"
},
"line": {
"type": "integer"
},
"column": {
"type": "integer"
}
}
},
"ContextFailedTestBase": {
"type": "object",
"description": "Common properties for failed test summaries",
"properties": {
"testId": {
"type": "string"
},
"title": {
"type": "array",
"items": {
"type": "string"
},
"description": "Test title hierarchy"
},
"status": {
"type": "string"
},
"attempt": {
"type": "integer"
},
"duration": {
"type": "integer",
"description": "Duration in milliseconds"
},
"error": {
"$ref": "#/$defs/ContextError"
},
"errorContext": {
"allOf": [
{
"$ref": "#/$defs/ContextAsset"
}
],
"description": "Browser accessibility snapshot at time of failure"
},
"failureContext": {
"$ref": "#/$defs/ContextFailureContext"
},
"detailUrl": {
"type": "string",
"description": "Absolute URL for full test-level context"
}
}
},
"ContextFailureContext": {
"type": [
"object",
"null"
],
"description": "Context around the failed step",
"properties": {
"failedStepIndex": {
"type": "integer",
"description": "Index of the failed step in the flattened steps array (0-indexed)"
},
"stepBefore": {
"allOf": [
{
"$ref": "#/$defs/ContextStep"
}
],
"description": "The step that executed before the failure (null if failed step was first)"
},
"failedStep": {
"$ref": "#/$defs/ContextStep",
"description": "The step that failed"
},
"stepAfter": {
"allOf": [
{
"$ref": "#/$defs/ContextStep"
}
],
"description": "The step that would have executed after (null if failed step was last)"
}
}
},
"ContextFramework": {
"type": [
"object",
"null"
],
"description": "Test framework information",
"properties": {
"type": {
"type": "string",
"description": "Framework type (e.g., playwright, cypress)"
},
"version": {
"type": [
"string",
"null"
]
}
}
},
"ContextGit": {
"type": [
"object",
"null"
],
"required": [
"repository",
"branch",
"sha",
"pullRequest"
],
"description": "Where the failing code lives. Null when the run reported no git data. Values are checkout-able: the pull request head branch and commit rather than a refs/pull ref or a GitHub Actions merge commit.",
"properties": {
"repository": {
"type": [
"string",
"null"
],
"description": "owner/repo on GitHub-shaped hosts; the host's own repo path elsewhere"
},
"branch": {
"type": [
"string",
"null"
]
},
"sha": {
"type": [
"string",
"null"
]
},
"pullRequest": {
"type": [
"object",
"null"
],
"required": [
"number",
"url",
"baseBranch"
],
"properties": {
"number": {
"type": [
"string",
"null"
],
"description": "Null when only a link is known"
},
"url": {
"type": [
"string",
"null"
]
},
"baseBranch": {
"type": [
"string",
"null"
],
"description": "The branch the pull request merges into"
}
}
}
}
},
"ContextInstanceData": {
"type": "object",
"required": [
"level",
"spec",
"instanceStatus",
"instanceAssets",
"list",
"count",
"total",
"nextPage",
"meta",
"environment",
"git"
],
"properties": {
"level": {
"type": "string",
"enum": [
"instance"
]
},
"spec": {
"type": "string"
},
"instanceStatus": {
"type": "string",
"description": "Instance lifecycle status (FAILED, TIMED_OUT, CANCELLED, etc.)"
},
"instanceAssets": {
"type": "object",
"description": "Instance-level assets",
"properties": {
"stdout": {
"allOf": [
{
"$ref": "#/$defs/ContextAsset"
}
],
"description": "Instance-level console output. The `url` field is a `ContextAsset` link, and the object it redirects to is often uploaded with gzip compression enabled."
}
}
},
"list": {
"type": "array",
"description": "Failed tests on this page",
"items": {
"allOf": [
{
"$ref": "#/$defs/ContextFailedTestBase"
},
{
"type": "object",
"properties": {
"totalAttempts": {
"type": "integer"
}
}
}
]
}
},
"count": {
"type": "integer",
"description": "Number of items in `list` for this page"
},
"total": {
"type": "integer",
"description": "Total number of failed tests for the instance"
},
"nextPage": {
"oneOf": [
{
"type": "integer"
},
{
"type": "boolean",
"enum": [
false
]
}
],
"description": "Next page index (0-based), or false if no more pages"
},
"meta": {
"type": "object",
"properties": {
"projectId": {
"type": "string"
},
"runId": {
"type": "string"
},
"instanceId": {
"type": "string"
}
}
},
"environment": {
"type": "object",
"properties": {
"framework": {
"$ref": "#/$defs/ContextFramework"
},
"platform": {
"$ref": "#/$defs/ContextPlatform"
},
"project": {
"type": [
"string",
"null"
]
}
}
},
"git": {
"$ref": "#/$defs/ContextGit"
}
}
},
"ContextPlatform": {
"type": [
"object",
"null"
],
"description": "Platform/browser information",
"properties": {
"osName": {
"type": "string"
},
"osVersion": {
"type": "string"
},
"browserName": {
"type": "string"
},
"browserVersion": {
"type": "string"
}
}
},
"ContextRunData": {
"type": "object",
"required": [
"level",
"runId",
"instances",
"list",
"count",
"total",
"nextPage",
"meta",
"environment",
"git"
],
"properties": {
"level": {
"type": "string",
"enum": [
"run"
]
},
"runId": {
"type": "string"
},
"runStatus": {
"type": "string"
},
"instances": {
"type": "array",
"description": "All non-passed instances in the run",
"items": {
"type": "object",
"properties": {
"instanceId": {
"type": "string"
},
"spec": {
"type": "string"
},
"status": {
"type": "string"
},
"durationMs": {
"type": [
"integer",
"null"
]
},
"groupId": {
"type": [
"string",
"null"
]
}
}
}
},
"list": {
"type": "array",
"description": "Paginated unique failing tests (deduplicated by signature + error). With `include_flaky=true`, flaky tests follow the failed ones with `status: \"flaky\"` and the error from their last failed attempt; `page`/`limit` and `nextPage` then index through this combined failed+flaky ordering, whose overall size is `total + totalFlakyTests`.",
"items": {
"allOf": [
{
"$ref": "#/$defs/ContextFailedTestBase"
},
{
"type": "object",
"properties": {
"instanceId": {
"type": "string"
},
"signature": {
"type": "string",
"description": "Identifies the test across runs and groups"
},
"spec": {
"type": "string"
},
"groupId": {
"type": [
"string",
"null"
]
},
"lastSteps": {
"type": "array",
"description": "The last five step list rows before Playwright's After Hooks, or the last five rows when there is none. Present only with `detail=compact`, when no step recorded an error, as when the test body times out in a sleep or throws outside a step.",
"items": {
"type": "object",
"required": [
"number",
"indent",
"title",
"duration",
"repeats"
],
"properties": {
"number": {
"type": "integer",
"description": "1-based, in preorder over the attempt's step tree"
},
"indent": {
"type": "integer",
"description": "Nesting depth, 0 for a top-level step"
},
"title": {
"type": "string"
},
"lastTitle": {
"type": "string",
"description": "Title of the last folded step, when the folded titles differ"
},
"category": {
"type": "string"
},
"duration": {
"type": "integer",
"description": "Duration in milliseconds, summed over the folded steps. -1 for a step that never finished, which keeps a row of its own."
},
"repeats": {
"type": "integer",
"description": "Steps the row stands for, 1 when nothing was folded"
}
}
}
},
"steps": {
"type": "array",
"description": "The attempt's steps. Empty unless `detail=default`.",
"items": {
"$ref": "#/$defs/ContextStep"
}
},
"assets": {
"type": "object",
"description": "Signed asset links for the attempt. Present only with `detail=default`.",
"properties": {
"traces": {
"type": "array",
"items": {
"$ref": "#/$defs/ContextAsset"
}
},
"screenshots": {
"type": "array",
"items": {
"$ref": "#/$defs/ContextAsset"
}
},
"videos": {
"type": "array",
"items": {
"$ref": "#/$defs/ContextAsset"
}
},
"attachments": {
"type": "array",
"items": {
"type": "object",
"description": "Attachment with additional metadata",
"properties": {
"name": {
"type": "string"
},
"filename": {
"type": "string"
},
"contentType": {
"type": "string"
},
"url": {
"type": "string",
"description": "Short link to the artifact. It redirects (302) to a signed, time-limited storage URL, so the client must follow redirects. The link lasts as long as the signature it replaced. Compression applies to the response it redirects to: the object may be stored gzipped, so decompress when the response carries `Content-Encoding: gzip` or the body starts with the gzip magic bytes `0x1f 0x8b`."
}
}
}
}
}
},
"alsoFailedIn": {
"type": "array",
"description": "Other tests with the same error (cross-group deduplication)",
"items": {
"type": "object",
"properties": {
"testId": {
"type": "string"
},
"instanceId": {
"type": "string"
},
"groupId": {
"type": "string"
},
"title": {
"type": "array",
"items": {
"type": "string"
},
"description": "Test title for context"
}
}
}
}
}
}
]
}
},
"count": {
"type": "integer",
"description": "Number of items in `list` for this page"
},
"total": {
"type": "integer",
"description": "Unique failing tests after deduplication (may be subset on large runs). Excludes flaky tests: with `include_flaky=true` the combined list size is `total + totalFlakyTests`."
},
"totalFlakyTests": {
"type": "integer",
"description": "Unique flaky tests after deduplication; only present with `include_flaky=true`. Add to `total` for the size of the combined paginated list."
},
"nextPage": {
"oneOf": [
{
"type": "integer"
},
{
"type": "boolean",
"enum": [
false
]
}
],
"description": "Next page index (0-based), or false if no more pages. With `include_flaky=true` pages run over the combined failed+flaky ordering (`total + totalFlakyTests` entries), so flaky-only pages follow the failed ones."
},
"meta": {
"type": "object",
"properties": {
"projectId": {
"type": "string"
},
"runId": {
"type": "string"
}
}
},
"environment": {
"type": "object",
"properties": {
"framework": {
"$ref": "#/$defs/ContextFramework"
}
}
},
"git": {
"$ref": "#/$defs/ContextGit"
}
}
},
"ContextStep": {
"type": "object",
"description": "A test execution step (recursive structure)",
"properties": {
"title": {
"type": "string",
"description": "Step title/description"
},
"category": {
"type": "string",
"description": "Step category (e.g., pw:api)"
},
"duration": {
"type": "integer",
"description": "Duration in milliseconds"
},
"error": {
"$ref": "#/$defs/ContextError"
},
"steps": {
"type": "array",
"description": "Nested child steps",
"items": {
"$ref": "#/$defs/ContextStep"
}
}
}
},
"ContextTestData": {
"type": "object",
"required": [
"level",
"spec",
"test",
"error",
"meta",
"environment",
"git"
],
"properties": {
"level": {
"type": "string",
"enum": [
"test"
]
},
"spec": {
"type": "string",
"description": "Spec file path"
},
"test": {
"type": "object",
"properties": {
"title": {
"type": "array",
"items": {
"type": "string"
},
"description": "Test title hierarchy"
},
"status": {
"type": "string"
},
"attempt": {
"type": "integer"
},
"totalAttempts": {
"type": "integer"
},
"duration": {
"type": "integer",
"description": "Duration in milliseconds"
}
}
},
"error": {
"$ref": "#/$defs/ContextError"
},
"otherAttempts": {
"type": "array",
"description": "Summary of other attempts for cross-attempt comparison",
"items": {
"type": "object",
"properties": {
"attempt": {
"type": "integer"
},
"status": {
"type": "string"
},
"sameError": {
"type": "boolean",
"description": "Whether this attempt had the same error as the displayed attempt"
},
"error": {
"type": [
"object",
"null"
],
"description": "Simplified error summary (no stack/snippet)",
"properties": {
"message": {
"type": [
"string",
"null"
]
},
"location": {
"$ref": "#/$defs/ContextErrorLocation"
}
}
}
}
}
},
"errorContext": {
"allOf": [
{
"$ref": "#/$defs/ContextAsset"
}
],
"description": "Browser accessibility snapshot at time of failure, as a link that redirects to storage"
},
"traceErrorAnalysis": {
"type": [
"object",
"null"
],
"description": "Console entries and network requests from the error timeframe",
"properties": {
"consoleEntries": {
"type": "array",
"items": {
"type": "object",
"properties": {
"time": {
"type": "number"
},
"messageType": {
"type": "string"
},
"text": {
"type": "string"
},
"location": {
"type": [
"object",
"null"
],
"properties": {
"url": {
"type": "string"
},
"lineNumber": {
"type": "integer"
},
"columnNumber": {
"type": "integer"
}
}
}
}
}
},
"networkRequests": {
"type": "array",
"items": {
"type": "object",
"properties": {
"time": {
"type": "number"
},
"url": {
"type": "string"
},
"status": {
"type": "integer"
},
"method": {
"type": "string"
}
}
}
}
}
},
"failureContext": {
"$ref": "#/$defs/ContextFailureContext"
},
"steps": {
"type": "array",
"description": "Test execution steps (omitted when detail=summary)",
"items": {
"$ref": "#/$defs/ContextStep"
}
},
"stdout": {
"type": "array",
"items": {
"type": "string"
},
"description": "Standard output lines from the test"
},
"stderr": {
"type": "array",
"items": {
"type": "string"
},
"description": "Standard error lines from the test"
},
"assets": {
"type": "object",
"description": "Links to traces, screenshots, videos, and attachments. Each redirects to a signed storage URL.",
"properties": {
"traces": {
"type": "array",
"items": {
"$ref": "#/$defs/ContextAsset"
}
},
"screenshots": {
"type": "array",
"items": {
"$ref": "#/$defs/ContextAsset"
}
},
"videos": {
"type": "array",
"items": {
"$ref": "#/$defs/ContextAsset"
}
},
"attachments": {
"type": "array",
"items": {
"type": "object",
"description": "Attachment with additional metadata",
"properties": {
"name": {
"type": "string"
},
"filename": {
"type": "string"
},
"contentType": {
"type": "string"
},
"url": {
"type": "string",
"description": "Short link to the artifact. It redirects (302) to a signed, time-limited storage URL, so the client must follow redirects. The link lasts as long as the signature it replaced. Compression applies to the response it redirects to: the object may be stored gzipped, so decompress when the response carries `Content-Encoding: gzip` or the body starts with the gzip magic bytes `0x1f 0x8b`."
}
}
}
},
"totals": {
"type": [
"object",
"null"
],
"description": "Total counts for each asset category. Only present when assets are limited (detail=compact or detail=summary)",
"properties": {
"traces": {
"type": "integer",
"description": "Total number of traces before limiting"
},
"screenshots": {
"type": "integer",
"description": "Total number of screenshots before limiting"
},
"videos": {
"type": "integer",
"description": "Total number of videos before limiting"
},
"attachments": {
"type": "integer",
"description": "Total number of attachments before limiting"
}
}
}
}
},
"meta": {
"type": "object",
"properties": {
"projectId": {
"type": "string"
},
"runId": {
"type": "string"
},
"instanceId": {
"type": "string"
},
"testId": {
"type": "string"
},
"signature": {
"type": "string"
},
"attempt": {
"type": "integer"
}
}
},
"environment": {
"type": "object",
"properties": {
"framework": {
"$ref": "#/$defs/ContextFramework"
},
"platform": {
"$ref": "#/$defs/ContextPlatform"
},
"project": {
"type": [
"string",
"null"
]
}
}
},
"git": {
"$ref": "#/$defs/ContextGit"
}
}
}
}
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/currents-dev-context-response"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.