Test First · JSON Structure

Test First Contract Structure

A consumer-driven API contract expressing what the consumer expects the API to provide, written before the provider implements it.

Type: object Properties: 6 Required: 4
Behavior-Driven DevelopmentBest PracticesMethodologySoftware DesignSoftware DevelopmentTesting

TestFirstContract is a JSON Structure definition published by Test First, describing 6 properties, of which 4 are required. It conforms to the https://json-structure.org/meta/core/v0/# meta-schema.

Properties

id consumer provider version interactions metadata

Meta-schema: https://json-structure.org/meta/core/v0/#

JSON Structure

Raw ↑
{
  "$schema": "https://json-structure.org/meta/core/v0/#",
  "$id": "https://raw.githubusercontent.com/api-evangelist/test-first/refs/heads/main/json-structure/test-first-contract-structure.json",
  "name": "TestFirstContract",
  "description": "A consumer-driven API contract expressing what the consumer expects the API to provide, written before the provider implements it.",
  "properties": {
    "id": {
      "description": "Unique identifier for the contract.",
      "type": "string"
    },
    "consumer": {
      "description": "Name of the API consumer that authored this contract.",
      "type": "string"
    },
    "provider": {
      "description": "Name of the API provider that must satisfy this contract.",
      "type": "string"
    },
    "version": {
      "description": "Version of the contract.",
      "type": "string"
    },
    "interactions": {
      "items": {
        "$ref": "#/definitions/Interaction"
      },
      "description": "List of expected request/response interactions.",
      "type": "array"
    },
    "metadata": {
      "properties": {
        "pact_specification": {
          "description": "Pact specification version used.",
          "type": "string"
        },
        "created": {
          "description": "When the contract was created.",
          "type": "datetime"
        }
      },
      "type": "object"
    }
  },
  "required": [
    "id",
    "consumer",
    "provider",
    "interactions"
  ],
  "definitions": {
    "Interaction": {
      "properties": {
        "description": {
          "description": "Description of the interaction.",
          "type": "string"
        },
        "provider_state": {
          "description": "The state the provider must be in for this interaction.",
          "type": "string"
        },
        "request": {
          "$ref": "#/definitions/HttpRequest"
        },
        "response": {
          "$ref": "#/definitions/HttpResponse"
        }
      },
      "required": [
        "description",
        "request",
        "response"
      ],
      "type": "object",
      "name": "Interaction"
    },
    "HttpRequest": {
      "properties": {
        "method": {
          "enum": [
            "GET",
            "POST",
            "PUT",
            "PATCH",
            "DELETE",
            "HEAD",
            "OPTIONS"
          ],
          "description": "HTTP method.",
          "type": "string"
        },
        "path": {
          "description": "Request path.",
          "type": "string"
        },
        "headers": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Request headers.",
          "type": "object"
        },
        "body": {
          "description": "Request body."
        }
      },
      "required": [
        "method",
        "path"
      ],
      "type": "object",
      "name": "HttpRequest"
    },
    "HttpResponse": {
      "properties": {
        "status": {
          "minimum": 100,
          "maximum": 599,
          "description": "Expected HTTP status code.",
          "type": "int32"
        },
        "headers": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Expected response headers.",
          "type": "object"
        },
        "body": {
          "description": "Expected response body."
        }
      },
      "required": [
        "status"
      ],
      "type": "object",
      "name": "HttpResponse"
    }
  },
  "type": "object"
}