Properties
| Name | Type | Description |
|---|---|---|
| app_id | object | |
| app_link | object | |
| app_package | object | |
| backend_url | object | |
| branch_id | object | |
| build_selection | object | |
| device_local | object | |
| expected_version | object | Expected version for optimistic locking. If provided and doesn't match current version, update will fail with 409 Conflict. |
| flowdescription | object | |
| get_downloads | object | |
| id | object | |
| last_duration | object | Duration of the most recent execution in seconds |
| last_execution_id | object | Execution ID of the most recent execution for deep-linking to report (was last_task_id) |
| last_execution_time | object | ISO timestamp of the most recent execution completion |
| last_modified_by | object | UUID of the user who last modified this test. |
| last_status | object | Status of the most recent execution (success, failure, timeout, cancelled, running, queued, setup, verifying, or None) |
| link | object | |
| llm_model_name | object | |
| mobile_targets | object | Saved device model + runtime targets for this test |
| name | object | |
| orientation | object | Device orientation from test_mobile_details ('portrait' or 'landscape') |
| owner | object | |
| package_name | object | |
| pinned_build_id | object | |
| pinned_version | object | |
| platform | string | |
| resolved_build | object | |
| retries | object | |
| run_config | object | |
| run_id | object | |
| tags | object | Tags associated with this test for categorization and filtering |
| tasks | object | |
| test_timeout_seconds | object | Per-test execution timeout in seconds. Null disables the override. |
| test_version_id | object | Revision record matching the loaded version and tasks, if one exists. |
| user_id | object | |
| version | object | Current version number for optimistic locking. Increments on each save. |
| viewport | object |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://raw.githubusercontent.com/api-evangelist/revyl/main/json-schema/revyl-test-schema.json",
"title": "Test",
"x-generated": "2026-10-19",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/revyl-openapi.json#/components/schemas/Test",
"additionalProperties": true,
"properties": {
"app_id": {
"anyOf": [
{
"format": "uuid",
"type": "string"
},
{
"type": "null"
}
],
"title": "App Id"
},
"app_link": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "App Link"
},
"app_package": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "App Package"
},
"backend_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Backend Url"
},
"branch_id": {
"anyOf": [
{
"format": "uuid",
"type": "string"
},
{
"type": "null"
}
],
"title": "Branch Id"
},
"build_selection": {
"$ref": "#/$defs/BuildSelectionMode",
"default": "inherit"
},
"device_local": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": false,
"title": "Device Local"
},
"expected_version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"description": "Expected version for optimistic locking. If provided and doesn't match current version, update will fail with 409 Conflict.",
"title": "Expected Version"
},
"flowdescription": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": "",
"title": "Flowdescription"
},
"get_downloads": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": false,
"title": "Get Downloads"
},
"id": {
"anyOf": [
{
"format": "uuid",
"type": "string"
},
{
"type": "null"
}
],
"title": "Id"
},
"last_duration": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Duration of the most recent execution in seconds",
"title": "Last Duration"
},
"last_execution_id": {
"anyOf": [
{
"format": "uuid",
"type": "string"
},
{
"type": "null"
}
],
"description": "Execution ID of the most recent execution for deep-linking to report (was last_task_id)",
"title": "Last Execution Id"
},
"last_execution_time": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "ISO timestamp of the most recent execution completion",
"title": "Last Execution Time"
},
"last_modified_by": {
"anyOf": [
{
"format": "uuid",
"type": "string"
},
{
"type": "null"
}
],
"description": "UUID of the user who last modified this test.",
"title": "Last Modified By"
},
"last_status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Status of the most recent execution (success, failure, timeout, cancelled, running, queued, setup, verifying, or None)",
"title": "Last Status"
},
"link": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": "",
"title": "Link"
},
"llm_model_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Llm Model Name"
},
"mobile_targets": {
"anyOf": [
{
"items": {
"$ref": "#/$defs/MobileTarget"
},
"type": "array"
},
{
"type": "null"
}
],
"description": "Saved device model + runtime targets for this test",
"title": "Mobile Targets"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Name"
},
"orientation": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Device orientation from test_mobile_details ('portrait' or 'landscape')",
"title": "Orientation"
},
"owner": {
"anyOf": [
{
"format": "uuid",
"type": "string"
},
{
"type": "null"
}
],
"title": "Owner"
},
"package_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Package Name"
},
"pinned_build_id": {
"anyOf": [
{
"format": "uuid",
"type": "string"
},
{
"type": "null"
}
],
"title": "Pinned Build Id"
},
"pinned_version": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Pinned Version"
},
"platform": {
"default": "Android",
"title": "Platform",
"type": "string"
},
"resolved_build": {
"anyOf": [
{
"$ref": "#/$defs/ResolvedBuild"
},
{
"type": "null"
}
]
},
"retries": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": 1,
"title": "Retries"
},
"run_config": {
"anyOf": [
{
"$ref": "#/$defs/TestRunConfig"
},
{
"type": "null"
}
]
},
"run_id": {
"anyOf": [
{
"format": "uuid",
"type": "string"
},
{
"type": "null"
}
],
"title": "Run Id"
},
"tags": {
"anyOf": [
{
"items": {
"$ref": "#/$defs/Tag"
},
"type": "array"
},
{
"type": "null"
}
],
"description": "Tags associated with this test for categorization and filtering",
"title": "Tags"
},
"tasks": {
"anyOf": [
{
"items": {
"anyOf": [
{
"$ref": "#/$defs/ActionBlock"
},
{
"$ref": "#/$defs/IfBlock"
},
{
"$ref": "#/$defs/WhileBlock"
}
]
},
"type": "array"
},
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"items": {
"$ref": "#/$defs/TaskMetadata"
},
"type": "array"
}
],
"default": [],
"title": "Tasks"
},
"test_timeout_seconds": {
"anyOf": [
{
"minimum": 0.0,
"type": "integer"
},
{
"type": "null"
}
],
"description": "Per-test execution timeout in seconds. Null disables the override.",
"title": "Test Timeout Seconds"
},
"test_version_id": {
"anyOf": [
{
"format": "uuid",
"type": "string"
},
{
"type": "null"
}
],
"description": "Revision record matching the loaded version and tasks, if one exists.",
"title": "Test Version Id"
},
"user_id": {
"anyOf": [
{
"format": "uuid",
"type": "string"
},
{
"type": "null"
}
],
"title": "User Id"
},
"version": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"description": "Current version number for optimistic locking. Increments on each save.",
"title": "Version"
},
"viewport": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"title": "Viewport"
}
},
"type": "object",
"$defs": {
"ActionBlock": {
"description": "Block for actions (instructions, extraction, manual, validation, code_execution, module_import).",
"properties": {
"file": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Canonical org file name for download_file / play_audio blocks in authored YAML/product payloads",
"title": "File"
},
"file_uri": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Resolved revyl-file:// URI for download_file / play_audio blocks",
"title": "File Uri"
},
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Unique identifier for the block (auto-generated if not provided)",
"title": "Id"
},
"module": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Canonical module name for module_import blocks in authored YAML/product payloads",
"title": "Module"
},
"module_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "ID of the module to import (for module_import blocks)",
"title": "Module Id"
},
"script": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Canonical script name for code_execution blocks in authored YAML/product payloads",
"title": "Script"
},
"script_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Resolved script UUID for code_execution blocks",
"title": "Script Id"
},
"step_description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Authored step text or legacy payload. Optional for canonical reference blocks such as code_execution.script, module_import.module, download_file.file, and no-parameter manual steps.",
"title": "Step Description"
},
"step_type": {
"anyOf": [
{
"type": "string"
},
{
"$ref": "#/$defs/StepType"
},
{
"type": "null"
}
],
"description": "Type of step action (inferred when omitted)",
"title": "Step Type"
},
"type": {
"description": "Must be one of: instructions, extraction, manual, validation, code_execution, module_import",
"enum": [
"instructions",
"extraction",
"manual",
"validation",
"code_execution",
"module_import"
],
"title": "Type",
"type": "string"
},
"variable_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Name of the variable captured by extraction blocks",
"title": "Variable Name"
},
"variable_scope": {
"anyOf": [
{
"enum": [
"test",
"global"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "Scope of the variable assigned by extraction or code-execution blocks. 'test' (or omitted) writes to the test-scoped variables table; 'global' writes to a pre-existing, non-secret org-level global variable.",
"title": "Variable Scope"
}
},
"required": [
"type"
],
"title": "ActionBlock",
"type": "object"
},
"BuildSelectionMode": {
"enum": [
"inherit",
"latest",
"pinned",
"latest_all_branches"
],
"title": "BuildSelectionMode",
"type": "string"
},
"CacheRetryMode": {
"description": "Cache retry policy for test execution.\n\n- NONE: No cache fallback, fail if cached steps fail\n- FULL_RERUN: If cached run fails, rerun entire test without cache",
"enum": [
"none",
"full_rerun"
],
"title": "CacheRetryMode",
"type": "string"
},
"CleanupLevel": {
"description": "Cleanup intensity level for AVD state reset between test runs.",
"enum": [
"none",
"thorough",
"deep_clean"
],
"title": "CleanupLevel",
"type": "string"
},
"DOMMetadata": {
"additionalProperties": true,
"properties": {
"a11y_data": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"title": "A11Y Data"
},
"code_input": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Code Input"
},
"file_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "File Url"
},
"input_selector": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Input Selector"
},
"selector": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Selector"
},
"validation_text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Validation Text"
},
"validation_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Validation Type"
},
"variable_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Variable Name"
},
"wait_time": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Wait Time"
}
},
"title": "DOMMetadata",
"type": "object"
},
"DeviceCleanupConfig": {
"description": "Configuration for AVD cleanup between test runs.\n\nControls what gets reset when resetting device state between tests\nwhile keeping the emulator running.",
"properties": {
"cleanup_level": {
"$ref": "#/$defs/CleanupLevel",
"default": "thorough",
"description": "Level of cleanup to perform (default: THOROUGH for maximum cleanup)"
},
"clear_app_data": {
"default": true,
"description": "Clear app data and cache via pm clear",
"title": "Clear App Data",
"type": "boolean"
},
"clear_browser_data": {
"default": true,
"description": "Clear browsing data (history, cookies, cache) from all browsers",
"title": "Clear Browser Data",
"type": "boolean"
},
"clear_clipboard": {
"default": true,
"description": "Clear clipboard contents",
"title": "Clear Clipboard",
"type": "boolean"
},
"clear_downloads": {
"default": true,
"description": "Clear /sdcard/Download folder",
"title": "Clear Downloads",
"type": "boolean"
},
"clear_notifications": {
"default": true,
"description": "Clear all pending notifications from previous test sessions",
"title": "Clear Notifications",
"type": "boolean"
},
"clear_recent_apps": {
"default": false,
"description": "Clear recent apps list (requires root access, restarts framework). Expensive (~15-30s), broken on Play Store images. Auto-enabled for DEEP_CLEAN.",
"title": "Clear Recent Apps",
"type": "boolean"
},
"clear_shared_storage": {
"default": true,
"description": "Clear Pictures, DCIM, Movies, Music, Documents folders",
"title": "Clear Shared Storage",
"type": "boolean"
},
"custom_paths_to_clear": {
"description": "Additional paths to clear on device",
"items": {
"type": "string"
},
"title": "Custom Paths To Clear",
"type": "array"
},
"kill_background_apps": {
"default": true,
"description": "Kill all background applications",
"title": "Kill Background Apps",
"type": "boolean"
},
"reset_system_ui": {
"default": false,
"description": "Reset SystemUI state including wallpaper to defaults. Expensive (~2-3s). Auto-enabled for DEEP_CLEAN.",
"title": "Reset System Ui",
"type": "boolean"
},
"revoke_permissions": {
"default": true,
"description": "Revoke runtime permissions granted during test",
"title": "Revoke Permissions",
"type": "boolean"
},
"uninstall_new_apps": {
"default": true,
"description": "Uninstall apps that were installed during the test session",
"title": "Uninstall New Apps",
"type": "boolean"
}
},
"title": "DeviceCleanupConfig",
"type": "object"
},
"ExecutionModeConfig": {
"description": "Configuration for execution modes and features.",
"properties": {
"cleanup_config": {
"anyOf": [
{
"$ref": "#/$defs/DeviceCleanupConfig"
},
{
"type": "null"
}
],
"description": "Configuration for AVD cleanup between test runs"
},
"enable_planning": {
"default": false,
"description": "Enable planning for complex steps",
"title": "Enable Planning",
"type": "boolean"
},
"enable_reflection": {
"default": true,
"description": "Enable reflection on failed steps",
"title": "Enable Reflection",
"type": "boolean"
},
"grounder_type": {
"anyOf": [
{
"$ref": "#/$defs/GrounderType"
},
{
"type": "null"
}
],
"default": "moondream3"
},
"initial_locale": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Initial device locale identifier, for example 'en_US' or 'fr_FR'",
"title": "Initial Locale"
},
"initial_location": {
"anyOf": [
{
"$ref": "#/$defs/LocationConfig"
},
{
"type": "null"
}
],
"description": "Initial GPS location to set when simulator boots"
},
"initial_orientation": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Initial device orientation: 'portrait' or 'landscape'",
"title": "Initial Orientation"
},
"network_capture": {
"default": true,
"description": "Attach an in-process TLS-capture agent to the (debuggable) app under test to record decrypted HTTP traffic. On by default (no-op/graceful on non-debuggable apps or attach failure); set False to disable as a per-run kill switch.",
"title": "Network Capture",
"type": "boolean"
},
"reflection_retries": {
"default": 1,
"description": "Number of reflection retry attempts",
"title": "Reflection Retries",
"type": "integer"
},
"retries": {
"default": 1,
"description": "Number of retry attempts",
"title": "Retries",
"type": "integer"
},
"skip_app_install": {
"default": false,
"description": "Skip app installation during test execution",
"title": "Skip App Install",
"type": "boolean"
}
},
"title": "ExecutionModeConfig",
"type": "object"
},
"FallbackTrigger": {
"description": "When to trigger cache fallback.\n\n- FINAL_FAIL: Only trigger fallback if overall test fails",
"enum": [
"final_fail"
],
"title": "FallbackTrigger",
"type": "string"
},
"GrounderType": {
"description": "Grounder configuration that determines the grounding model.\n\n- MOONDREAM/MOONDREAM3/MOONDREAM_CUSTOM/MODAL_CUSTOM: Two-step grounding\n- AUTO: Use GROUNDER_TYPE env var to determine grounder\n- NULL: Skip grounding (for testing/debugging)",
"enum": [
"moondream",
"moondream3",
"moondream_custom",
"modal-custom",
"auto",
"null"
],
"title": "GrounderType",
"type": "string"
},
"IfBlock": {
"description": "Block for conditional logic.",
"properties": {
"condition": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Condition to evaluate (alternative to 'step_description')",
"title": "Condition"
},
"elseChildren": {
"description": "Blocks to execute if condition is false",
"items": {
"anyOf": [
{
"$ref": "#/$defs/ActionBlock"
},
{
"$ref": "#/$defs/IfBlock"
},
{
"$ref": "#/$defs/WhileBlock"
}
]
},
"title": "Elsechildren",
"type": "array"
},
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Unique identifier for the block (auto-generated if not provided)",
"title": "Id"
},
"step_description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Condition to evaluate (alternative to 'condition')",
"title": "Step Description"
},
"thenChildren": {
"description": "Blocks to execute if condition is true",
"items": {
"anyOf": [
{
"$ref": "#/$defs/ActionBlock"
},
{
"$ref": "#/$defs/IfBlock"
},
{
"$ref": "#/$defs/WhileBlock"
}
]
},
"title": "Thenchildren",
"type": "array"
},
"type": {
"const": "if",
"title": "Type",
"type": "string"
}
},
"required": [
"type"
],
"title": "IfBlock",
"type": "object"
},
"LLMConfig": {
"description": "Configuration for LLM models used in different stages.",
"properties": {
"planning_model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "LLM model for planning, defaults to primary_model if not set",
"title": "Planning Model"
},
"primary_model": {
"default": "gemini/gemini-3.8-flash",
"description": "Primary LLM model for step execution",
"title": "Primary Model",
"type": "string"
},
"reflection_model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "LLM model for reflection, defaults to primary_model if not set",
"title": "Reflection Model"
}
},
"title": "LLMConfig",
"type": "object"
},
"LocationConfig": {
"description": "GPS location configuration for simulator/emulator.",
"properties": {
"latitude": {
"description": "GPS latitude coordinate (-90 to 90)",
"maximum": 90.0,
"minimum": -90.0,
"title": "Latitude",
"type": "number"
},
"longitude": {
"description": "GPS longitude coordinate (-180 to 180)",
"maximum": 180.0,
"minimum": -180.0,
"title": "Longitude",
"type": "number"
}
},
"required": [
"latitude",
"longitude"
],
"title": "LocationConfig",
"type": "object"
},
"MobileTarget": {
"description": "Persisted device target for a test (from ``test_mobile_targets``).\n\n``AUTO/AUTO`` represents \"follow the platform default at runtime\".",
"properties": {
"device_model": {
"title": "Device Model",
"type": "string"
},
"os_version": {
"title": "Os Version",
"type": "string"
}
},
"required": [
"device_model",
"os_version"
],
"title": "MobileTarget",
"type": "object"
},
"ResolvedBuild": {
"description": "Normalized representation of a resolved build artifact.",
"properties": {
"artifact_kind": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Artifact Kind"
},
"artifact_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Artifact Url"
},
"branch_id": {
"anyOf": [
{
"format": "uuid",
"type": "string"
},
{
"type": "null"
}
],
"title": "Branch Id"
},
"branch_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Branch Name"
},
"build_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Build Name"
},
"build_var_id": {
"format": "uuid",
"title": "Build Var Id",
"type": "string"
},
"deploy_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Deploy Url"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Description"
},
"download_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Download Url"
},
"metadata": {
"additionalProperties": true,
"title": "Metadata",
"type": "object"
},
"package_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Package Name"
},
"platform": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Platform"
},
"static_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Static Url"
},
"system_prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "System Prompt"
},
"uploaded_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
],
"title": "Uploaded At"
},
"version": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Version"
},
"version_id": {
"anyOf": [
{
"format": "uuid",
"type": "string"
},
{
"type": "null"
}
],
"title": "Version Id"
}
},
"required": [
"build_var_id"
],
"title": "ResolvedBuild",
"type": "object"
},
"StepType": {
"description": "User-facing step types for YAML test definitions.\n\nThese are the high-level step types that users write in their tests.\nThey map to TASK_TYPES for routing and ActionType for execution.",
"enum": [
"instruction",
"validation",
"extract",
"scrape",
"decision",
"loop",
"explore_continue",
"end",
"wait",
"navigate",
"back",
"open_app",
"kill_app",
"go_home",
"code_execution",
"download_file",
"set_location",
"set_orientation",
"set_appearance",
"play_audio",
"set_font_size",
"module_import",
"tap",
"click",
"double_tap",
"input",
"swipe",
"drag",
"pinch",
"clear_text",
"long_press",
"select"
],
"title": "StepType",
# --- truncated at 32 KB (39 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/revyl/refs/heads/main/json-schema/revyl-test-schema.json
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/revyl-test"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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.