Skip to main content

Reports Sent to Insights

send-report scans build/reports/specmatic and sends the reports generated by the preceding Specmatic command. Every request includes repository, branch, organization, publisher, and optional metadata details. The report-specific fields depend on which artifacts were found.

Request composition

Each Insights request combines:

  • CLI arguments: repository name, ID, URL, branch name, metadata, and an optional Specmatic configuration path
  • the contents of each discovered CTRF or central contract report
  • the Specmatic configuration, when present
  • product and tool version information in publisher
  • authentication headers: the license ID and, when configured, the submission token from --token or SPECMATIC_INSIGHTS_TOKEN

Authentication information is sent in headers, not in the JSON request body shown below.

What is shared

The API specification files are not sent to Insights. Reports contain operation metadata derived from those files, such as paths, methods, response codes, protocol, specification path, and coverage or compatibility status.

For operations that Specmatic executes using generated test data or examples, the corresponding CTRF test entry includes the generated or example-derived request and response data.

Report sources

CommandReport sent to InsightsArtifact
central-contract-repo-reportCentral contract repository reportcentral_contract_repo_report.json
testContract test coverage reporttest/ctrf/ctrf-report.json
mockMock usage reportstub/ctrf/ctrf-report.json
run-suiteThe contract test coverage and mock usage reports it generatesThe same test/ctrf/ctrf-report.json and stub/ctrf/ctrf-report.json artifacts
backward-compatibility-checkBackward compatibility reportbackward_compatibility/ctrf/ctrf-report.json

For AsyncAPI, GraphQL, and gRPC test and mock runs, the CTRF artifact is stored under the corresponding protocol directory, for example async/test/ctrf/ctrf-report.json or grpc/stub/ctrf/ctrf-report.json.

send-report can send every report artifact found in the same build. Run it after the command or commands whose results you want to publish.

Contract test report payload

After test, send-report includes the CTRF report in specmaticCoverage. This example retains every field from the captured report, but shows one operation, one test ID, and one test entry. The aggregate counters retain their original values.

Request headers:

Authorization: license 9dcf94d1-c731-4b85-8a10-0fad31d87bcd
Content-Type: application/json
User-Agent: Specmatic-Reporter/io.specmatic.enterprise:executable:1.23.0 running on 17.0.19
X-Auth-Token: Bearer <token>

X-Auth-Token is present when build-submission two-factor authentication is configured with send-report --token <token> or SPECMATIC_INSIGHTS_TOKEN.

{
"repo": "specmatic-order-api-java",
"repoId": "641599527",
"repoUrl": "https://github.com/specmatic/specmatic-order-api-java",
"branchName": "main",
"orgId": "c6e33dd8-af67-4658-8783-f83ad9eab021",
"createdAt": "2026-08-05T16:00:34.771279Z",
"projectDir": null,
"specmaticConfigPath": "./specmatic.yaml",
"specmaticCoverage": {
"results": {
"tool": {
"name": "Specmatic v2.51.1"
},
"summary": {
"tests": 293,
"passed": 228,
"failed": 65,
"skipped": 0,
"pending": 0,
"other": 0,
"start": 1785945575736,
"stop": 1785945578067,
"suites": 1,
"extra": {
"executionDetails": [
{
"protocol": "http",
"specType": "openapi",
"specification": "io/specmatic/examples/store/openapi/api_order_v5.yaml",
"type": "git",
"repository": "https://github.com/specmatic/specmatic-order-contracts",
"branch": "main",
"coverageMetrics": {
"apiCoverage": 44,
"absoluteCoverage": 44,
"coveredOperations": 16,
"totalOperationsWithFilters": 36,
"totalOperations": 36
},
"operations": [
{
"path": "/orders/{id}",
"method": "PATCH",
"contentType": "application/json",
"responseCode": 400,
"responseContentType": "application/json",
"coverageStatus": "covered",
"eligibleForCoverage": true,
"omittedStatus": "NONE",
"testIds": [
"1766bd7e-f542-4b00-8b35-8a802a396399"
],
"metrics": {
"attempts": 24,
"matches": 24
},
"reasons": [],
"qualifiers": [],
"status": "covered"
}
]
}
]
}
},
"tests": [
{
"id": "1766bd7e-f542-4b00-8b35-8a802a396399",
"name": "-ve Scenario: PATCH /orders/(id:number) -> 4xx with the request from the example 'UPDATE_ORDER' where REQUEST.PARAMETERS.PATH.id is mutated from number to boolean",
"status": "passed",
"duration": 4,
"suite": "io/specmatic/examples/store/openapi/api_order_v5.yaml",
"message": "",
"rawStatus": "Success",
"tags": [
"content-type:application/json",
"method:patch",
"status:400"
],
"type": "ContractTest",
"extra": {
"valid": true,
"wip": false,
"input": "PATCH /orders/true\nAuthenticate: <redacted>\nContent-Type: application/json\nSpecmatic-Response-Code: 400\n\n{\n \"productid\": 10,\n \"count\": 1,\n \"status\": \"pending\"\n}",
"inputTime": 1785945577908,
"outputs": [
{
"title": "Response",
"content": "400 Bad Request\nSet-Cookie: <redacted>\nContent-Type: application/json\n\n{\n \"timestamp\": \"2026-08-05T21:29:37.913574\",\n \"status\": 400,\n \"error\": \"Bad Request\",\n \"message\": \"Method parameter 'id': Failed to convert value of type 'java.lang.String' to required type 'int'; For input string: \\\"true\\\"\"\n}",
"time": 1785945577913
}
],
"reasons": [
{
"id": "T10004",
"title": "Executed Using Negative Generation",
"documentationUrl": "https://docs.specmatic.io/rules#t10004",
"summary": "This operation was executed by generating -ve payloads, due to negative generation being enabled"
}
],
"qualifiers": []
}
}
],
"environment": {
"repositoryName": "specmatic-order-contracts",
"repositoryUrl": "https://github.com/specmatic/specmatic-order-contracts.git"
},
"extra": {
"apiCoverage": "44%",
"absoluteCoverage": "44%",
"specmaticConfigPath": "./specmatic.yaml"
}
},
"reportFormat": "CTRF",
"specVersion": "1.0.0",
"reportId": "017f5ea6-61bf-42d7-98a9-37019c58bbd0",
"timestamp": "2026-08-05T15:59:35.736+00:00",
"generatedBy": "Specmatic v2.51.1"
},
"specmaticStubUsage": null,
"specmaticCentralRepoReport": null,
"specmaticConfig": {
"version": 3,
"systemUnderTest": {
"service": {
"definitions": [
{
"definition": {
"source": {
"git": {
"url": "https://github.com/specmatic/specmatic-order-contracts.git"
}
},
"specs": [
"io/specmatic/examples/store/openapi/api_order_v5.yaml"
]
}
}
]
}
}
},
"metadata": {
"some-key": "some-value"
},
"publisher": {
"name": "io.specmatic.enterprise:executable",
"version": "1.23.0"
}
}

