Thunder Client · Schema

Thunder Client Collection

JSON Schema for a Thunder Client collection file containing API requests, folders, and metadata

API ClientAPI TestingCI/CDCLICollectionsGraphQLREST ClientVS Code

Properties

Name Type Description
version string Thunder Client collection format version
name string Collection name
description string Collection description
dateExported string ISO 8601 timestamp when the collection was exported
client string Client identifier
requests array Array of request definitions in the collection
folders array Array of folder definitions for organizing requests
View JSON Schema on GitHub

JSON Schema

thunder-client-collection-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://www.thunderclient.com/schema/collection",
  "title": "Thunder Client Collection",
  "description": "JSON Schema for a Thunder Client collection file containing API requests, folders, and metadata",
  "type": "object",
  "required": ["version", "name", "requests"],
  "properties": {
    "version": {
      "type": "string",
      "description": "Thunder Client collection format version",
      "examples": ["1.2"]
    },
    "name": {
      "type": "string",
      "description": "Collection name"
    },
    "description": {
      "type": "string",
      "description": "Collection description"
    },
    "dateExported": {
      "type": "string",
      "format": "date-time",
      "description": "ISO 8601 timestamp when the collection was exported"
    },
    "client": {
      "type": "string",
      "description": "Client identifier",
      "const": "Thunder Client"
    },
    "requests": {
      "type": "array",
      "description": "Array of request definitions in the collection",
      "items": { "$ref": "#/$defs/ThunderRequest" }
    },
    "folders": {
      "type": "array",
      "description": "Array of folder definitions for organizing requests",
      "items": { "$ref": "#/$defs/ThunderFolder" }
    }
  },
  "$defs": {
    "ThunderRequest": {
      "type": "object",
      "required": ["_id", "colId", "name", "url", "method"],
      "properties": {
        "_id": {
          "type": "string",
          "description": "Unique request identifier (UUID)"
        },
        "colId": {
          "type": "string",
          "description": "Collection ID this request belongs to"
        },
        "containerId": {
          "type": "string",
          "description": "Folder ID this request belongs to (if in a folder)"
        },
        "name": {
          "type": "string",
          "description": "Request name"
        },
        "url": {
          "type": "string",
          "description": "Request URL; may contain environment variable references like {{baseUrl}}"
        },
        "method": {
          "type": "string",
          "enum": ["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS", "HEAD"],
          "description": "HTTP method"
        },
        "sortNum": {
          "type": "number",
          "description": "Sort order within the collection or folder"
        },
        "created": {
          "type": "string",
          "format": "date-time"
        },
        "modified": {
          "type": "string",
          "format": "date-time"
        },
        "headers": {
          "type": "array",
          "description": "Request headers",
          "items": { "$ref": "#/$defs/KeyValueItem" }
        },
        "params": {
          "type": "array",
          "description": "Query string parameters",
          "items": { "$ref": "#/$defs/KeyValueItem" }
        },
        "body": {
          "$ref": "#/$defs/RequestBody"
        },
        "auth": {
          "$ref": "#/$defs/RequestAuth"
        },
        "tests": {
          "type": "array",
          "description": "Scriptless test assertions for this request",
          "items": { "$ref": "#/$defs/TestAssertion" }
        },
        "preScripts": {
          "type": "array",
          "description": "Pre-request scripts (JavaScript)",
          "items": { "type": "string" }
        },
        "postScripts": {
          "type": "array",
          "description": "Post-request scripts (JavaScript)",
          "items": { "type": "string" }
        },
        "settings": {
          "type": "object",
          "description": "Per-request settings",
          "properties": {
            "followRedirects": { "type": "boolean" },
            "timeout": { "type": "integer" },
            "verifyCertificate": { "type": "boolean" }
          }
        }
      }
    },
    "ThunderFolder": {
      "type": "object",
      "required": ["_id", "name", "colId"],
      "properties": {
        "_id": {
          "type": "string",
          "description": "Unique folder identifier (UUID)"
        },
        "name": {
          "type": "string",
          "description": "Folder name"
        },
        "colId": {
          "type": "string",
          "description": "Collection ID this folder belongs to"
        },
        "containerId": {
          "type": "string",
          "description": "Parent folder ID for nested folders"
        },
        "sortNum": {
          "type": "number"
        }
      }
    },
    "KeyValueItem": {
      "type": "object",
      "required": ["name", "value"],
      "properties": {
        "name": {
          "type": "string",
          "description": "Header or parameter name"
        },
        "value": {
          "type": "string",
          "description": "Header or parameter value; may contain {{variable}} references"
        },
        "isDisabled": {
          "type": "boolean",
          "default": false
        }
      }
    },
    "RequestBody": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": ["json", "text", "xml", "formdata", "formencoded", "graphql", "binary", "none"],
          "description": "Body content type"
        },
        "raw": {
          "type": "string",
          "description": "Raw body content (for json, text, xml types)"
        },
        "form": {
          "type": "array",
          "description": "Form fields (for formdata and formencoded types)",
          "items": { "$ref": "#/$defs/KeyValueItem" }
        },
        "graphql": {
          "type": "object",
          "properties": {
            "query": { "type": "string" },
            "variables": { "type": "string" }
          }
        }
      }
    },
    "RequestAuth": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": ["none", "basic", "bearer", "oauth2", "apikey", "digest", "awsv4", "ntlm"],
          "description": "Authentication type"
        },
        "username": { "type": "string" },
        "password": { "type": "string" },
        "token": { "type": "string" },
        "key": { "type": "string" },
        "value": { "type": "string" },
        "placement": {
          "type": "string",
          "enum": ["header", "query"],
          "description": "Where to place the API key"
        }
      }
    },
    "TestAssertion": {
      "type": "object",
      "required": ["type", "custom", "action", "value"],
      "properties": {
        "type": {
          "type": "string",
          "enum": ["status", "json", "header", "text", "ms", "size"],
          "description": "Assertion target type"
        },
        "custom": {
          "type": "string",
          "description": "Field path or header name to check (e.g., 'json.id', 'header.content-type')"
        },
        "action": {
          "type": "string",
          "enum": ["equals", "notequals", "isNull", "notNull", "contains", "notContains", "startsWith", "endsWith", "isType", "lt", "gt", "lte", "gte"],
          "description": "Comparison operator"
        },
        "value": {
          "description": "Expected value for comparison"
        }
      }
    }
  }
}