{
  "openapi": "3.1.1",
  "jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
  "x-publication-url": "https://api.agentserviceprocurement.com/docs/provider-lab/v1/openapi.json",
  "x-nexus-example-inputs": {
    "service_manifest": "https://api.agentserviceprocurement.com/docs/provider-lab/v1/examples/inputs/service-manifest.json",
    "compatible_search_request": "https://api.agentserviceprocurement.com/docs/provider-lab/v1/examples/inputs/public-read-only-search-request.json",
    "blocked_search_request": "https://api.agentserviceprocurement.com/docs/provider-lab/v1/examples/inputs/confidential-no-retention-search-request.json",
    "fixture_evaluation_time": "2026-09-04T12:30:00Z",
    "fixture_evaluation_time_is_client_input": false
  },
  "info": {
    "title": "Agent NEXUS Provider Lab API",
    "version": "1.0.0",
    "summary": "Evaluate one service manifest against one buyer requirement profile.",
    "description": "Machine contract for the side-effect-free Provider Lab compatibility evaluator deployed at the canonical Agent NEXUS API origin. A successful result says only whether the submitted declaration passes all ten hard contract filters for the submitted request. It does not establish capability fit, ranking, trust, ownership, safety, quality, reachability, authority, permission, listing, approval, or invocation eligibility."
  },
  "externalDocs": {
    "description": "Provider Lab API contract and examples",
    "url": "https://api.agentserviceprocurement.com/docs/provider-lab/v1/"
  },
  "servers": [
    {
      "url": "https://api.agentserviceprocurement.com",
      "description": "Canonical Agent NEXUS API origin"
    }
  ],
  "tags": [
    {
      "name": "Compatibility",
      "description": "Pure, ten-dimension contract compatibility evaluation."
    }
  ],
  "paths": {
    "/api/compatibility": {
      "post": {
        "operationId": "evaluateProviderCompatibility",
        "summary": "Evaluate one exact manifest/request pair",
        "description": "Send exactly two properties. Each property is a raw JSON string containing one complete canonical document; do not send the inner documents as JSON objects. This double encoding preserves duplicate-member detection by the server's strict parser. The UTF-8 encoded outer request body must not exceed 1,048,576 bytes. The service does not fetch URLs found in either document, invoke a provider, persist payloads, or intentionally log submitted content.",
        "tags": [
          "Compatibility"
        ],
        "security": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "https://api.agentserviceprocurement.com/docs/provider-lab/v1/schemas/compatibility-request-envelope.schema.json"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The exact canonical compatibility report. A false compatible value is still a successfully completed evaluation.",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not cacheable.",
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "type": "string",
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "https://api.agentserviceprocurement.com/docs/provider-lab/v1/schemas/compatibility-report.schema.json"
                },
                "examples": {
                  "compatible": {
                    "summary": "All ten hard filters pass",
                    "externalValue": "https://api.agentserviceprocurement.com/docs/provider-lab/v1/examples/compatible-report.json"
                  },
                  "blocked": {
                    "summary": "Privacy and availability block this exact pair",
                    "externalValue": "https://api.agentserviceprocurement.com/docs/provider-lab/v1/examples/blocked-report.json"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "405": {
            "$ref": "#/components/responses/MethodNotAllowed"
          },
          "413": {
            "$ref": "#/components/responses/BodyTooLarge"
          },
          "415": {
            "$ref": "#/components/responses/UnsupportedMediaType"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "x-nexus-side-effects": "none",
        "x-nexus-maximum-utf8-body-bytes": 1048576,
        "x-nexus-evaluation-time": "Server-supplied canonical UTC time; it is bound into every evidence digest and the report digest.",
        "x-nexus-rate-limit-contract": {
          "status": "defined",
          "limit": 30,
          "period_seconds": 60,
          "scope": "One anonymous network identity at a Cloudflare location. Counters may be locally cached and are an abuse boundary, not a global availability guarantee.",
          "client_requirement": "On HTTP 429, honor the Retry-After header, retry at most twice with jitter, and stop rather than creating an unbounded retry loop."
        },
        "x-nexus-nonclaims": [
          "capability fit",
          "ranking",
          "trust",
          "ownership",
          "safety",
          "quality",
          "reachability",
          "authority",
          "permission",
          "listing",
          "approval",
          "invocation eligibility"
        ]
      },
      "options": {
        "operationId": "preflightProviderCompatibility",
        "summary": "CORS preflight for an allowed browser origin",
        "description": "Browser support only. Software agents normally omit Origin. Allowed origins are configured exactly; an Origin value is never reflected from an open wildcard.",
        "tags": [
          "Compatibility"
        ],
        "security": [],
        "responses": {
          "204": {
            "description": "Allowed preflight. No response body."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "CompatibilityRequestEnvelope": {
        "$ref": "https://api.agentserviceprocurement.com/docs/provider-lab/v1/schemas/compatibility-request-envelope.schema.json"
      },
      "CompatibilityReport": {
        "$ref": "https://api.agentserviceprocurement.com/docs/provider-lab/v1/schemas/compatibility-report.schema.json"
      },
      "SanitizedError": {
        "$ref": "https://api.agentserviceprocurement.com/docs/provider-lab/v1/schemas/error.schema.json"
      }
    },
    "responses": {
      "BadRequest": {
        "description": "The request was not evaluated. Inspect error.code; do not infer a partial result.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "https://api.agentserviceprocurement.com/docs/provider-lab/v1/schemas/error.schema.json"
            },
            "examples": {
              "invalidEnvelope": {
                "summary": "Inner documents were sent as objects instead of raw JSON strings",
                "externalValue": "https://api.agentserviceprocurement.com/docs/provider-lab/v1/examples/invalid-error.json"
              }
            }
          }
        }
      },
      "Forbidden": {
        "description": "A supplied browser Origin is not in the exact allowlist.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "https://api.agentserviceprocurement.com/docs/provider-lab/v1/schemas/error.schema.json"
            }
          }
        }
      },
      "NotFound": {
        "description": "The route does not match the exact compatibility path.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "https://api.agentserviceprocurement.com/docs/provider-lab/v1/schemas/error.schema.json"
            }
          }
        }
      },
      "MethodNotAllowed": {
        "description": "Only POST and OPTIONS are accepted at this route.",
        "headers": {
          "Allow": {
            "schema": {
              "type": "string",
              "const": "POST, OPTIONS"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "https://api.agentserviceprocurement.com/docs/provider-lab/v1/schemas/error.schema.json"
            }
          }
        }
      },
      "BodyTooLarge": {
        "description": "The UTF-8 encoded outer body exceeds 1,048,576 bytes.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "https://api.agentserviceprocurement.com/docs/provider-lab/v1/schemas/error.schema.json"
            }
          }
        }
      },
      "UnsupportedMediaType": {
        "description": "Content-Type is not application/json with at most an optional UTF-8 charset.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "https://api.agentserviceprocurement.com/docs/provider-lab/v1/schemas/error.schema.json"
            }
          }
        }
      },
      "RateLimited": {
        "description": "The anonymous evaluation limit was reached. The request was not evaluated.",
        "headers": {
          "Retry-After": {
            "description": "Minimum whole seconds before a bounded retry.",
            "schema": {
              "type": "string",
              "pattern": "^[1-9][0-9]*$"
            }
          },
          "X-RateLimit-Limit": {
            "schema": {
              "type": "string",
              "const": "30"
            }
          },
          "X-RateLimit-Remaining": {
            "schema": {
              "type": "string",
              "const": "0"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "https://api.agentserviceprocurement.com/docs/provider-lab/v1/schemas/error.schema.json"
            }
          }
        }
      },
      "InternalError": {
        "description": "Evaluation did not complete. The response contains no submitted content or internal exception detail.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "https://api.agentserviceprocurement.com/docs/provider-lab/v1/schemas/error.schema.json"
            }
          }
        }
      }
    }
  }
}