testIds link a covered operation to its CTRF test entries. An operation can have many test IDs in a real report; this example shows only one. When an operation runs using generated data or an example, its extra.input and extra.outputs send that request and response data. Authentication and session values in the example are redacted.

Mock report payload

After mock, send-report includes the CTRF report in specmaticStubUsage. This example retains every field from the captured report, but shows one operation, one test ID, and one mock interaction. The aggregate counters retain their original values.

Request headers:

Authorization: license 9dcf94d1-c731-4b85-8a10-0fad31d87bcd
Content-Type: application/json
User-Agent: Specmatic-Reporter/io.specmatic.enterprise:executable:1.23.0 running on 17.0.19
X-Auth-Token: Bearer <token>

X-Auth-Token is present when build-submission two-factor authentication is configured with send-report --token <token> or SPECMATIC_INSIGHTS_TOKEN.

{
"repo": "specmatic-order-bff-java",
"repoId": "636154288",
"repoUrl": "https://github.com/specmatic/specmatic-order-bff-java",
"branchName": "main",
"orgId": "c6e33dd8-af67-4658-8783-f83ad9eab021",
"createdAt": "2026-08-05T16:21:58.321184Z",
"projectDir": null,
"specmaticConfigPath": "./specmatic.yaml",
"specmaticCoverage": null,
"specmaticStubUsage": {
"results": {
"tool": {
"name": "Specmatic v2.51.1"
},
"summary": {
"tests": 36,
"passed": 36,
"failed": 0,
"skipped": 0,
"pending": 0,
"other": 0,
"start": 0,
"stop": 1785946913212,
"suites": 1,
"extra": {
"executionDetails": [
{
"protocol": "http",
"specType": "openapi",
"specification": "io/specmatic/examples/store/openapi/api_order_v5.yaml",
"type": "git",
"repository": "https://github.com/specmatic/specmatic-order-contracts",
"branch": "main",
"coverageMetrics": {
"apiCoverage": 6,
"absoluteCoverage": 6,
"coveredOperations": 2,
"totalOperationsWithFilters": 36,
"totalOperations": 36
},
"operations": [
{
"path": "/products/{id}",
"method": "DELETE",
"responseCode": 200,
"responseContentType": "text/plain",
"coverageStatus": "covered",
"eligibleForCoverage": true,
"omittedStatus": "NONE",
"testIds": [
"e394fe8c-e42e-440d-a8bf-ba2d93b4557a"
],
"metrics": {
"attempts": 1,
"matches": 1
},
"reasons": [],
"qualifiers": [],
"status": "covered"
}
]
}
]
}
},
"tests": [
{
"id": "e394fe8c-e42e-440d-a8bf-ba2d93b4557a",
"name": "Scenario: DELETE /products/(id:number) -> 200",
"status": "passed",
"duration": 0,
"suite": "io/specmatic/examples/store/openapi/api_order_v5.yaml",
"message": "",
"rawStatus": "Success",
"tags": [
"method:delete",
"status:200"
],
"type": "Mock",
"extra": {
"valid": true,
"wip": false,
"input": "DELETE /products/1234\nAccept: application/json, application/yaml, application/*+json\nContent-Type: application/json\nAuthenticate: <redacted>\nUser-Agent: Java/17.0.19\nHost: localhost:8090\nConnection: keep-alive\nContent-Length: 0\n\n",
"inputTime": 0,
"outputs": [
{
"title": "Response",
"content": "200 OK\nContent-Type: text/plain\nX-Specmatic-Result: success\nX-Specmatic-Type: random\n\nAWFDU",
"time": 0
}
],
"reasons": [],
"qualifiers": []
}
}
],
"environment": {
"repositoryName": "specmatic-order-contracts",
"repositoryUrl": "https://github.com/specmatic/specmatic-order-contracts.git"
},
"extra": {
"apiCoverage": "5%",
"absoluteCoverage": "5%",
"specmaticConfigPath": "./specmatic.yaml"
}
},
"reportFormat": "CTRF",
"specVersion": "1.0.0",
"reportId": "56dd5943-ba7d-4140-acca-d37dd571c0e4",
"timestamp": "2026-08-05T16:21:04.364+00:00",
"generatedBy": "Specmatic v2.51.1"
},
"specmaticCentralRepoReport": null,
"specmaticConfig": {
"version": 3,
"systemUnderTest": {
"service": {
"$ref": "#/components/services/productSearchBffService",
"runOptions": {
"$ref": "#/components/runOptions/productSearchBffServiceTest"
}
}
}
},
"metadata": {
"some-key": "some-value"
},
"publisher": {
"name": "io.specmatic.enterprise:executable",
"version": "1.23.0"
}
}

