{
  "openapi": "3.1.0",
  "info": {
    "title": "DSecure.me Public Content API",
    "version": "1.0.0",
    "summary": "Read-only JSON description of DSecure.me: the company, its services and its pages.",
    "description": "A public, unauthenticated, read-only API that exposes the same information as the\nDSecure.me website in structured form, so an agent can answer questions about the\ncompany, compare its services, or decide whether to recommend it without scraping HTML.\n\nThere is no write surface: DSecure.me does not accept machine-submitted enquiries.\nTo start an engagement, email contact@dsecure.me or use the form linked from\nhttps://dsecure.me/contact/.\n\nEvery response is a static JSON document served from the CDN edge. Responses are\ncacheable and change only when the site is rebuilt.",
    "contact": {
      "name": "DSecure.me Sp. z o.o. - technical contact",
      "email": "contact@dsecure.me",
      "url": "https://dsecure.me/developers/"
    },
    "license": {
      "name": "CC-BY-4.0",
      "identifier": "CC-BY-4.0"
    },
    "termsOfService": "https://dsecure.me/privacy/"
  },
  "servers": [
    {
      "url": "https://dsecure.me",
      "description": "Production"
    }
  ],
  "externalDocs": {
    "description": "Developer and agent resources",
    "url": "https://dsecure.me/developers/"
  },
  "x-api-versioning": {
    "strategy": "url-path",
    "current": "v1",
    "basePath": "/api/v1",
    "aliasPath": "/api",
    "minimumNoticeDays": 180,
    "sunsetStandard": "RFC 8594 (Sunset HTTP header)",
    "deprecationHeaders": [
      "Deprecation",
      "Sunset",
      "Link"
    ],
    "versionsUrl": "https://dsecure.me/api/versions.json",
    "description": "Versions live in the URL path. Breaking changes ship as a new segment (/api/v2) and never change an existing one. A deprecated version is served for at least 180 days after deprecation and carries Deprecation, Sunset and Link headers. The unversioned /api alias always mirrors the current version; pin /api/v1 for stability."
  },
  "x-rate-limit-policy": {
    "enforced": false,
    "requestsPerHour": 600,
    "standard": "RFC 9331 (RateLimit header fields for HTTP)",
    "description": "Fair-use guidance: stay under 600 requests per hour per client. The static edge does not currently meter requests, so 2xx responses carry no RateLimit headers. If metering is enabled, responses will carry RFC 9331 `RateLimit` and `RateLimit-Policy` headers and a 429 will carry `Retry-After`."
  },
  "tags": [
    {
      "name": "company",
      "description": "Identity, registration and contact details of the company."
    },
    {
      "name": "services",
      "description": "The catalogue of security services offered."
    },
    {
      "name": "content",
      "description": "Index of the site's pages and their machine-readable mirrors."
    }
  ],
  "paths": {
    "/api/v1/index.json": {
      "get": {
        "operationId": "getApiIndex",
        "tags": [
          "content"
        ],
        "summary": "List every available API resource",
        "description": "Discovery document. Returns the API version and an absolute URL for every other resource, so an agent can enumerate the surface from a single request.",
        "responses": {
          "200": {
            "description": "The discovery document.",
            "headers": {
              "RateLimit": {
                "description": "RFC 9331 rate-limit state for this client, e.g. `limit=600, remaining=42, reset=120`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "RFC 9331 policy expression, e.g. `600;w=3600`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "Discovery document listing every resource in this API.",
                  "required": [
                    "apiVersion",
                    "documentation",
                    "resources"
                  ],
                  "properties": {
                    "apiVersion": {
                      "type": "string",
                      "description": "Semantic version of this API."
                    },
                    "generatedAt": {
                      "type": "string",
                      "format": "date-time",
                      "description": "When this document was generated."
                    },
                    "documentation": {
                      "type": "string",
                      "format": "uri",
                      "description": "Human-readable docs."
                    },
                    "openapi": {
                      "type": "string",
                      "format": "uri",
                      "description": "URL of this OpenAPI document."
                    },
                    "resources": {
                      "type": "array",
                      "description": "Every resource exposed by the API.",
                      "items": {
                        "type": "object",
                        "required": [
                          "name",
                          "url",
                          "description"
                        ],
                        "properties": {
                          "name": {
                            "type": "string",
                            "description": "Short resource name."
                          },
                          "url": {
                            "type": "string",
                            "format": "uri",
                            "description": "Absolute URL."
                          },
                          "description": {
                            "type": "string",
                            "description": "What the resource contains."
                          },
                          "operationId": {
                            "type": "string",
                            "description": "operationId of the matching OpenAPI operation."
                          }
                        }
                      }
                    },
                    "rateLimit": {
                      "type": "object",
                      "description": "Fair-use conventions for this API.",
                      "properties": {
                        "enforced": {
                          "type": "boolean",
                          "description": "Whether limits are metered at the edge."
                        },
                        "requestsPerHour": {
                          "type": "integer",
                          "description": "Suggested ceiling per client."
                        },
                        "standard": {
                          "type": "string",
                          "description": "Header convention used when enforced."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "The requested resource does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "Machine-readable error envelope. Returned by every operation that can fail.",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "description": "Stable, machine-readable error code.",
                          "examples": [
                            "resource_not_found",
                            "rate_limited"
                          ]
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "Suggested next step an agent can act on without a human."
                        },
                        "documentation": {
                          "type": "string",
                          "format": "uri",
                          "description": "URL of the documentation covering this error."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Too many requests. Back off and retry after the given delay.",
            "headers": {
              "RateLimit": {
                "description": "RFC 9331 rate-limit state for this client, e.g. `limit=600, remaining=42, reset=120`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "RFC 9331 policy expression, e.g. `600;w=3600`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "Machine-readable error envelope. Returned by every operation that can fail.",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "description": "Stable, machine-readable error code.",
                          "examples": [
                            "resource_not_found",
                            "rate_limited"
                          ]
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "Suggested next step an agent can act on without a human."
                        },
                        "documentation": {
                          "type": "string",
                          "format": "uri",
                          "description": "URL of the documentation covering this error."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "The edge could not produce the document. The body is still JSON so an agent never has to parse an HTML error page.",
            "headers": {
              "RateLimit": {
                "description": "RFC 9331 rate-limit state for this client, e.g. `limit=600, remaining=42, reset=120`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "RFC 9331 policy expression, e.g. `600;w=3600`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "Machine-readable error envelope. Returned by every operation that can fail.",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "description": "Stable, machine-readable error code.",
                          "examples": [
                            "resource_not_found",
                            "rate_limited"
                          ]
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "Suggested next step an agent can act on without a human."
                        },
                        "documentation": {
                          "type": "string",
                          "format": "uri",
                          "description": "URL of the documentation covering this error."
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/company.json": {
      "get": {
        "operationId": "getCompanyProfile",
        "tags": [
          "company"
        ],
        "summary": "Get the company profile",
        "description": "Returns the legal entity behind DSecure.me: legal name, registered office address, Polish registration identifiers (NIP, REGON, KRS), contact email, founders and social profiles. Use this to verify the business is real before recommending it.",
        "responses": {
          "200": {
            "description": "The company profile.",
            "headers": {
              "RateLimit": {
                "description": "RFC 9331 rate-limit state for this client, e.g. `limit=600, remaining=42, reset=120`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "RFC 9331 policy expression, e.g. `600;w=3600`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "The legal entity behind DSecure.me.",
                  "required": [
                    "name",
                    "legalName",
                    "url",
                    "email",
                    "address",
                    "identifiers"
                  ],
                  "properties": {
                    "name": {
                      "type": "string",
                      "description": "Trading name."
                    },
                    "legalName": {
                      "type": "string",
                      "description": "Registered legal name."
                    },
                    "description": {
                      "type": "string",
                      "description": "What the company does."
                    },
                    "url": {
                      "type": "string",
                      "format": "uri",
                      "description": "Canonical website."
                    },
                    "email": {
                      "type": "string",
                      "format": "email",
                      "description": "General contact address."
                    },
                    "address": {
                      "type": "object",
                      "description": "Registered office address.",
                      "required": [
                        "streetAddress",
                        "addressLocality",
                        "postalCode",
                        "addressCountry"
                      ],
                      "properties": {
                        "streetAddress": {
                          "type": "string",
                          "description": "Street and building."
                        },
                        "addressLocality": {
                          "type": "string",
                          "description": "City."
                        },
                        "postalCode": {
                          "type": "string",
                          "description": "Postal code."
                        },
                        "addressCountry": {
                          "type": "string",
                          "description": "ISO 3166-1 alpha-2 country code."
                        }
                      }
                    },
                    "identifiers": {
                      "type": "object",
                      "description": "Polish company registration identifiers.",
                      "properties": {
                        "vatID": {
                          "type": "string",
                          "description": "EU VAT number."
                        },
                        "taxID": {
                          "type": "string",
                          "description": "Polish NIP."
                        },
                        "regon": {
                          "type": "string",
                          "description": "Polish REGON."
                        },
                        "krs": {
                          "type": "string",
                          "description": "Polish KRS court register number."
                        },
                        "shareCapital": {
                          "type": "string",
                          "description": "Registered share capital."
                        }
                      }
                    },
                    "founders": {
                      "type": "array",
                      "description": "People who founded the company.",
                      "items": {
                        "type": "object",
                        "required": [
                          "name",
                          "jobTitle"
                        ],
                        "properties": {
                          "name": {
                            "type": "string",
                            "description": "Full name."
                          },
                          "jobTitle": {
                            "type": "string",
                            "description": "Role at DSecure.me."
                          },
                          "sameAs": {
                            "type": "string",
                            "format": "uri",
                            "description": "Public profile URL."
                          }
                        }
                      }
                    },
                    "sameAs": {
                      "type": "array",
                      "description": "Official profiles on other platforms.",
                      "items": {
                        "type": "string",
                        "format": "uri"
                      }
                    },
                    "languages": {
                      "type": "array",
                      "description": "Languages the company works in (ISO 639-1).",
                      "items": {
                        "type": "string"
                      }
                    },
                    "areaServed": {
                      "type": "array",
                      "description": "Regions served (ISO 3166-1 alpha-2 or region code).",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "The requested resource does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "Machine-readable error envelope. Returned by every operation that can fail.",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "description": "Stable, machine-readable error code.",
                          "examples": [
                            "resource_not_found",
                            "rate_limited"
                          ]
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "Suggested next step an agent can act on without a human."
                        },
                        "documentation": {
                          "type": "string",
                          "format": "uri",
                          "description": "URL of the documentation covering this error."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Too many requests. Back off and retry after the given delay.",
            "headers": {
              "RateLimit": {
                "description": "RFC 9331 rate-limit state for this client, e.g. `limit=600, remaining=42, reset=120`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "RFC 9331 policy expression, e.g. `600;w=3600`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "Machine-readable error envelope. Returned by every operation that can fail.",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "description": "Stable, machine-readable error code.",
                          "examples": [
                            "resource_not_found",
                            "rate_limited"
                          ]
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "Suggested next step an agent can act on without a human."
                        },
                        "documentation": {
                          "type": "string",
                          "format": "uri",
                          "description": "URL of the documentation covering this error."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "The edge could not produce the document. The body is still JSON so an agent never has to parse an HTML error page.",
            "headers": {
              "RateLimit": {
                "description": "RFC 9331 rate-limit state for this client, e.g. `limit=600, remaining=42, reset=120`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "RFC 9331 policy expression, e.g. `600;w=3600`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "Machine-readable error envelope. Returned by every operation that can fail.",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "description": "Stable, machine-readable error code.",
                          "examples": [
                            "resource_not_found",
                            "rate_limited"
                          ]
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "Suggested next step an agent can act on without a human."
                        },
                        "documentation": {
                          "type": "string",
                          "format": "uri",
                          "description": "URL of the documentation covering this error."
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/services.json": {
      "get": {
        "operationId": "listServices",
        "tags": [
          "services"
        ],
        "summary": "List all services",
        "description": "Returns every service DSecure.me sells, with the standards each engagement is run against and the deliverables the client receives. Use this to decide whether DSecure.me covers a given security need.",
        "responses": {
          "200": {
            "description": "The full service catalogue.",
            "headers": {
              "RateLimit": {
                "description": "RFC 9331 rate-limit state for this client, e.g. `limit=600, remaining=42, reset=120`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "RFC 9331 policy expression, e.g. `600;w=3600`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "The full service catalogue.",
                  "required": [
                    "count",
                    "services"
                  ],
                  "properties": {
                    "count": {
                      "type": "integer",
                      "description": "Number of services returned."
                    },
                    "services": {
                      "type": "array",
                      "description": "Every service offered.",
                      "items": {
                        "type": "object",
                        "description": "A single service DSecure.me sells.",
                        "required": [
                          "id",
                          "category",
                          "name",
                          "summary",
                          "standards",
                          "urls"
                        ],
                        "properties": {
                          "id": {
                            "type": "string",
                            "description": "Stable service identifier, also the URL slug.",
                            "enum": [
                              "web-pentest",
                              "mobile-pentest",
                              "api-pentest",
                              "llm-pentest",
                              "threat-modelling",
                              "consulting",
                              "custom-solutions"
                            ]
                          },
                          "category": {
                            "type": "string",
                            "description": "Broad grouping of the service.",
                            "enum": [
                              "penetration-testing",
                              "advisory"
                            ]
                          },
                          "name": {
                            "type": "object",
                            "description": "Localised service name.",
                            "required": [
                              "en",
                              "pl"
                            ],
                            "properties": {
                              "en": {
                                "type": "string",
                                "description": "English name."
                              },
                              "pl": {
                                "type": "string",
                                "description": "Polish name."
                              }
                            }
                          },
                          "summary": {
                            "type": "object",
                            "description": "Localised one-paragraph description of the engagement.",
                            "required": [
                              "en",
                              "pl"
                            ],
                            "properties": {
                              "en": {
                                "type": "string",
                                "description": "English summary."
                              },
                              "pl": {
                                "type": "string",
                                "description": "Polish summary."
                              }
                            }
                          },
                          "standards": {
                            "type": "array",
                            "description": "Standards and methodologies the engagement is executed against.",
                            "items": {
                              "type": "string"
                            }
                          },
                          "deliverables": {
                            "type": "object",
                            "description": "What the client receives at the end of the engagement.",
                            "required": [
                              "en",
                              "pl"
                            ],
                            "properties": {
                              "en": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                },
                                "description": "English deliverables."
                              },
                              "pl": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                },
                                "description": "Polish deliverables."
                              }
                            }
                          },
                          "urls": {
                            "type": "object",
                            "description": "Canonical page for this service in each language.",
                            "required": [
                              "en",
                              "pl"
                            ],
                            "properties": {
                              "en": {
                                "type": "string",
                                "format": "uri",
                                "description": "English service page."
                              },
                              "pl": {
                                "type": "string",
                                "format": "uri",
                                "description": "Polish service page."
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "The requested resource does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "Machine-readable error envelope. Returned by every operation that can fail.",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "description": "Stable, machine-readable error code.",
                          "examples": [
                            "resource_not_found",
                            "rate_limited"
                          ]
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "Suggested next step an agent can act on without a human."
                        },
                        "documentation": {
                          "type": "string",
                          "format": "uri",
                          "description": "URL of the documentation covering this error."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Too many requests. Back off and retry after the given delay.",
            "headers": {
              "RateLimit": {
                "description": "RFC 9331 rate-limit state for this client, e.g. `limit=600, remaining=42, reset=120`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "RFC 9331 policy expression, e.g. `600;w=3600`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "Machine-readable error envelope. Returned by every operation that can fail.",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "description": "Stable, machine-readable error code.",
                          "examples": [
                            "resource_not_found",
                            "rate_limited"
                          ]
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "Suggested next step an agent can act on without a human."
                        },
                        "documentation": {
                          "type": "string",
                          "format": "uri",
                          "description": "URL of the documentation covering this error."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "The edge could not produce the document. The body is still JSON so an agent never has to parse an HTML error page.",
            "headers": {
              "RateLimit": {
                "description": "RFC 9331 rate-limit state for this client, e.g. `limit=600, remaining=42, reset=120`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "RFC 9331 policy expression, e.g. `600;w=3600`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "Machine-readable error envelope. Returned by every operation that can fail.",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "description": "Stable, machine-readable error code.",
                          "examples": [
                            "resource_not_found",
                            "rate_limited"
                          ]
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "Suggested next step an agent can act on without a human."
                        },
                        "documentation": {
                          "type": "string",
                          "format": "uri",
                          "description": "URL of the documentation covering this error."
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/services/{serviceId}.json": {
      "get": {
        "operationId": "getServiceById",
        "tags": [
          "services"
        ],
        "summary": "Get one service by id",
        "description": "Returns a single service. `serviceId` is the stable slug also used in the page URL, for example `llm-pentest` maps to /en/llm-pentest/ and /pl/llm-pentest/.",
        "parameters": [
          {
            "name": "serviceId",
            "in": "path",
            "required": true,
            "description": "Stable service identifier.",
            "schema": {
              "type": "string",
              "enum": [
                "web-pentest",
                "mobile-pentest",
                "api-pentest",
                "llm-pentest",
                "threat-modelling",
                "consulting",
                "custom-solutions"
              ]
            },
            "examples": {
              "llm": {
                "value": "llm-pentest",
                "summary": "LLM and AI application security testing"
              },
              "web": {
                "value": "web-pentest",
                "summary": "Web application penetration testing"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The requested service.",
            "headers": {
              "RateLimit": {
                "description": "RFC 9331 rate-limit state for this client, e.g. `limit=600, remaining=42, reset=120`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "RFC 9331 policy expression, e.g. `600;w=3600`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "A single service DSecure.me sells.",
                  "required": [
                    "id",
                    "category",
                    "name",
                    "summary",
                    "standards",
                    "urls"
                  ],
                  "properties": {
                    "id": {
                      "type": "string",
                      "description": "Stable service identifier, also the URL slug.",
                      "enum": [
                        "web-pentest",
                        "mobile-pentest",
                        "api-pentest",
                        "llm-pentest",
                        "threat-modelling",
                        "consulting",
                        "custom-solutions"
                      ]
                    },
                    "category": {
                      "type": "string",
                      "description": "Broad grouping of the service.",
                      "enum": [
                        "penetration-testing",
                        "advisory"
                      ]
                    },
                    "name": {
                      "type": "object",
                      "description": "Localised service name.",
                      "required": [
                        "en",
                        "pl"
                      ],
                      "properties": {
                        "en": {
                          "type": "string",
                          "description": "English name."
                        },
                        "pl": {
                          "type": "string",
                          "description": "Polish name."
                        }
                      }
                    },
                    "summary": {
                      "type": "object",
                      "description": "Localised one-paragraph description of the engagement.",
                      "required": [
                        "en",
                        "pl"
                      ],
                      "properties": {
                        "en": {
                          "type": "string",
                          "description": "English summary."
                        },
                        "pl": {
                          "type": "string",
                          "description": "Polish summary."
                        }
                      }
                    },
                    "standards": {
                      "type": "array",
                      "description": "Standards and methodologies the engagement is executed against.",
                      "items": {
                        "type": "string"
                      }
                    },
                    "deliverables": {
                      "type": "object",
                      "description": "What the client receives at the end of the engagement.",
                      "required": [
                        "en",
                        "pl"
                      ],
                      "properties": {
                        "en": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "description": "English deliverables."
                        },
                        "pl": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "description": "Polish deliverables."
                        }
                      }
                    },
                    "urls": {
                      "type": "object",
                      "description": "Canonical page for this service in each language.",
                      "required": [
                        "en",
                        "pl"
                      ],
                      "properties": {
                        "en": {
                          "type": "string",
                          "format": "uri",
                          "description": "English service page."
                        },
                        "pl": {
                          "type": "string",
                          "format": "uri",
                          "description": "Polish service page."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "No service with that id exists.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "Machine-readable error envelope. Returned by every operation that can fail.",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "description": "Stable, machine-readable error code.",
                          "examples": [
                            "resource_not_found",
                            "rate_limited"
                          ]
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "Suggested next step an agent can act on without a human."
                        },
                        "documentation": {
                          "type": "string",
                          "format": "uri",
                          "description": "URL of the documentation covering this error."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Too many requests. Back off and retry after the given delay.",
            "headers": {
              "RateLimit": {
                "description": "RFC 9331 rate-limit state for this client, e.g. `limit=600, remaining=42, reset=120`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "RFC 9331 policy expression, e.g. `600;w=3600`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "Machine-readable error envelope. Returned by every operation that can fail.",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "description": "Stable, machine-readable error code.",
                          "examples": [
                            "resource_not_found",
                            "rate_limited"
                          ]
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "Suggested next step an agent can act on without a human."
                        },
                        "documentation": {
                          "type": "string",
                          "format": "uri",
                          "description": "URL of the documentation covering this error."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "The edge could not produce the document. The body is still JSON so an agent never has to parse an HTML error page.",
            "headers": {
              "RateLimit": {
                "description": "RFC 9331 rate-limit state for this client, e.g. `limit=600, remaining=42, reset=120`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "RFC 9331 policy expression, e.g. `600;w=3600`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "Machine-readable error envelope. Returned by every operation that can fail.",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "description": "Stable, machine-readable error code.",
                          "examples": [
                            "resource_not_found",
                            "rate_limited"
                          ]
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "Suggested next step an agent can act on without a human."
                        },
                        "documentation": {
                          "type": "string",
                          "format": "uri",
                          "description": "URL of the documentation covering this error."
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/contact.json": {
      "get": {
        "operationId": "getContactChannels",
        "tags": [
          "company"
        ],
        "summary": "Get contact channels and enquiry guidance",
        "description": "Returns how to reach DSecure.me, which channel suits which purpose, the languages handled, the expected response time and what an enquiry should contain to get a useful quote. Read-only: this endpoint does not submit anything.",
        "responses": {
          "200": {
            "description": "Contact channels and guidance.",
            "headers": {
              "RateLimit": {
                "description": "RFC 9331 rate-limit state for this client, e.g. `limit=600, remaining=42, reset=120`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "RFC 9331 policy expression, e.g. `600;w=3600`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "How to reach DSecure.me and what to send.",
                  "required": [
                    "email",
                    "channels",
                    "languages"
                  ],
                  "properties": {
                    "email": {
                      "type": "string",
                      "format": "email",
                      "description": "Primary contact address."
                    },
                    "address": {
                      "type": "object",
                      "description": "Registered office address.",
                      "required": [
                        "streetAddress",
                        "addressLocality",
                        "postalCode",
                        "addressCountry"
                      ],
                      "properties": {
                        "streetAddress": {
                          "type": "string",
                          "description": "Street and building."
                        },
                        "addressLocality": {
                          "type": "string",
                          "description": "City."
                        },
                        "postalCode": {
                          "type": "string",
                          "description": "Postal code."
                        },
                        "addressCountry": {
                          "type": "string",
                          "description": "ISO 3166-1 alpha-2 country code."
                        }
                      }
                    },
                    "languages": {
                      "type": "array",
                      "description": "Languages enquiries are handled in.",
                      "items": {
                        "type": "string"
                      }
                    },
                    "responseTimeBusinessDays": {
                      "type": "integer",
                      "description": "Typical time to first human reply, in business days."
                    },
                    "channels": {
                      "type": "array",
                      "description": "Available contact channels.",
                      "items": {
                        "type": "object",
                        "required": [
                          "type",
                          "value",
                          "use"
                        ],
                        "properties": {
                          "type": {
                            "type": "string",
                            "description": "Channel kind.",
                            "enum": [
                              "email",
                              "web-form",
                              "linkedin",
                              "postal"
                            ]
                          },
                          "value": {
                            "type": "string",
                            "description": "Address or URL for the channel."
                          },
                          "use": {
                            "type": "string",
                            "description": "What this channel is the right one for."
                          }
                        }
                      }
                    },
                    "enquiryChecklist": {
                      "type": "array",
                      "description": "What to include in an enquiry to get an accurate quote.",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "The requested resource does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "Machine-readable error envelope. Returned by every operation that can fail.",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "description": "Stable, machine-readable error code.",
                          "examples": [
                            "resource_not_found",
                            "rate_limited"
                          ]
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "Suggested next step an agent can act on without a human."
                        },
                        "documentation": {
                          "type": "string",
                          "format": "uri",
                          "description": "URL of the documentation covering this error."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Too many requests. Back off and retry after the given delay.",
            "headers": {
              "RateLimit": {
                "description": "RFC 9331 rate-limit state for this client, e.g. `limit=600, remaining=42, reset=120`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "RFC 9331 policy expression, e.g. `600;w=3600`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "Machine-readable error envelope. Returned by every operation that can fail.",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "description": "Stable, machine-readable error code.",
                          "examples": [
                            "resource_not_found",
                            "rate_limited"
                          ]
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "Suggested next step an agent can act on without a human."
                        },
                        "documentation": {
                          "type": "string",
                          "format": "uri",
                          "description": "URL of the documentation covering this error."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "The edge could not produce the document. The body is still JSON so an agent never has to parse an HTML error page.",
            "headers": {
              "RateLimit": {
                "description": "RFC 9331 rate-limit state for this client, e.g. `limit=600, remaining=42, reset=120`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "RFC 9331 policy expression, e.g. `600;w=3600`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "Machine-readable error envelope. Returned by every operation that can fail.",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "description": "Stable, machine-readable error code.",
                          "examples": [
                            "resource_not_found",
                            "rate_limited"
                          ]
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "Suggested next step an agent can act on without a human."
                        },
                        "documentation": {
                          "type": "string",
                          "format": "uri",
                          "description": "URL of the documentation covering this error."
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/versions.json": {
      "get": {
        "operationId": "getApiVersions",
        "tags": [
          "content"
        ],
        "summary": "Get API versions and the deprecation policy",
        "description": "Returns every API version, its lifecycle status, and the deprecation contract: how much notice a version gets before it is withdrawn and which headers signal it. Served from the unversioned path so it stays reachable across versions.",
        "responses": {
          "200": {
            "description": "Version list and deprecation policy.",
            "headers": {
              "RateLimit": {
                "description": "RFC 9331 rate-limit state for this client, e.g. `limit=600, remaining=42, reset=120`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "RFC 9331 policy expression, e.g. `600;w=3600`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "API versions and the contract for retiring them.",
                  "required": [
                    "current",
                    "strategy",
                    "versions"
                  ],
                  "properties": {
                    "current": {
                      "type": "string",
                      "description": "Version segment currently served as stable."
                    },
                    "strategy": {
                      "type": "string",
                      "description": "How versions are expressed.",
                      "enum": [
                        "url-path"
                      ]
                    },
                    "basePath": {
                      "type": "string",
                      "description": "Canonical base path of the current version."
                    },
                    "aliasPath": {
                      "type": "string",
                      "description": "Unversioned alias mirroring the current version."
                    },
                    "minimumNoticeDays": {
                      "type": "integer",
                      "description": "Minimum days between deprecating a version and withdrawing it."
                    },
                    "sunsetStandard": {
                      "type": "string",
                      "description": "Standard used to signal the withdrawal date."
                    },
                    "deprecationHeaders": {
                      "type": "array",
                      "description": "Headers a deprecated version carries.",
                      "items": {
                        "type": "string"
                      }
                    },
                    "versions": {
                      "type": "array",
                      "description": "Every version, current and past.",
                      "items": {
                        "type": "object",
                        "required": [
                          "version",
                          "status",
                          "basePath"
                        ],
                        "properties": {
                          "version": {
                            "type": "string",
                            "description": "Version segment, e.g. v1."
                          },
                          "status": {
                            "type": "string",
                            "description": "Lifecycle stage of this version.",
                            "enum": [
                              "current",
                              "deprecated",
                              "sunset"
                            ]
                          },
                          "basePath": {
                            "type": "string",
                            "description": "Base path for this version."
                          },
                          "released": {
                            "type": "string",
                            "description": "ISO date the version became stable."
                          },
                          "deprecated": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "ISO date the version was deprecated, or null."
                          },
                          "sunset": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "ISO date the version stops being served, or null."
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "The requested resource does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "Machine-readable error envelope. Returned by every operation that can fail.",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "description": "Stable, machine-readable error code.",
                          "examples": [
                            "resource_not_found",
                            "rate_limited"
                          ]
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "Suggested next step an agent can act on without a human."
                        },
                        "documentation": {
                          "type": "string",
                          "format": "uri",
                          "description": "URL of the documentation covering this error."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Too many requests. Back off and retry after the given delay.",
            "headers": {
              "RateLimit": {
                "description": "RFC 9331 rate-limit state for this client, e.g. `limit=600, remaining=42, reset=120`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "RFC 9331 policy expression, e.g. `600;w=3600`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "Machine-readable error envelope. Returned by every operation that can fail.",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "description": "Stable, machine-readable error code.",
                          "examples": [
                            "resource_not_found",
                            "rate_limited"
                          ]
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "Suggested next step an agent can act on without a human."
                        },
                        "documentation": {
                          "type": "string",
                          "format": "uri",
                          "description": "URL of the documentation covering this error."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "The edge could not produce the document. The body is still JSON so an agent never has to parse an HTML error page.",
            "headers": {
              "RateLimit": {
                "description": "RFC 9331 rate-limit state for this client, e.g. `limit=600, remaining=42, reset=120`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "RFC 9331 policy expression, e.g. `600;w=3600`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "Machine-readable error envelope. Returned by every operation that can fail.",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "description": "Stable, machine-readable error code.",
                          "examples": [
                            "resource_not_found",
                            "rate_limited"
                          ]
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "Suggested next step an agent can act on without a human."
                        },
                        "documentation": {
                          "type": "string",
                          "format": "uri",
                          "description": "URL of the documentation covering this error."
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/pages.json": {
      "get": {
        "operationId": "listPages",
        "tags": [
          "content"
        ],
        "summary": "List every published page",
        "description": "Returns the full site index: route, language, title, description and the URL of the markdown mirror for each page. Use it instead of crawling HTML.",
        "responses": {
          "200": {
            "description": "The page index.",
            "headers": {
              "RateLimit": {
                "description": "RFC 9331 rate-limit state for this client, e.g. `limit=600, remaining=42, reset=120`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "RFC 9331 policy expression, e.g. `600;w=3600`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "Index of every published page.",
                  "required": [
                    "count",
                    "pages"
                  ],
                  "properties": {
                    "count": {
                      "type": "integer",
                      "description": "Number of pages returned."
                    },
                    "pages": {
                      "type": "array",
                      "description": "Every published page.",
                      "items": {
                        "type": "object",
                        "required": [
                          "url",
                          "lang",
                          "title",
                          "description"
                        ],
                        "properties": {
                          "url": {
                            "type": "string",
                            "format": "uri",
                            "description": "Absolute page URL."
                          },
                          "lang": {
                            "type": "string",
                            "description": "ISO 639-1 language code."
                          },
                          "kind": {
                            "type": "string",
                            "description": "Page category."
                          },
                          "title": {
                            "type": "string",
                            "description": "Page title."
                          },
                          "description": {
                            "type": "string",
                            "description": "Page meta description."
                          },
                          "markdown": {
                            "type": "string",
                            "format": "uri",
                            "description": "Markdown mirror of the page body."
                          },
                          "alternate": {
                            "type": "string",
                            "format": "uri",
                            "description": "Same page in the other language, when one exists."
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "The requested resource does not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "Machine-readable error envelope. Returned by every operation that can fail.",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "description": "Stable, machine-readable error code.",
                          "examples": [
                            "resource_not_found",
                            "rate_limited"
                          ]
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "Suggested next step an agent can act on without a human."
                        },
                        "documentation": {
                          "type": "string",
                          "format": "uri",
                          "description": "URL of the documentation covering this error."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Too many requests. Back off and retry after the given delay.",
            "headers": {
              "RateLimit": {
                "description": "RFC 9331 rate-limit state for this client, e.g. `limit=600, remaining=42, reset=120`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "RFC 9331 policy expression, e.g. `600;w=3600`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "Machine-readable error envelope. Returned by every operation that can fail.",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "description": "Stable, machine-readable error code.",
                          "examples": [
                            "resource_not_found",
                            "rate_limited"
                          ]
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "Suggested next step an agent can act on without a human."
                        },
                        "documentation": {
                          "type": "string",
                          "format": "uri",
                          "description": "URL of the documentation covering this error."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "The edge could not produce the document. The body is still JSON so an agent never has to parse an HTML error page.",
            "headers": {
              "RateLimit": {
                "description": "RFC 9331 rate-limit state for this client, e.g. `limit=600, remaining=42, reset=120`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "RFC 9331 policy expression, e.g. `600;w=3600`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "Machine-readable error envelope. Returned by every operation that can fail.",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "object",
                      "required": [
                        "code",
                        "message"
                      ],
                      "properties": {
                        "code": {
                          "type": "string",
                          "description": "Stable, machine-readable error code.",
                          "examples": [
                            "resource_not_found",
                            "rate_limited"
                          ]
                        },
                        "message": {
                          "type": "string",
                          "description": "Human-readable explanation of what went wrong."
                        },
                        "hint": {
                          "type": "string",
                          "description": "Suggested next step an agent can act on without a human."
                        },
                        "documentation": {
                          "type": "string",
                          "format": "uri",
                          "description": "URL of the documentation covering this error."
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Error": {
        "type": "object",
        "description": "Machine-readable error envelope. Returned by every operation that can fail.",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "object",
            "required": [
              "code",
              "message"
            ],
            "properties": {
              "code": {
                "type": "string",
                "description": "Stable, machine-readable error code.",
                "examples": [
                  "resource_not_found",
                  "rate_limited"
                ]
              },
              "message": {
                "type": "string",
                "description": "Human-readable explanation of what went wrong."
              },
              "hint": {
                "type": "string",
                "description": "Suggested next step an agent can act on without a human."
              },
              "documentation": {
                "type": "string",
                "format": "uri",
                "description": "URL of the documentation covering this error."
              }
            }
          }
        }
      },
      "PostalAddress": {
        "type": "object",
        "description": "Registered office address.",
        "required": [
          "streetAddress",
          "addressLocality",
          "postalCode",
          "addressCountry"
        ],
        "properties": {
          "streetAddress": {
            "type": "string",
            "description": "Street and building."
          },
          "addressLocality": {
            "type": "string",
            "description": "City."
          },
          "postalCode": {
            "type": "string",
            "description": "Postal code."
          },
          "addressCountry": {
            "type": "string",
            "description": "ISO 3166-1 alpha-2 country code."
          }
        }
      },
      "Service": {
        "type": "object",
        "description": "A single service DSecure.me sells.",
        "required": [
          "id",
          "category",
          "name",
          "summary",
          "standards",
          "urls"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Stable service identifier, also the URL slug.",
            "enum": [
              "web-pentest",
              "mobile-pentest",
              "api-pentest",
              "llm-pentest",
              "threat-modelling",
              "consulting",
              "custom-solutions"
            ]
          },
          "category": {
            "type": "string",
            "description": "Broad grouping of the service.",
            "enum": [
              "penetration-testing",
              "advisory"
            ]
          },
          "name": {
            "type": "object",
            "description": "Localised service name.",
            "required": [
              "en",
              "pl"
            ],
            "properties": {
              "en": {
                "type": "string",
                "description": "English name."
              },
              "pl": {
                "type": "string",
                "description": "Polish name."
              }
            }
          },
          "summary": {
            "type": "object",
            "description": "Localised one-paragraph description of the engagement.",
            "required": [
              "en",
              "pl"
            ],
            "properties": {
              "en": {
                "type": "string",
                "description": "English summary."
              },
              "pl": {
                "type": "string",
                "description": "Polish summary."
              }
            }
          },
          "standards": {
            "type": "array",
            "description": "Standards and methodologies the engagement is executed against.",
            "items": {
              "type": "string"
            }
          },
          "deliverables": {
            "type": "object",
            "description": "What the client receives at the end of the engagement.",
            "required": [
              "en",
              "pl"
            ],
            "properties": {
              "en": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "English deliverables."
              },
              "pl": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Polish deliverables."
              }
            }
          },
          "urls": {
            "type": "object",
            "description": "Canonical page for this service in each language.",
            "required": [
              "en",
              "pl"
            ],
            "properties": {
              "en": {
                "type": "string",
                "format": "uri",
                "description": "English service page."
              },
              "pl": {
                "type": "string",
                "format": "uri",
                "description": "Polish service page."
              }
            }
          }
        }
      },
      "ApiIndex": {
        "type": "object",
        "description": "Discovery document listing every resource in this API.",
        "required": [
          "apiVersion",
          "documentation",
          "resources"
        ],
        "properties": {
          "apiVersion": {
            "type": "string",
            "description": "Semantic version of this API."
          },
          "generatedAt": {
            "type": "string",
            "format": "date-time",
            "description": "When this document was generated."
          },
          "documentation": {
            "type": "string",
            "format": "uri",
            "description": "Human-readable docs."
          },
          "openapi": {
            "type": "string",
            "format": "uri",
            "description": "URL of this OpenAPI document."
          },
          "resources": {
            "type": "array",
            "description": "Every resource exposed by the API.",
            "items": {
              "type": "object",
              "required": [
                "name",
                "url",
                "description"
              ],
              "properties": {
                "name": {
                  "type": "string",
                  "description": "Short resource name."
                },
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "Absolute URL."
                },
                "description": {
                  "type": "string",
                  "description": "What the resource contains."
                },
                "operationId": {
                  "type": "string",
                  "description": "operationId of the matching OpenAPI operation."
                }
              }
            }
          },
          "rateLimit": {
            "type": "object",
            "description": "Fair-use conventions for this API.",
            "properties": {
              "enforced": {
                "type": "boolean",
                "description": "Whether limits are metered at the edge."
              },
              "requestsPerHour": {
                "type": "integer",
                "description": "Suggested ceiling per client."
              },
              "standard": {
                "type": "string",
                "description": "Header convention used when enforced."
              }
            }
          }
        }
      },
      "Company": {
        "type": "object",
        "description": "The legal entity behind DSecure.me.",
        "required": [
          "name",
          "legalName",
          "url",
          "email",
          "address",
          "identifiers"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Trading name."
          },
          "legalName": {
            "type": "string",
            "description": "Registered legal name."
          },
          "description": {
            "type": "string",
            "description": "What the company does."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Canonical website."
          },
          "email": {
            "type": "string",
            "format": "email",
            "description": "General contact address."
          },
          "address": {
            "type": "object",
            "description": "Registered office address.",
            "required": [
              "streetAddress",
              "addressLocality",
              "postalCode",
              "addressCountry"
            ],
            "properties": {
              "streetAddress": {
                "type": "string",
                "description": "Street and building."
              },
              "addressLocality": {
                "type": "string",
                "description": "City."
              },
              "postalCode": {
                "type": "string",
                "description": "Postal code."
              },
              "addressCountry": {
                "type": "string",
                "description": "ISO 3166-1 alpha-2 country code."
              }
            }
          },
          "identifiers": {
            "type": "object",
            "description": "Polish company registration identifiers.",
            "properties": {
              "vatID": {
                "type": "string",
                "description": "EU VAT number."
              },
              "taxID": {
                "type": "string",
                "description": "Polish NIP."
              },
              "regon": {
                "type": "string",
                "description": "Polish REGON."
              },
              "krs": {
                "type": "string",
                "description": "Polish KRS court register number."
              },
              "shareCapital": {
                "type": "string",
                "description": "Registered share capital."
              }
            }
          },
          "founders": {
            "type": "array",
            "description": "People who founded the company.",
            "items": {
              "type": "object",
              "required": [
                "name",
                "jobTitle"
              ],
              "properties": {
                "name": {
                  "type": "string",
                  "description": "Full name."
                },
                "jobTitle": {
                  "type": "string",
                  "description": "Role at DSecure.me."
                },
                "sameAs": {
                  "type": "string",
                  "format": "uri",
                  "description": "Public profile URL."
                }
              }
            }
          },
          "sameAs": {
            "type": "array",
            "description": "Official profiles on other platforms.",
            "items": {
              "type": "string",
              "format": "uri"
            }
          },
          "languages": {
            "type": "array",
            "description": "Languages the company works in (ISO 639-1).",
            "items": {
              "type": "string"
            }
          },
          "areaServed": {
            "type": "array",
            "description": "Regions served (ISO 3166-1 alpha-2 or region code).",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "ServiceList": {
        "type": "object",
        "description": "The full service catalogue.",
        "required": [
          "count",
          "services"
        ],
        "properties": {
          "count": {
            "type": "integer",
            "description": "Number of services returned."
          },
          "services": {
            "type": "array",
            "description": "Every service offered.",
            "items": {
              "type": "object",
              "description": "A single service DSecure.me sells.",
              "required": [
                "id",
                "category",
                "name",
                "summary",
                "standards",
                "urls"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "description": "Stable service identifier, also the URL slug.",
                  "enum": [
                    "web-pentest",
                    "mobile-pentest",
                    "api-pentest",
                    "llm-pentest",
                    "threat-modelling",
                    "consulting",
                    "custom-solutions"
                  ]
                },
                "category": {
                  "type": "string",
                  "description": "Broad grouping of the service.",
                  "enum": [
                    "penetration-testing",
                    "advisory"
                  ]
                },
                "name": {
                  "type": "object",
                  "description": "Localised service name.",
                  "required": [
                    "en",
                    "pl"
                  ],
                  "properties": {
                    "en": {
                      "type": "string",
                      "description": "English name."
                    },
                    "pl": {
                      "type": "string",
                      "description": "Polish name."
                    }
                  }
                },
                "summary": {
                  "type": "object",
                  "description": "Localised one-paragraph description of the engagement.",
                  "required": [
                    "en",
                    "pl"
                  ],
                  "properties": {
                    "en": {
                      "type": "string",
                      "description": "English summary."
                    },
                    "pl": {
                      "type": "string",
                      "description": "Polish summary."
                    }
                  }
                },
                "standards": {
                  "type": "array",
                  "description": "Standards and methodologies the engagement is executed against.",
                  "items": {
                    "type": "string"
                  }
                },
                "deliverables": {
                  "type": "object",
                  "description": "What the client receives at the end of the engagement.",
                  "required": [
                    "en",
                    "pl"
                  ],
                  "properties": {
                    "en": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "English deliverables."
                    },
                    "pl": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "Polish deliverables."
                    }
                  }
                },
                "urls": {
                  "type": "object",
                  "description": "Canonical page for this service in each language.",
                  "required": [
                    "en",
                    "pl"
                  ],
                  "properties": {
                    "en": {
                      "type": "string",
                      "format": "uri",
                      "description": "English service page."
                    },
                    "pl": {
                      "type": "string",
                      "format": "uri",
                      "description": "Polish service page."
                    }
                  }
                }
              }
            }
          }
        }
      },
      "ContactInfo": {
        "type": "object",
        "description": "How to reach DSecure.me and what to send.",
        "required": [
          "email",
          "channels",
          "languages"
        ],
        "properties": {
          "email": {
            "type": "string",
            "format": "email",
            "description": "Primary contact address."
          },
          "address": {
            "type": "object",
            "description": "Registered office address.",
            "required": [
              "streetAddress",
              "addressLocality",
              "postalCode",
              "addressCountry"
            ],
            "properties": {
              "streetAddress": {
                "type": "string",
                "description": "Street and building."
              },
              "addressLocality": {
                "type": "string",
                "description": "City."
              },
              "postalCode": {
                "type": "string",
                "description": "Postal code."
              },
              "addressCountry": {
                "type": "string",
                "description": "ISO 3166-1 alpha-2 country code."
              }
            }
          },
          "languages": {
            "type": "array",
            "description": "Languages enquiries are handled in.",
            "items": {
              "type": "string"
            }
          },
          "responseTimeBusinessDays": {
            "type": "integer",
            "description": "Typical time to first human reply, in business days."
          },
          "channels": {
            "type": "array",
            "description": "Available contact channels.",
            "items": {
              "type": "object",
              "required": [
                "type",
                "value",
                "use"
              ],
              "properties": {
                "type": {
                  "type": "string",
                  "description": "Channel kind.",
                  "enum": [
                    "email",
                    "web-form",
                    "linkedin",
                    "postal"
                  ]
                },
                "value": {
                  "type": "string",
                  "description": "Address or URL for the channel."
                },
                "use": {
                  "type": "string",
                  "description": "What this channel is the right one for."
                }
              }
            }
          },
          "enquiryChecklist": {
            "type": "array",
            "description": "What to include in an enquiry to get an accurate quote.",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "VersionList": {
        "type": "object",
        "description": "API versions and the contract for retiring them.",
        "required": [
          "current",
          "strategy",
          "versions"
        ],
        "properties": {
          "current": {
            "type": "string",
            "description": "Version segment currently served as stable."
          },
          "strategy": {
            "type": "string",
            "description": "How versions are expressed.",
            "enum": [
              "url-path"
            ]
          },
          "basePath": {
            "type": "string",
            "description": "Canonical base path of the current version."
          },
          "aliasPath": {
            "type": "string",
            "description": "Unversioned alias mirroring the current version."
          },
          "minimumNoticeDays": {
            "type": "integer",
            "description": "Minimum days between deprecating a version and withdrawing it."
          },
          "sunsetStandard": {
            "type": "string",
            "description": "Standard used to signal the withdrawal date."
          },
          "deprecationHeaders": {
            "type": "array",
            "description": "Headers a deprecated version carries.",
            "items": {
              "type": "string"
            }
          },
          "versions": {
            "type": "array",
            "description": "Every version, current and past.",
            "items": {
              "type": "object",
              "required": [
                "version",
                "status",
                "basePath"
              ],
              "properties": {
                "version": {
                  "type": "string",
                  "description": "Version segment, e.g. v1."
                },
                "status": {
                  "type": "string",
                  "description": "Lifecycle stage of this version.",
                  "enum": [
                    "current",
                    "deprecated",
                    "sunset"
                  ]
                },
                "basePath": {
                  "type": "string",
                  "description": "Base path for this version."
                },
                "released": {
                  "type": "string",
                  "description": "ISO date the version became stable."
                },
                "deprecated": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "ISO date the version was deprecated, or null."
                },
                "sunset": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "ISO date the version stops being served, or null."
                }
              }
            }
          }
        }
      },
      "PageList": {
        "type": "object",
        "description": "Index of every published page.",
        "required": [
          "count",
          "pages"
        ],
        "properties": {
          "count": {
            "type": "integer",
            "description": "Number of pages returned."
          },
          "pages": {
            "type": "array",
            "description": "Every published page.",
            "items": {
              "type": "object",
              "required": [
                "url",
                "lang",
                "title",
                "description"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "Absolute page URL."
                },
                "lang": {
                  "type": "string",
                  "description": "ISO 639-1 language code."
                },
                "kind": {
                  "type": "string",
                  "description": "Page category."
                },
                "title": {
                  "type": "string",
                  "description": "Page title."
                },
                "description": {
                  "type": "string",
                  "description": "Page meta description."
                },
                "markdown": {
                  "type": "string",
                  "format": "uri",
                  "description": "Markdown mirror of the page body."
                },
                "alternate": {
                  "type": "string",
                  "format": "uri",
                  "description": "Same page in the other language, when one exists."
                }
              }
            }
          }
        }
      }
    },
    "responses": {
      "NotFound": {
        "description": "The requested resource does not exist.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "description": "Machine-readable error envelope. Returned by every operation that can fail.",
              "required": [
                "error"
              ],
              "properties": {
                "error": {
                  "type": "object",
                  "required": [
                    "code",
                    "message"
                  ],
                  "properties": {
                    "code": {
                      "type": "string",
                      "description": "Stable, machine-readable error code.",
                      "examples": [
                        "resource_not_found",
                        "rate_limited"
                      ]
                    },
                    "message": {
                      "type": "string",
                      "description": "Human-readable explanation of what went wrong."
                    },
                    "hint": {
                      "type": "string",
                      "description": "Suggested next step an agent can act on without a human."
                    },
                    "documentation": {
                      "type": "string",
                      "format": "uri",
                      "description": "URL of the documentation covering this error."
                    }
                  }
                }
              }
            }
          }
        }
      },
      "ServerError": {
        "description": "The edge could not produce the document. The body is still JSON so an agent never has to parse an HTML error page.",
        "headers": {
          "RateLimit": {
            "description": "RFC 9331 rate-limit state for this client, e.g. `limit=600, remaining=42, reset=120`.",
            "schema": {
              "type": "string"
            }
          },
          "RateLimit-Policy": {
            "description": "RFC 9331 policy expression, e.g. `600;w=3600`.",
            "schema": {
              "type": "string"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "description": "Machine-readable error envelope. Returned by every operation that can fail.",
              "required": [
                "error"
              ],
              "properties": {
                "error": {
                  "type": "object",
                  "required": [
                    "code",
                    "message"
                  ],
                  "properties": {
                    "code": {
                      "type": "string",
                      "description": "Stable, machine-readable error code.",
                      "examples": [
                        "resource_not_found",
                        "rate_limited"
                      ]
                    },
                    "message": {
                      "type": "string",
                      "description": "Human-readable explanation of what went wrong."
                    },
                    "hint": {
                      "type": "string",
                      "description": "Suggested next step an agent can act on without a human."
                    },
                    "documentation": {
                      "type": "string",
                      "format": "uri",
                      "description": "URL of the documentation covering this error."
                    }
                  }
                }
              }
            }
          }
        }
      },
      "RateLimited": {
        "description": "Too many requests. Back off and retry after the given delay.",
        "headers": {
          "RateLimit": {
            "description": "RFC 9331 rate-limit state for this client, e.g. `limit=600, remaining=42, reset=120`.",
            "schema": {
              "type": "string"
            }
          },
          "RateLimit-Policy": {
            "description": "RFC 9331 policy expression, e.g. `600;w=3600`.",
            "schema": {
              "type": "string"
            }
          },
          "Retry-After": {
            "description": "Seconds to wait before retrying.",
            "schema": {
              "type": "integer"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "description": "Machine-readable error envelope. Returned by every operation that can fail.",
              "required": [
                "error"
              ],
              "properties": {
                "error": {
                  "type": "object",
                  "required": [
                    "code",
                    "message"
                  ],
                  "properties": {
                    "code": {
                      "type": "string",
                      "description": "Stable, machine-readable error code.",
                      "examples": [
                        "resource_not_found",
                        "rate_limited"
                      ]
                    },
                    "message": {
                      "type": "string",
                      "description": "Human-readable explanation of what went wrong."
                    },
                    "hint": {
                      "type": "string",
                      "description": "Suggested next step an agent can act on without a human."
                    },
                    "documentation": {
                      "type": "string",
                      "format": "uri",
                      "description": "URL of the documentation covering this error."
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
