{
  "openapi": "3.1.0",
  "jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
  "info": {
    "title": "notRobot public discovery API",
    "version": "1.0.0",
    "description": "Read-only published company and service information. No chat, booking, quotation, lead submission or delegated access. Unknown pricing and availability remain null. Query parameters may appear in hosting request logs; never include private information.",
    "contact": {
      "name": "notRobot",
      "url": "https://notrobot-ai.com/contact/",
      "email": "hello@notrobot-ai.com"
    }
  },
  "servers": [
    {
      "url": "https://notrobot-ai.com"
    }
  ],
  "security": [],
  "externalDocs": {
    "description": "Usage, constraints and source links",
    "url": "https://notrobot-ai.com/agents/"
  },
  "paths": {
    "/api/v1/company": {
      "get": {
        "operationId": "getCompany",
        "summary": "Read company information",
        "security": [],
        "parameters": [
          {
            "name": "If-None-Match",
            "in": "header",
            "schema": {
              "type": "string"
            },
            "description": "ETag from the same representation; matching validators return 304."
          }
        ],
        "responses": {
          "200": {
            "description": "Approved public information.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Representation validator on successful responses."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyResponse"
                }
              }
            }
          },
          "304": {
            "description": "Not modified; no body.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Representation validator on successful responses."
              }
            }
          },
          "400": {
            "description": "Invalid query, encoding or identifier.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Representation validator on successful responses."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Representation validator on successful responses."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "405": {
            "description": "Only GET and HEAD are supported.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Representation validator on successful responses."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "head": {
        "operationId": "getCompanyHeaders",
        "summary": "Headers for read company information",
        "security": [],
        "parameters": [
          {
            "name": "If-None-Match",
            "in": "header",
            "schema": {
              "type": "string"
            },
            "description": "ETag from the same representation; matching validators return 304."
          }
        ],
        "responses": {
          "200": {
            "description": "Same status and headers as GET; no body.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Representation validator on successful responses."
              }
            }
          },
          "304": {
            "description": "Same status and headers as GET; no body.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Representation validator on successful responses."
              }
            }
          },
          "400": {
            "description": "Same status and headers as GET; no body.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Representation validator on successful responses."
              }
            }
          },
          "404": {
            "description": "Same status and headers as GET; no body.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Representation validator on successful responses."
              }
            }
          },
          "405": {
            "description": "Same status and headers as GET; no body.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Representation validator on successful responses."
              }
            }
          }
        }
      }
    },
    "/api/v1/services": {
      "get": {
        "operationId": "listServices",
        "summary": "List published services",
        "security": [],
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "schema": {
              "type": "string",
              "maxLength": 160
            },
            "description": "Optional NFC-normalized, trimmed, case-insensitive substring across name, description, details and family label. Empty means all. At most one occurrence; control characters and malformed encoding rejected."
          },
          {
            "name": "family",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "strategy",
                "ai",
                "cloud",
                "web",
                "trust",
                "enablement"
              ]
            },
            "description": "Optional exact family identifier. Empty, unknown and duplicate values are rejected."
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "schema": {
              "type": "string"
            },
            "description": "ETag from the same representation; matching validators return 304."
          }
        ],
        "responses": {
          "200": {
            "description": "Approved public information.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Representation validator on successful responses."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServicesResponse"
                }
              }
            }
          },
          "304": {
            "description": "Not modified; no body.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Representation validator on successful responses."
              }
            }
          },
          "400": {
            "description": "Invalid query, encoding or identifier.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Representation validator on successful responses."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Representation validator on successful responses."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "405": {
            "description": "Only GET and HEAD are supported.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Representation validator on successful responses."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "head": {
        "operationId": "listServicesHeaders",
        "summary": "Headers for list published services",
        "security": [],
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "schema": {
              "type": "string",
              "maxLength": 160
            },
            "description": "Optional NFC-normalized, trimmed, case-insensitive substring across name, description, details and family label. Empty means all. At most one occurrence; control characters and malformed encoding rejected."
          },
          {
            "name": "family",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "strategy",
                "ai",
                "cloud",
                "web",
                "trust",
                "enablement"
              ]
            },
            "description": "Optional exact family identifier. Empty, unknown and duplicate values are rejected."
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "schema": {
              "type": "string"
            },
            "description": "ETag from the same representation; matching validators return 304."
          }
        ],
        "responses": {
          "200": {
            "description": "Same status and headers as GET; no body.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Representation validator on successful responses."
              }
            }
          },
          "304": {
            "description": "Same status and headers as GET; no body.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Representation validator on successful responses."
              }
            }
          },
          "400": {
            "description": "Same status and headers as GET; no body.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Representation validator on successful responses."
              }
            }
          },
          "404": {
            "description": "Same status and headers as GET; no body.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Representation validator on successful responses."
              }
            }
          },
          "405": {
            "description": "Same status and headers as GET; no body.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Representation validator on successful responses."
              }
            }
          }
        }
      }
    },
    "/api/v1/services/{id}": {
      "get": {
        "operationId": "getService",
        "summary": "Read one published service",
        "security": [],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
              "maxLength": 96
            },
            "description": "Stable id from listServices. Missing services return 404."
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "schema": {
              "type": "string"
            },
            "description": "ETag from the same representation; matching validators return 304."
          }
        ],
        "responses": {
          "200": {
            "description": "Approved public information.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Representation validator on successful responses."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "304": {
            "description": "Not modified; no body.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Representation validator on successful responses."
              }
            }
          },
          "400": {
            "description": "Invalid query, encoding or identifier.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Representation validator on successful responses."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Representation validator on successful responses."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "405": {
            "description": "Only GET and HEAD are supported.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Representation validator on successful responses."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "head": {
        "operationId": "getServiceHeaders",
        "summary": "Headers for read one published service",
        "security": [],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
              "maxLength": 96
            },
            "description": "Stable id from listServices. Missing services return 404."
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "schema": {
              "type": "string"
            },
            "description": "ETag from the same representation; matching validators return 304."
          }
        ],
        "responses": {
          "200": {
            "description": "Same status and headers as GET; no body.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Representation validator on successful responses."
              }
            }
          },
          "304": {
            "description": "Same status and headers as GET; no body.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Representation validator on successful responses."
              }
            }
          },
          "400": {
            "description": "Same status and headers as GET; no body.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Representation validator on successful responses."
              }
            }
          },
          "404": {
            "description": "Same status and headers as GET; no body.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Representation validator on successful responses."
              }
            }
          },
          "405": {
            "description": "Same status and headers as GET; no body.",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Representation validator on successful responses."
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Company": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "name",
          "url",
          "description",
          "email",
          "contentReviewedOn",
          "constraints",
          "id",
          "sourceUrl",
          "contactUrl",
          "briefUrl",
          "termsUrl",
          "privacyUrl",
          "pricing",
          "availability"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "description": {
            "type": "string"
          },
          "email": {
            "type": "string",
            "format": "email"
          },
          "contentReviewedOn": {
            "type": "string",
            "format": "date"
          },
          "constraints": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "id": {
            "type": "string",
            "format": "uri"
          },
          "sourceUrl": {
            "type": "string",
            "format": "uri"
          },
          "contactUrl": {
            "type": "string",
            "format": "uri"
          },
          "briefUrl": {
            "type": "string",
            "format": "uri"
          },
          "termsUrl": {
            "type": "string",
            "format": "uri"
          },
          "privacyUrl": {
            "type": "string",
            "format": "uri"
          },
          "pricing": {
            "type": "null",
            "description": "Not published; do not infer a price or availability."
          },
          "availability": {
            "type": "null",
            "description": "Not published; do not infer a price or availability."
          }
        }
      },
      "Service": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id",
          "family",
          "familyLabel",
          "name",
          "description",
          "details",
          "sourceUrl",
          "apiUrl",
          "providerId",
          "contactUrl",
          "pricing",
          "availability"
        ],
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "maxLength": 96
          },
          "family": {
            "type": "string",
            "enum": [
              "strategy",
              "ai",
              "cloud",
              "web",
              "trust",
              "enablement"
            ]
          },
          "familyLabel": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "details": {
            "type": "string"
          },
          "sourceUrl": {
            "type": "string",
            "format": "uri"
          },
          "apiUrl": {
            "type": "string",
            "format": "uri"
          },
          "providerId": {
            "type": "string",
            "format": "uri"
          },
          "contactUrl": {
            "type": "string",
            "format": "uri"
          },
          "pricing": {
            "type": "null",
            "description": "Not published; do not infer a price or availability."
          },
          "availability": {
            "type": "null",
            "description": "Not published; do not infer a price or availability."
          }
        }
      },
      "CompanyResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "contentRevision",
          "company"
        ],
        "properties": {
          "schemaVersion": {
            "const": "1.0"
          },
          "contentRevision": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          },
          "company": {
            "$ref": "#/components/schemas/Company"
          }
        }
      },
      "ServicesResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "contentRevision",
          "total",
          "services"
        ],
        "properties": {
          "schemaVersion": {
            "const": "1.0"
          },
          "contentRevision": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          },
          "total": {
            "type": "integer",
            "minimum": 0,
            "maximum": 39
          },
          "services": {
            "type": "array",
            "maxItems": 39,
            "items": {
              "$ref": "#/components/schemas/Service"
            }
          }
        }
      },
      "ServiceResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "contentRevision",
          "service"
        ],
        "properties": {
          "schemaVersion": {
            "const": "1.0"
          },
          "contentRevision": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          },
          "service": {
            "$ref": "#/components/schemas/Service"
          }
        }
      },
      "ErrorResponse": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "contentRevision",
          "error"
        ],
        "properties": {
          "schemaVersion": {
            "const": "1.0"
          },
          "contentRevision": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          },
          "error": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "code",
              "message"
            ],
            "properties": {
              "code": {
                "type": "string",
                "enum": [
                  "method_not_allowed",
                  "invalid_query",
                  "invalid_family",
                  "invalid_path",
                  "invalid_id",
                  "not_found"
                ]
              },
              "message": {
                "type": "string"
              }
            }
          }
        }
      }
    }
  }
}