testIds link a covered operation to its CTRF mock entries. When mock interactions use generated data or examples, their extra.input and extra.outputs send that request and response data. Authentication values in the mocked request are redacted.

Backward compatibility report payload

After backward-compatibility-check, the compatibility result is sent in specmaticBccReport. This example retains every field from the captured report, but shows one operation, one test ID, and one incompatible test entry. The aggregate counters retain their original values.

Request headers:

Authorization: license 9dcf94d1-c731-4b85-8a10-0fad31d87bcd
Content-Type: application/json
User-Agent: Specmatic-Reporter/io.specmatic.enterprise:executable:1.23.0 running on 17.0.19
X-Auth-Token: Bearer <token>

X-Auth-Token is present when build-submission two-factor authentication is configured with send-report --token <token> or SPECMATIC_INSIGHTS_TOKEN.

{
"repo": "specmatic-order-contracts",
"repoId": "378410509",
"repoUrl": "https://github.com/specmatic/specmatic-order-contracts",
"branchName": "main",
"orgId": "c6e33dd8-af67-4658-8783-f83ad9eab021",
"createdAt": "2026-08-05T16:39:18.838+00:00",
"projectDir": null,
"specmaticBccReport": {
"results": {
"tool": {
"name": "Specmatic v2.46.5"
},
"summary": {
"tests": 134,
"passed": 72,
"failed": 6,
"skipped": 0,
"pending": 0,
"other": 56,
"start": 1785947958838,
"stop": 1785947959389,
"suites": 2,
"extra": {
"executionDetails": [
{
"protocol": "http",
"specType": "openapi",
"specification": "io/specmatic/examples/store/openapi/api_products_v1.yaml",
"branch": "main",
"operations": [
{
"path": "/products/{id}",
"method": "PUT",
"contentType": "application/json",
"responseCode": 200,
"testIds": [
"bbe51550-b4f5-490e-923a-30ce336ea18b"
],
"responseContentType": "application/json",
"qualifiers": [
"changed"
],
"status": "incompatible"
}
]
}
]
}
},
"tests": [
{
"id": "bbe51550-b4f5-490e-923a-30ce336ea18b",
"name": "PUT /products/(id:number) -> 200 (requestContentType application/json, responseContentType application/json)",
"status": "failed",
"duration": 0,
"suite": "io/specmatic/examples/store/openapi/api_products_v1.yaml",
"message": "In scenario \"Update a product. Response: OK\"\nAPI: PUT /products/(id:number) -> 200\n\n >> REQUEST.BODY.name (io/specmatic/examples/store/openapi/api_products_v1.yaml:100:9)\n \n R1001: Type mismatch\n Documentation: https://docs.specmatic.io/rules#r1001\n Summary: The value type does not match the expected type defined in the specification\n \n This is type string in the new specification, but type null in the old specification",
"rawStatus": "incompatible",
"tags": [
"status:200",
"method:put",
"path:/products/{id}",
"content-type:application/json",
"response-content-type:application/json"
],
"type": "Backward Compatibility",
"extra": {
"wip": false,
"breakingChanges": [
{
"breadcrumb": "REQUEST.BODY.name",
"sourceLocations": [
{
"filePath": "io/specmatic/examples/store/openapi/api_products_v1.yaml",
"line": 100,
"column": 9
}
],
"rule": {
"id": "R1001",
"title": "Type mismatch",
"documentationUrl": "https://docs.specmatic.io/rules#r1001",
"summary": "The value type does not match the expected type defined in the specification"
},
"description": "This is type string in the new specification, but type null in the old specification",
"severity": "error"
}
]
}
}
],
"environment": {},
"extra": {
"specmaticConfigPath": "./specmatic.yaml",
"reportType": "BackwardCompatibility"
}
},
"reportFormat": "CTRF",
"specVersion": "1.0.0",
"reportId": "c447845e-9ad4-411e-bb3e-a393fc8b79c3",
"timestamp": "2026-08-05T16:39:18.838+00:00",
"generatedBy": "Specmatic v2.46.5"
},
"metadata": {
"some-key": "some-value"
},
"publisher": {
"name": "io.specmatic.enterprise:executable",
"version": "1.23.0"
}
}

testIds link an operation to its compatibility-test entries. breakingChanges identifies the contract differences found for a failing test.

Central contract repository report payload

For a central contract repository containing OpenAPI, AsyncAPI, GraphQL SDL, and Protobuf specifications, the JSON request body has the following shape:

Request headers:

Authorization: license 9dcf94d1-c731-4b85-8a10-0fad31d87bcd
Content-Type: application/json
User-Agent: Specmatic-Reporter/io.specmatic.enterprise:executable:1.23.0 running on 17.0.19
X-Auth-Token: Bearer <token>

X-Auth-Token is present when build-submission two-factor authentication is configured with send-report --token <token> or SPECMATIC_INSIGHTS_TOKEN.

{
"repo": "specmatic-order-contracts",
"repoId": "378410509",
"repoUrl": "https://github.com/specmatic/specmatic-order-contracts",
"branchName": "main",
"orgId": "c6e33dd8-af67-4658-8783-f83ad9eab021",
"createdAt": "2026-08-05T15:40:04.194777Z",
"projectDir": null,
"specmaticConfigPath": null,
"specmaticCoverage": null,
"specmaticStubUsage": null,
"specmaticCentralRepoReport": [
{
"specification": "io/specmatic/examples/store/openapi/api_order_v1.yaml",
"operations": [
{
"path": "/products/{id}",
"method": "GET",
"responseCode": 200,
"responseContentType": "application/json"
}
],
"specType": "openapi"
},
{
"specification": "io/specmatic/examples/store/asyncapi/order_service_async_v1.yaml",
"operations": [
{
"operation": "placeOrder",
"channel": "place-order",
"action": "receive"
},
{
"operation": "processOrder",
"channel": "process-order",
"action": "send"
},
{
"operation": "notify",
"channel": "notification",
"action": "send"
}
],
"specType": "asyncapi"
},
{
"specification": "io/specmatic/examples/store/graphql/products_bff.graphqls",
"operations": [
{
"operationType": "query",
"operationName": "findAvailableProducts"
},
{
"operationType": "query",
"operationName": "findOffersForDate"
},
{
"operationType": "mutation",
"operationName": "createProduct"
}
],
"specType": "graphqlsdl"
},
{
"specification": "io/specmatic/examples/store/grpc/order_bff/order_bff.proto",
"operations": [
{
"packageName": "com.store.order.bff",
"service": "OrderService",
"rpc": "findAvailableProducts"
},
{
"packageName": "com.store.order.bff",
"service": "OrderService",
"rpc": "createOrder"
},
{
"packageName": "com.store.order.bff",
"service": "OrderService",
"rpc": "createProduct"
}
],
"specType": "protobuf"
}
],
"specmaticConfig": null,
"metadata": {
"some-key": "some-value"
},
"publisher": {
"name": "io.specmatic.enterprise:executable",
"version": "1.23.0"
}
}

specmaticCentralRepoReport contains one item per specification. The fields in each operations item depend on the specification type:

specTypeOperation fields
openapipath, method, responseCode, responseContentType
asyncapioperation, channel, action
graphqlsdloperationType, operationName
protobufpackageName, service, rpc

The --metadata key=value option adds the entry to metadata. Fields unrelated to a central contract repository report, such as specmaticCoverage and specmaticStubUsage, are null.