openapi: 3.0.3
info:
  title: Web of Trust Map API
  version: 1.0.0
  description: |
    Open data API for the decentralized digital identity ecosystem.
    
    The Web of Trust Map provides free access to data about government-affiliated 
    decentralized identity projects and consortia from 2018 to 2023.
    
    ## Attribution
    
    All data is available under the Creative Commons BY 4.0 license. When using 
    Web of Trust Map data, you must:
    - Give appropriate credit to Web of Trust Map and Key State Capital
    - Provide links to weboftrust.org and keystate.capital
    - Indicate if changes were made
    
    See `/api/v1/terms` for full attribution requirements.
    

    
  license:
    name: CC BY 4.0
    url: https://creativecommons.org/licenses/by/4.0/
  contact:
    name: Web of Trust Map
    url: https://www.weboftrust.org
    email: contact@weboftrust.org
  x-logo:
    url: https://www.weboftrust.org/logo.png

servers:
  - url: https://www.weboftrust.org/api/v1
    description: Production server
  - url: http://localhost:5173/api/v1
    description: Development server

tags:
  - name: search
    description: Multi-resource search functionality
  - name: projects
    description: Decentralized identity projects and consortia
  - name: entities
    description: Organizations (public and private)
  - name: did-methods
    description: DID method specifications
  - name: dlt
    description: Distributed Ledger Technologies (blockchains)
  - name: standards
    description: Technical standards and specifications
  - name: people
    description: Persons of interest in the ecosystem
  - name: regulations
    description: Regulatory frameworks
  - name: geography
    description: Countries and regions
  - name: taxonomy
    description: Industries
  - name: meta
    description: API metadata and terms
  - name: graph
    description: Graph visualization data for network analysis

paths:
  /health:
    get:
      tags:
        - meta
      summary: API health check
      description: |
        Check API system status and connectivity. Returns service health information
        including database connectivity, cache status, and system metrics.
        
        This endpoint does not require authentication and is intended for monitoring.
      operationId: getHealth
      responses:
        '200':
          description: Health check results
          content:
            application/json:
              schema:
                type: object
                required:
                  - status
                  - timestamp
                  - version
                properties:
                  status:
                    type: string
                    enum: ["healthy", "degraded", "unhealthy"]
                    description: Overall system health status
                  timestamp:
                    type: string
                    format: date-time
                  version:
                    type: string
                    example: "1.0.0"
                  uptime:
                    type: integer
                    description: System uptime in seconds
                  services:
                    type: object
                    properties:
                      database:
                        type: object
                        properties:
                          status:
                            type: string
                            enum: ["connected", "disconnected", "unknown"]
                      cache:
                        type: object
                        properties:
                          status:
                            type: string
                            enum: ["operational", "degraded", "unknown"]
                      api:
                        type: object
                        properties:
                          status:
                            type: string
                            enum: ["operational", "degraded"]
                          rate_limit:
                            type: object
                            properties:
                              enabled:
                                type: boolean
                              limit:
                                type: integer
                              window:
                                type: string
              example:
                status: "healthy"
                timestamp: "2025-09-23T12:34:56Z"
                version: "1.0.0"
                uptime: 86400
                services:
                  database:
                    status: "connected"
                  cache:
                    status: "operational"
                  api:
                    status: "operational"
                    rate_limit:
                      enabled: true
                      limit: 1000
                      window: "1 hour"

  /search:
    get:
      tags:
        - search
      summary: Search across all resources
      description: |
        Search name-fields and returns top results across all resource types. Limited to 5 results per type.
        
        The search covers the names of:
        - Projects (DID Projects and Consortia)
        - Entities (Public and Private organizations)
        - People (Persons of interest)
        - DLT Instances and Technologies
        - Regulations and Standards
        - DID Methods (search without "did:" prefix)
        - Countries and Regions
      operationId: searchResources
      parameters:
        - name: query
          in: query
          description: Search text (optional - returns all if omitted)
          required: false
          schema:
            type: string
            example: "ethereum"
      responses:
        '200':
          description: Successful search results
          headers:
            X-License:
              schema:
                type: string
                example: CC-BY-4.0
            X-Attribution:
              schema:
                type: string
                example: "Web of Trust Map – Key State Capital"
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/SearchResult'
              example:
                - id: "project-123"
                  title: "Example DID Project"
                  type: "DID Project"
                  code: null
                  countryFilter: null
                  regionFilter: null
                - id: "entity-456"
                  title: "Example Corporation"
                  type: "Private"
                  code: null
                  countryFilter: null
                  regionFilter: null
        '500':
          $ref: '#/components/responses/InternalServerError'

  # Projects endpoints
  /projects:
    get:
      tags:
        - projects
      summary: List projects
      description: Get paginated list of decentralized identity projects and consortia
      operationId: listProjects
      parameters:
        - $ref: '#/components/parameters/PageParam'
        - $ref: '#/components/parameters/PerPageParam'
        - $ref: '#/components/parameters/QueryParam'
        - name: type
          in: query
          description: Filter by project type
          required: false
          schema:
            type: string
            enum: ["DID Project", "Consortium"]
      responses:
        '200':
          description: Successful response
          headers:
            X-License:
              schema:
                type: string
                example: CC-BY-4.0
            X-Attribution:
              schema:
                type: string
                example: "Web of Trust Map - Key State Capital"
            Cache-Control:
              schema:
                type: string
                example: "public, max-age=30, s-maxage=120, stale-while-revalidate=600"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectListResponse'
              example:
                data:
                  - id: 118
                    title: "TradeTrust"
                    type: "DID Project"
                    website: "https://www.tradetrust.io/"
                    logo_url: "https://www.weboftrust.org/icons/tradetrust.io.webp"
                    status: "Launched"
                    launch_date: "2019"
                    announcement_date: "2019"
                    mission_statement: "TradeTrust is a digital utility that comprises a set of globally-accepted standards and frameworks that connects governments and businesses to a public blockchain."
                    country:
                      id: 167
                      name: "Singapore"
                      code: "SG"
                    region: "Southeast Asia"
                    managing_entity:
                      id: 36
                      name: "Infocomm Media Development Authority"
                    stats:
                      total_links: 85
                      score: 12.5
                  - id: 325
                    title: "EU Digital Identity Wallet"
                    type: "DID Project"
                    website: "https://ec.europa.eu/digital-building-blocks/sites/display/EUDIGITALIDENTITYWALLET/EU+Digital+Identity+Wallet+Home"
                    logo_url: null
                    status: "Pilot"
                    launch_date: null
                    announcement_date: "2021"
                    mission_statement: "The European Digital Identity Wallet will enable citizens to identify and authenticate online across the EU."
                    country: null
                    region: null
                    managing_entity:
                      id: 649
                      name: "European Commission"
                    stats:
                      total_links: 122
                      score: 18.7
                pagination:
                  page: 1
                  per_page: 2
                  total: 446
                  total_pages: 223
        '400':
          $ref: '#/components/responses/BadRequest'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /projects/{id}:
    get:
      tags:
        - projects
      summary: Get project details
      description: Get detailed information about a specific project including all relationships
      operationId: getProject
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        '200':
          description: Successful response
          headers:
            X-License:
              schema:
                type: string
                example: CC-BY-4.0
            X-Attribution:
              schema:
                type: string
                example: "Web of Trust Map - Key State Capital"
            Cache-Control:
              schema:
                type: string
                example: "public, max-age=60, s-maxage=300, stale-while-revalidate=600"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectDetail'
              example:
                id: 118
                title: "TradeTrust"
                type: "DID Project"
                website: "https://www.tradetrust.io/"
                logo_url: "https://www.weboftrust.org/icons/tradetrust.io.webp"
                status: "Launched"
                launch_date: "2019"
                launch_date_source: "https://archive.ph/wip/DICxS"
                announcement_date: "2019"
                announcement_date_source: "https://archive.li/8oHd4#selection-2373.0-2373.138"
                mission_statement: "To make international trade more secure, efficient, and accessible for everyone by providing a globally-harmonised and inclusive framework."
                mission_statement_source: "https://archive.ph/aEXKw#selection-679.0-679.139"
                tech_stack_description: "Identity: Using W3C Verifiable Credentials, TradeTrust is used to issue Verifiable Documents and ensure the authenticity and provenance of digitally generated documents."
                tech_stack_description_source: "https://archive.li/UpHV3#selection-751.0-761.420"
                targets_holders_or_users: false
                targets_holders_or_users_source: "https://archive.ph/sH0n3"
                targets_issuers: true
                targets_issuers_source: "https://archive.ph/Hcyde"
                targets_verifiers: true
                targets_verifiers_source: "https://archive.ph/RVTow"
                uses_ssi: true
                uses_ssi_source: "https://archive.li/UpHV3#52%"
                uses_or_endorses_zkp: true
                uses_or_endorses_zkp_source: "https://archive.ph/QD2fF#selection-1831.0-1818.14"
                has_exportable_credentials: true
                has_exportable_credentials_source: "https://did-map-resources.s3.amazonaws.com/Southeast+Asia/TradeTrust/03Oct-PM-S2-SinYong_TradeTrustStandard.pdf"
                has_key_storage: false
                has_key_storage_source: "https://archive.ph/sH0n3"
                products: []
                links:
                  - category: "App Store Links"
                    url: "https://admin.tradetrust.io/"
                    description: "https://admin.tradetrust.io/"
                  - category: "Official Announcement Repository"
                    url: "https://form.gov.sg/635f32c5001b2d0011fff09b"
                    description: "https://form.gov.sg/635f32c5001b2d0011fff09b"
                country:
                  id: 167
                  name: "Singapore"
                  code: "SG"
                region: "Southeast Asia"
                geographic_focus:
                  - country:
                      id: 124
                      name: "Netherlands"
                      code: "NL"
                    source: "https://did-map-resources.s3.amazonaws.com/Southeast+Asia/TradeTrust/pres_loh.pdf"
                  - country:
                      id: 38
                      name: "China"
                      code: "CN"
                    source: "https://archive.li/oAS8Q"
                managing_entity:
                  id: 36
                  name: "Infocomm Media Development Authority"
                entities:
                  - id: 36
                    name: "Infocomm Media Development Authority"
                    type: ["Public"]
                    relationship_type: "Managing"
                    source: "https://archive.li/8oHd4#selection-2373.0-2373.138"
                persons_of_interest: []
                consortia_relations:
                  parent_consortium: null
                  child_projects: []
                regulations: []
                standards:
                  - id: 12
                    title: "W3C Verifiable Credentials Data Model"
                    source: "https://archive.li/UpHV3#52%"
                did_methods: []
                dlt_instances:
                  - id: 2
                    name: "Ethereum"
                    source: "https://archive.ph/QD2fF#selection-1831.0-1818.14"
                credential_profiles: []
                inclusion_criteria:
                  uses_did_or_vc: true
                  uses_did_or_vc_sources:
                    - "https://archive.li/UpHV3#52%"
                    - "https://github.com/tradetrust/documentation"
                  claims_ssi: true
                  claims_ssi_sources:
                    - "https://www.tradetrust.io/about"
                  has_government_funding: true
                  has_government_funding_sources:
                    - "https://www.imda.gov.sg/news-and-events/2019/05/tradetrust-launch"
                  has_known_partners: true
                  has_known_partners_sources:
                    - "https://www.sc.com/en/media/press-release/standard-chartered-joins-tradetrust/"
                  announcement_date: "2019-05-15"
                  announcement_date_sources:
                    - "https://archive.li/8oHd4#selection-2373.0-2373.138"
                  exception_reason: null
                industries:
                  - id: 734
                    name: "International Trade"
                    source: "https://www.tradetrust.io/"
                ai_description: null
                stats:
                  total_links: 85
                  score: 12.5
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /projects/{id}/relationships:
    get:
      tags:
        - projects
      summary: Get project relationships
      description: Get all relationships for a specific project, grouped by type
      operationId: getProjectRelationships
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        '200':
          description: Successful response
          headers:
            X-License:
              schema:
                type: string
                example: CC-BY-4.0
            X-Attribution:
              schema:
                type: string
                example: "Web of Trust Map - Key State Capital"
            Cache-Control:
              schema:
                type: string
                example: "public, max-age=60, s-maxage=300, stale-while-revalidate=600"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectRelationships'
              example:
                project:
                  id: 118
                  title: "TradeTrust"
                  type: "DID Project"
                entities:
                  - type: "Managing"
                    entity:
                      id: 36
                      name: "Infocomm Media Development Authority"
                      type: ["Public"]
                      website:
                        Url: "https://www.imda.gov.sg/"
                        Description: "https://www.imda.gov.sg/"
                      country:
                        id: 167
                        name: "Singapore"
                        code: "SG"
                  - type: "Affiliation"
                    entity:
                      id: 2918
                      name: "Standard Chartered PLC"
                      type: ["Private"]
                      website:
                        Url: "https://www.sc.com/"
                        Description: "https://www.sc.com/"
                      country:
                        id: 197
                        name: "United Kingdom"
                        code: "GB"
                persons: []
                dlt_instances:
                  - id: 2
                    name: "Ethereum"
                    source: "https://archive.ph/QD2fF#selection-1831.0-1818.14"
                regulations: []
                standards:
                  - id: 12
                    title: "W3C Verifiable Credentials Data Model"
                    source: "https://archive.li/UpHV3#52%"
                did_methods: []
                projects:
                  outgoing: []
                  incoming: []
                summary:
                  totalRelationships: 85
                  byType:
                    entities: 35
                    standards: 10
                    dlt_instances: 2
                    regulations: 0
                    did_methods: 0
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'

  # Entities endpoints
  /entities:
    get:
      summary: List entities
      description: Get a paginated list of entities with optional filtering by type and search
      tags:
        - entities
      parameters:
        - name: page
          in: query
          description: Page number (1-indexed)
          schema:
            type: integer
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Number of results per page
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 20
        - name: q
          in: query
          description: Search query for entity names or trade names
          schema:
            type: string
        - name: type
          in: query
          description: Filter by entity type
          schema:
            type: string
            enum: ["Public", "Private"]
      responses:
        '200':
          description: Successful response with paginated entities
          headers:
            X-License:
              schema:
                type: string
                example: CC-BY-4.0
            X-Attribution:
              schema:
                type: string
                example: "Web of Trust Map - Key State Capital"
            Cache-Control:
              schema:
                type: string
                example: "public, max-age=30, s-maxage=120, stale-while-revalidate=600"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EntityListResponse'
              example:
                data:
                  - id: 649
                    name: "European Commission"
                    trade_name: "European Commission"
                    type: ["Public"]
                    lei: "254900ZNYA1FLUQ9U393"
                    website: "https://commission.europa.eu/index_en"
                    logo_url: "https://www.weboftrust.org/icons/commission.europa.eu.webp"
                    address: "Rue Belliard 28 (Secondary entrance : Rue de l'Industrie 21), 1000 Bruxelles / Brussel, Belgium"
                    country:
                      id: 17
                      name: "Belgium"
                      code: "BE"
                    coordinates:
                      latitude: 50.8422911
                      longitude: 4.3703692
                    stats:
                      total_links: 122
                  - id: 3
                    name: "Microsoft Corporation"
                    trade_name: "Microsoft Corporation (Microsoft)"
                    type: ["Private"]
                    lei: "INR2EJN1ERAN0W5ZP974"
                    website: "https://www.microsoft.com"
                    logo_url: "https://www.weboftrust.org/icons-overwrite/microsoft.com.webp"
                    address: "One Microsoft Way, Redmond, WA 98052, United States"
                    country:
                      id: 197
                      name: "United States of America"
                      code: "US"
                    coordinates:
                      latitude: 47.6435274501991
                      longitude: -122.130607282319
                    stats:
                      total_links: 44
                pagination:
                  page: 1
                  per_page: 2
                  total: 5545
                  total_pages: 2773
        '400':
          $ref: '#/components/responses/BadRequest'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /entities/{id}:
    get:
      summary: Get entity details
      description: Get comprehensive information about a specific entity
      tags:
        - entities
      parameters:
        - name: id
          in: path
          required: true
          description: Entity ID
          schema:
            type: integer
      responses:
        '200':
          description: Successful response with entity details
          headers:
            X-License:
              schema:
                type: string
                example: CC-BY-4.0
            X-Attribution:
              schema:
                type: string
                example: "Web of Trust Map - Key State Capital"
            Cache-Control:
              schema:
                type: string
                example: "public, max-age=60, s-maxage=300, stale-while-revalidate=600"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EntityDetail'
              example:
                id: 649
                name: "European Commission"
                trade_name: "European Commission"
                type: ["Public"]
                lei: "254900ZNYA1FLUQ9U393"
                website: "https://commission.europa.eu/index_en"
                logo_url: "https://www.weboftrust.org/icons/commission.europa.eu.webp"
                address: "Rue Belliard 28 (Secondary entrance : Rue de l'Industrie 21), 1000 Bruxelles / Brussel, Belgium"
                country:
                  id: 17
                  name: "Belgium"
                  code: "BE"
                coordinates:
                  latitude: 50.8422911
                  longitude: 4.3703692
                operates_dlts: []
                project_relations:
                  managed:
                    - project:
                        id: 289
                        title: "European Digital Credentials for Learning"
                        website: "https://europa.eu/europass/en/europass-tools/european-digital-credentials"
                      source: "https://did-map-resources.s3.amazonaws.com/Northern+Europe/European+Digital+Credentials+for+Learning/PDFs/EDC_presentation_Ilkido_Mazer.pdf"
                    - project:
                        id: 325
                        title: "EU Digital Identity Wallet"
                        website: "https://ec.europa.eu/digital-building-blocks/sites/display/EUDIGITALIDENTITYWALLET/EU+Digital+Identity+Wallet+Home"
                      source: "https://did-map-resources.s3.amazonaws.com/Western+Europe/EU+Digital+Identity+Wallet/ARF_v100_for_publication_SqMV8FwSeE3xg7teicYY4hFDY_93678.pdf"
                  funded:
                    - project:
                        id: 286
                        title: "Billon Platform"
                        website: "https://billongroup.com/open-platform"
                      source: "https://archive.ph/gYsE7#selection-1113.0-1113.129"
                  affiliated: []
                consortium_memberships: []
                people:
                  by_person: []
                  on_behalf_of: []
                did_method_relations: []
                ai_description: "The European Commission is the executive branch of the European Union, responsible for proposing legislation, enforcing EU laws, and representing the EU internationally. In the context of digital identity, the Commission has been instrumental in developing the eIDAS regulation and the EU Digital Identity Wallet initiative."
                stats:
                  total_links: 122
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'

  # DID Methods endpoints
  /did-methods:
    get:
      summary: List DID methods
      description: Get a paginated list of DID methods with optional search and project inclusion
      tags:
        - did-methods
      parameters:
        - $ref: '#/components/parameters/PageParam'
        - $ref: '#/components/parameters/PerPageParam'
        - $ref: '#/components/parameters/QueryParam'
        - name: include_projects
          in: query
          description: If true, includes list of projects using each DID method
          required: false
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: Successful response with paginated DID methods
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DidMethodListResponse'
              example:
                data:
                  - id: 1738169370023
                    name: "3"
                    specification_url: "https://cips.ceramic.network/CIPs/cip-79"
                    contact_name: "3Box Labs"
                    contact_website: "https://3boxlabs.com/"
                    project_count: "0"
                    source: "https://diddirectory.com/"
                    archived_source: null
                  - id: 1738169371476
                    name: "ethr"
                    specification_url: "https://github.com/decentralized-identity/ethr-did-resolver/blob/master/doc/did-method-spec.md"
                    contact_name: "ConsenSys"
                    contact_website: "https://consensys.net/"
                    project_count: "5"
                    source: "https://diddirectory.com/"
                    archived_source: null
                    projects:
                      - id: 118
                        title: "TradeTrust"
                        type: "DID Project"
                        status: "Launched"
                        source: "https://github.com/tradetrust/documentation"
                        archived_source: null
                        excerpt: "TradeTrust uses did:ethr for decentralized identity management."
                      - id: 237
                        title: "uPort"
                        type: "DID Project"
                        status: "Discontinued"
                        source: "https://github.com/uport-project/ethr-did"
                        archived_source: null
                        excerpt: "uPort pioneered the use of did:ethr for self-sovereign identity."
                pagination:
                  page: 1
                  per_page: 2
                  total: 207
                  total_pages: 104
        '400':
          $ref: '#/components/responses/BadRequest'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /did-methods/{id}:
    get:
      summary: Get DID method details
      description: Get comprehensive information about a specific DID method
      tags:
        - did-methods
      parameters:
        - name: id
          in: path
          required: true
          description: DID method ID
          schema:
            type: integer
      responses:
        '200':
          description: Successful response with DID method details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DidMethodDetail'
              example:
                id: 1738169371476
                name: "abt"
                specification_url: "https://arcblock.github.io/abt-did-spec/"
                contact_name: "ArcBlock"
                contact_website: null
                source: "https://diddirectory.com/"
                archived_source: null
                ai_description: "ABT DID Method is a blockchain-based decentralized identifier implementation developed by ArcBlock that focuses on enhanced privacy and security."
                projects:
                  - project:
                      id: 456
                      title: "ArcBlock Identity Wallet"
                      type: "DID Project"
                      website: "https://www.arcblock.io/en/wallet"
                    source: "https://github.com/ArcBlock/did-abt-spec"
                    archived_source: null
                    excerpt: "The ArcBlock Identity Wallet implements the did:abt method to provide users with self-sovereign identity management capabilities on the ArcBlock blockchain platform."
                dlt_instances:
                  - dlt_instance:
                      id: 126
                      name: "ArcBlock"
                      operator: null
                    source: null
                    archived_source: null
                entities:
                  - entity:
                      id: 57
                      name: "ArcBlock Foundation, Limited"
                      website: "https://www.arcblock.io/en"
                    source: "https://diddirectory.com/"
                    archived_source: null
                persons: []
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'

  # DLT endpoints
  /dlt-instances:
    get:
      summary: List DLT instances
      description: Get a paginated list of DLT instances (blockchains) with optional search and project inclusion
      tags:
        - dlt
      parameters:
        - $ref: '#/components/parameters/PageParam'
        - $ref: '#/components/parameters/PerPageParam'
        - $ref: '#/components/parameters/QueryParam'
        - name: include_projects
          in: query
          description: If true, includes list of all projects using each DLT instance
          required: false
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: Successful response with paginated DLT instances
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DltInstanceListResponse'
              example:
                data:
                  - id: 2
                    name: "Ethereum"
                    website: "https://ethereum.org/en/"
                    logo_url: "https://www.weboftrust.org/icons-overwrite/ethereum.org.png"
                    operator: null
                    dlt:
                      id: 1
                      title: "Ethereum"
                    stats:
                      total_links: 61
                    projects:
                      - id: 118
                        title: "TradeTrust"
                        type: "DID Project"
                        status: "Launched"
                        source: "https://archive.ph/QD2fF#selection-1831.0-1818.14"
                      - id: 237
                        title: "Hyland Experience Credentials"
                        type: "DID Project"
                        status: "Launched"
                        source: "https://archive.ph/3dNhH#selection-305.0-305.291"
                  - id: 32
                    name: "Sovrin"
                    website: "https://sovrin.org/"
                    logo_url: "https://www.weboftrust.org/icons-overwrite/sovrin.org.webp"
                    operator:
                      id: 82
                      name: "Sovrin Foundation"
                    dlt:
                      id: 4
                      title: "Hyperledger Indy"
                    stats:
                      total_links: 41
                pagination:
                  page: 1
                  per_page: 2
                  total: 140
                  total_pages: 70
        '400':
          $ref: '#/components/responses/BadRequest'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /dlt-instances/{id}:
    get:
      summary: Get DLT instance details
      description: Get comprehensive information about a specific DLT instance (blockchain)
      tags:
        - dlt
      parameters:
        - name: id
          in: path
          required: true
          description: DLT instance ID
          schema:
            type: integer
      responses:
        '200':
          description: Successful response with DLT instance details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DltInstanceDetail'
              example:
                id: 2
                name: "Ethereum"
                website: "https://ethereum.org/en/"
                logo_url: "https://www.weboftrust.org/icons-overwrite/ethereum.org.png"
                block_explorer: null
                dlt:
                  id: 1
                  title: "Ethereum"
                  website: "https://ethereum.org/en/"
                operator: null
                ai_description: null
                projects:
                  - project:
                      id: 108
                      title: "Rohingya Project"
                      website: "https://rohingyaproject.com/r-id/"
                    source: "https://archive.ph/3XRB5#selection-677.194-677.381"
                  - project:
                      id: 237
                      title: "Hyland Experience Credentials"
                      website: "https://www.hyland.com/en/products/hyland-experience-credentials"
                    source: "https://archive.ph/3dNhH#selection-305.0-305.291"
                did_methods: []
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /dlts:
    get:
      summary: List DLT technologies
      description: Get a paginated list of DLT technologies with optional search and project inclusion
      tags:
        - dlt
      parameters:
        - $ref: '#/components/parameters/PageParam'
        - $ref: '#/components/parameters/PerPageParam'
        - $ref: '#/components/parameters/QueryParam'
        - name: include_projects
          in: query
          description: If true, includes list of all projects using each DLT technology
          required: false
          schema:
            type: boolean
            default: false
        - name: include_instances
          in: query
          description: If true, includes list of all blockchain instances based on each DLT technology
          required: false
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: Successful response with paginated DLT technologies
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DltListResponse'
              example:
                data:
                  - id: 4
                    title: "Hyperledger Indy"
                    type: "Public PoA"
                    has_specific_operator: true
                    website: "https://www.lfdecentralizedtrust.org/projects/hyperledger-indy"
                    logo_url: "https://www.weboftrust.org/icons-overwrite/lfdecentralizedtrust.org.webp"
                    instance_count: 17
                    stats:
                      total_links: 20
                    projects:
                      - id: 32
                        title: "Sovrin Network"
                        type: "DID Project"
                        status: "Launched"
                        source: "https://sovrin.org/the-sovrin-network/"
                      - id: 145
                        title: "BC Digital ID"
                        type: "DID Project"
                        status: "Pilot"
                        source: "https://digital.gov.bc.ca/digital-trust/projects-and-initiatives/bc-digital-identity/"
                    instances:
                      - id: 32
                        name: "Sovrin"
                        website: "https://sovrin.org/"
                        operator:
                          id: 82
                          name: "Sovrin Foundation"
                      - id: 1
                        name: "IDunion"
                        website: "https://idunion.org/"
                        operator:
                          id: 3302
                          name: "IDunion SCE mit beschränkter Haftung"
                  - id: 16
                    title: "Tendermint"
                    type: "Public PoS"
                    has_specific_operator: false
                    website: "https://tendermint.com/"
                    logo_url: "https://www.weboftrust.org/icons/tendermint.com.webp"
                    instance_count: 7
                    stats:
                      total_links: 8
                pagination:
                  page: 1
                  per_page: 2
                  total: 142
                  total_pages: 71
        '400':
          $ref: '#/components/responses/BadRequest'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /dlts/{id}:
    get:
      summary: Get DLT technology details
      description: Get comprehensive information about a specific DLT technology
      tags:
        - dlt
      parameters:
        - name: id
          in: path
          required: true
          description: DLT ID
          schema:
            type: integer
      responses:
        '200':
          description: Successful response with DLT technology details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DltDetail'
              example:
                id: 4
                title: "Hyperledger Indy"
                type: "Public PoA"
                has_specific_operator: true
                website: "https://www.lfdecentralizedtrust.org/projects/hyperledger-indy"
                logo_url: "https://www.weboftrust.org/icons-overwrite/lfdecentralizedtrust.org.webp"
                ai_description: null
                total_instances: 20
                total_projects: 95
                instances:
                  - id: 32
                    name: "Sovrin"
                    website: "https://sovrin.org/"
                    operator:
                      id: 82
                      name: "Sovrin Foundation"
                    projects_using: 36
                  - id: 1
                    name: "IDunion"
                    website: "https://idunion.org/"
                    operator:
                      id: 3302
                      name: "IDunion SCE mit beschränkter Haftung"
                    projects_using: 12
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'

  # Standards endpoints
  /standards:
    get:
      summary: List standards
      description: Get a paginated list of standards with optional search and project inclusion
      tags:
        - standards
      parameters:
        - $ref: '#/components/parameters/PageParam'
        - $ref: '#/components/parameters/PerPageParam'
        - $ref: '#/components/parameters/QueryParam'
        - name: include_projects
          in: query
          description: If true, includes list of all projects following each standard
          required: false
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: Successful response with paginated standards
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardListResponse'
              example:
                data:
                  - id: 12
                    title: "W3C Verifiable Credentials Data Model"
                    url: "https://www.w3.org/TR/vc-data-model/"
                    stats:
                      total_links: 215
                  - id: 3
                    title: "W3C Decentralized Identifiers (DIDs)"
                    url: "https://www.w3.org/TR/did-core/"
                    stats:
                      total_links: 184
                pagination:
                  page: 1
                  per_page: 2
                  total: 88
                  total_pages: 44
        '400':
          $ref: '#/components/responses/BadRequest'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /standards/{id}:
    get:
      summary: Get standard details
      description: Get comprehensive information about a specific standard
      tags:
        - standards
      parameters:
        - name: id
          in: path
          required: true
          description: Standard ID
          schema:
            type: integer
      responses:
        '200':
          description: Successful response with standard details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardDetail'
              example:
                id: 12
                title: "W3C Verifiable Credentials Data Model"
                url: "https://www.w3.org/TR/vc-data-model/"
                ai_description: "The W3C Verifiable Credentials Data Model is a specification that defines how to express credentials on the Web in a way that is cryptographically secure, privacy-respecting, and machine-verifiable."
                projects_following_count: 205
                projects_following:
                  - project:
                      id: 398
                      title: "XATP"
                      website: "https://ledgerdomain.com/"
                    source: "https://archive.ph/zK4ij#39%"
                  - project:
                      id: 149
                      title: "AU10TIX Reusable Digital ID"
                      website: "https://www.au10tix.com/"
                    source: "https://archive.ph/cUVfv"
                projects_managing: []
                stats:
                  total_links: 215
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'

  # People endpoints
  /people:
    get:
      summary: List people
      description: Get a paginated list of people (persons of interest) with optional search
      tags:
        - people
      parameters:
        - $ref: '#/components/parameters/PageParam'
        - $ref: '#/components/parameters/PerPageParam'
        - $ref: '#/components/parameters/QueryParam'
      responses:
        '200':
          description: Successful response with paginated people
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PeopleListResponse'
              example:
                data:
                  - id: 1082
                    name: "Stephen Curran"
                    stats:
                      total_links: 16
                  - id: 651
                    name: "Kaliya Young"
                    stats:
                      total_links: 13
                pagination:
                  page: 1
                  per_page: 2
                  total: 4532
                  total_pages: 2266
        '400':
          $ref: '#/components/responses/BadRequest'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /people/{id}:
    get:
      summary: Get person details
      description: Get comprehensive information about a specific person
      tags:
        - people
      parameters:
        - name: id
          in: path
          required: true
          description: Person ID
          schema:
            type: integer
      responses:
        '200':
          description: Successful response with person details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PersonDetail'
              example:
                id: 1082
                name: "Stephen Curran"
                ai_description: null
                project_relations:
                  - project:
                      id: 415
                      title: "OWF - Open Wallet Foundation"
                      website: "https://openwallet.foundation/"
                    role:
                      id: 2403
                      title: "Co-chair (Wallet Interoperability Special Interest Group)"
                    on_behalf_of_entity: null
                    source: "https://archive.ph/6jxZB#selection-2895.205-2895.299"
                  - project:
                      id: 417
                      title: "Sovrin Foundation"
                      website: "https://sovrin.org/"
                    role:
                      id: 1158
                      title: "Chair (Board of Trustees)"
                    on_behalf_of_entity: null
                    source: "https://archive.ph/GqdHd#15%"
                did_method_relations: []
                stats:
                  total_links: 16
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'

  # Regulations endpoints
  /regulations:
    get:
      summary: List regulations
      description: Get a paginated list of regulations with optional search and country filtering
      tags:
        - regulations
      parameters:
        - $ref: '#/components/parameters/PageParam'
        - $ref: '#/components/parameters/PerPageParam'
        - $ref: '#/components/parameters/QueryParam'
        - name: country
          in: query
          description: Filter by country code (e.g., "US", "CH")
          schema:
            type: string
      responses:
        '200':
          description: Successful response with paginated regulations
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RegulationListResponse'
              example:
                data:
                  - id: 50
                    title: "EU GDPR - EU General Data Protection Regulation"
                    official_name: "Regulation (EU) 2016/679 of the European Parliament and of the Council of 27 April 2016 (General Data Protection Regulation)"
                    url: "https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A02016R0679-20160504"
                    country: null
                    stats:
                      total_links: 179
                  - id: 1
                    title: "eIDAS - electronic IDentification, Authentication and trust Services Regulation"
                    official_name: "Regulation (EU) No 910/2014 of the European Parliament and of the Council of 23 July 2014"
                    url: "https://digital-strategy.ec.europa.eu/en/policies/eidas-regulation"
                    country: null
                    stats:
                      total_links: 66
                pagination:
                  page: 1
                  per_page: 2
                  total: 46
                  total_pages: 23
        '400':
          $ref: '#/components/responses/BadRequest'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /regulations/{id}:
    get:
      summary: Get regulation details
      description: Get comprehensive information about a specific regulation
      tags:
        - regulations
      parameters:
        - name: id
          in: path
          required: true
          description: Regulation ID
          schema:
            type: integer
      responses:
        '200':
          description: Successful response with regulation details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RegulationDetail'
              example:
                id: 50
                title: "EU GDPR - EU General Data Protection Regulation"
                official_name: "Regulation (EU) 2016/679 of the European Parliament and of the Council of 27 April 2016 (General Data Protection Regulation)"
                url: "https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A02016R0679-20160504"
                country: null
                region:
                  title: "European Union"
                  abbreviation: "EU"
                ai_description: "The General Data Protection Regulation (GDPR) is a comprehensive data protection and privacy regulation that fundamentally transformed how personal data must be handled in the European Union and beyond."
                projects_following: []
                stats:
                  total_links: 179
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'

  # Geography endpoints (moved to end)
  /countries:
    get:
      tags:
        - geography
      summary: List countries with stats
      description: Get all countries with project and entity statistics, with optional inclusion of related data. Please note this endpoint may return a huge blob if you set true on multiple params, **testing it in swagger ui might be hard on your browser**.
      operationId: listCountries
      parameters:
        - name: include_projects_hq
          in: query
          description: If true, includes list of all projects headquartered in each country
          required: false
          schema:
            type: boolean
            default: false
        - name: include_entities_hq
          in: query
          description: If true, includes list of all entities headquartered in each country
          required: false
          schema:
            type: boolean
            default: false
        - name: include_projects_target
          in: query
          description: If true, includes list of all projects targeting each country
          required: false
          schema:
            type: boolean
            default: false
        - name: include_regulations
          in: query
          description: If true, includes list of all regulations from each country
          required: false
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: Successful response with country data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CountryListResponse'
              example:
                data:
                  - id: 1
                    name: "Afghanistan"
                    code: "AF"
                    formal_name: "Islamic State of Afghanistan"
                    stats:
                      entities: 0
                      projects_hq: 0
                      projects_target: 0
                      regulations: 0
                  - id: 17
                    name: "Belgium"
                    code: "BE"
                    formal_name: "Kingdom of Belgium"
                    stats:
                      entities: 58
                      projects_hq: 12
                      projects_target: 32
                      regulations: 0
        '500':
          $ref: '#/components/responses/InternalServerError'

  # Taxonomy endpoints (moved to end)
  /industries:
    get:
      tags:
        - taxonomy
      summary: List industries
      description: Get industries with significant project associations (5+ approved relations)
      operationId: listIndustries
      parameters:
        - name: include_projects
          in: query
          description: If true, includes list of projects targeting each industry
          required: false
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: Successful response with industry data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IndustryListResponse'
              example:
                data:
                  - id: 200
                    name: "Agriculture"
                    project_count: 12
                    projects:
                      - id: 160
                        title: "3air Platform"
                        type: "DID Project"
                        status: "Launched"
                        source: "https://3air.io/blog/3air-use-cases/"
                        excerpt: "3air's blockchain platform enables farmers to track their produce from farm to table, ensuring transparency in agricultural supply chains."
                      - id: 38
                        title: "AGROS"
                        type: "DID Project"
                        status: "Launched"
                        source: "https://agros.tech/farmers"
                        excerpt: "AGROS provides digital identity solutions for farmers, enabling them to access credit and insurance services based on their verified agricultural history."
                      - id: 9
                        title: "Alastria ID"
                        type: "DID Project"
                        status: "Launched"
                        source: "https://alastria.io/en/cases"
                        excerpt: "Alastria's use cases include agricultural traceability, where farmers and cooperatives can certify the origin and quality of their products."
                  - id: 666
                    name: "Banking"
                    project_count: 28
                    projects:
                      - id: 123
                        title: "Digital Identity Banking Solution"
                        type: "DID Project"
                        status: "Launched"
                        source: "https://example-bank.com/digital-identity"
                        excerpt: "Our banking platform integrates decentralized identity verification to reduce KYC costs by 60% while improving customer onboarding experience."
        '500':
          $ref: '#/components/responses/InternalServerError'

  # Metadata endpoints (moved to end)
  /terms:
    get:
      tags:
        - meta
      summary: Attribution and license terms
      description: Get full CC BY 4.0 attribution requirements and usage guidelines
      operationId: getTerms
      responses:
        '200':
          description: Successful response with license terms and attribution requirements
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TermsResponse'
              example:
                license:
                  name: "Creative Commons Attribution 4.0 International (CC BY 4.0)"
                  url: "https://creativecommons.org/licenses/by/4.0/"
                  spdx_id: "CC-BY-4.0"
                attribution:
                  required: true
                  text: "Data from Web of Trust Map (weboftrust.org) by Key State Capital (keystate.capital), licensed under CC BY 4.0"
                  components:
                    credit: "Web of Trust Map and Key State Capital"
                    links:
                      web_of_trust: "https://www.weboftrust.org"
                      key_state: "https://keystate.capital"
                      license: "https://creativecommons.org/licenses/by/4.0/"
                    indicate_changes: "You must indicate if changes were made to the data"
                usage_guidelines:
                  commercial_use: "Allowed"
                  distribution: "Allowed"
                  modification: "Allowed with attribution"
                  private_use: "Allowed"
                  requirements:
                    - "Give appropriate credit to Web of Trust Map and Key State Capital"
                    - "Provide links to weboftrust.org and keystate.capital"
                    - "Provide a link to the CC BY 4.0 license"
                    - "Indicate if any changes were made to the data"
                    - "Do not suggest endorsement by Web of Trust Map or Key State Capital"
                api_specific:
                  rate_limits:
                    general: "60-120 requests/minute/IP"
                    search: "30 requests/minute/IP"
                    graph: "10 requests/minute/IP (future)"
                  headers:
                    X-License: "CC-BY-4.0"
                    X-Attribution: "Web of Trust Map - Key State Capital"
                  fair_use: "Please cache responses appropriately and avoid unnecessary repeated requests"
                contact:
                  questions: "api@weboftrust.org"
                  website: "https://www.weboftrust.org"
                  issues: "https://github.com/weboftrust/api-docs/issues"
                disclaimer: "The data is provided 'as is' without warranty of any kind."
                last_updated: "2025-09-09T15:32:54.168Z"
        '500':
          $ref: '#/components/responses/InternalServerError'

  # Graph endpoints for visualization data
  /graph/nodes:
    get:
      tags:
        - graph
      summary: Get all graph nodes
      description: |
        Returns all nodes for graph visualization, including projects, entities, people, 
        DLT instances, regulations, standards, and DID methods. This is the same data 
        used by the Web of Trust Map visualization interface.
        Scores are a function of amount of connections the node has to other node, weighted by how many connections the nodes its connected to have.
        
        The response includes node metadata like scores, and relationships counts.
        Please note this endpoint returns 10000+ nodes, **testing it in swagger ui might be hard on your browser**.
      operationId: getGraphNodes
      parameters:
        - name: format
          in: query
          description: Response format 
          schema:
            type: string
            enum: ["json", "compressed"]
            default: "json"
      responses:
        '200':
          description: Successful response with graph nodes
          headers:
            Cache-Control:
              schema:
                type: string
                example: "public, max-age=300, s-maxage=3600, stale-while-revalidate=7200"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GraphNodesResponse'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /graph/links:
    get:
      tags:
        - graph
      summary: Get all graph links
      description: |
        Returns all relationships/links between nodes in the graph visualization.
        This includes all types of relationships like managing, funding, affiliation,
        DLT support, regulatory compliance, and more.
        **Please note this endpoint returns 16000+ links (connections between nodes), testing it in swagger ui might be hard on your browser.**
      operationId: getGraphLinks
      parameters:
        - name: format
          in: query
          description: Response format (json)
          schema:
            type: string
            enum: ["json", "compressed"]
            default: "json"
      responses:
        '200':
          description: Successful response with graph links
          headers:
            Cache-Control:
              schema:
                type: string
                example: "public, max-age=300, s-maxage=3600, stale-while-revalidate=7200"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GraphLinksResponse'
        '500':
          $ref: '#/components/responses/InternalServerError'
components:
  parameters:
    PageParam:
      name: page
      in: query
      description: Page number (1-indexed)
      required: false
      schema:
        type: integer
        minimum: 1
        default: 1

    PerPageParam:
      name: per_page
      in: query
      description: Results per page
      required: false
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 20

    QueryParam:
      name: q
      in: query
      description: Search/filter text
      required: false
      schema:
        type: string

  schemas:
    SearchResult:
      type: object
      required:
        - id
        - title
        - type
      properties:
        id:
          type: string
          description: Prefixed resource ID (e.g., "project-123", "entity-456")
          example: "project-123"
        title:
          type: string
          description: Display name of the resource
          example: "Example Project"
        type:
          type: string
          description: Resource type or subtype
          enum:
            - "DID Project"
            - "Consortium"
            - "Public"
            - "Private"
            - "Person"
            - "dltinstance"
            - "dlt"
            - "Regulation"
            - "Standard"
            - "Country"
            - "Region"
            - "DID Method"
        code:
          type: string
          nullable: true
          description: Country or region code (only for geographic entities)
          example: "US"
        countryFilter:
          type: string
          nullable: true
          description: Country code for filtering (only for countries)
        regionFilter:
          type: string
          nullable: true
          description: Region abbreviation for filtering (only for regions)

    Error:
      type: object
      required:
        - error
      properties:
        error:
          type: object
          required:
            - code
            - message
          properties:
            code:
              type: string
              description: Machine-readable error code
              example: "invalid_parameter"
            message:
              type: string
              description: Human-readable error message
              example: "Invalid page parameter"
    
    PaginationInfo:
      type: object
      required:
        - page
        - per_page
        - total
        - total_pages
      properties:
        page:
          type: integer
          minimum: 1
          example: 1
        per_page:
          type: integer
          minimum: 1
          maximum: 100
          example: 20
        total:
          type: integer
          minimum: 0
          example: 446
        total_pages:
          type: integer
          minimum: 0
          example: 23
    
    ProjectSummary:
      type: object
      required:
        - id
        - title
        - type
      properties:
        id:
          type: integer
          example: 118
        title:
          type: string
          example: "TradeTrust"
        type:
          type: string
          enum: ["DID Project", "Consortium"]
        website:
          type: string
          description: Project website URL
          nullable: true
        logo_url:
          type: string
          description: Full URL to the project's logo image (derived from website domain)
          format: uri
          nullable: true
          example: "https://www.weboftrust.org/icons/tradetrust.io.webp"
        status:
          type: string
          enum: ["Announced", "Pilot", "Launched", "Discontinued", "Active", "Inactive"]
        launch_date:
          type: string
          nullable: true
          example: "2019"
        announcement_date:
          type: string
          nullable: true
          example: "2019"
        mission_statement:
          type: string
          nullable: true
        country:
          type: object
          nullable: true
          description: Country information from managing entity
          properties:
            id:
              type: integer
              example: 167
            name:
              type: string
              example: "Singapore"
            code:
              type: string
              example: "SG"
        region:
          type: string
          nullable: true
          description: Geographic region based on the project's headquarters country
          example: "Southeast Asia"
        managing_entity:
          type: object
          nullable: true
          properties:
            id:
              type: integer
            name:
              type: string
        stats:
          type: object
          properties:
            total_links:
              type: integer
            score:
              type: number
    
    ProjectListResponse:
      type: object
      required:
        - data
        - pagination
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/ProjectSummary'
        pagination:
          $ref: '#/components/schemas/PaginationInfo'
    
    PgLink:
      type: object
      properties:
        Url:
          type: string
          format: uri
        Description:
          type: string
    
    ProjectDetail:
      allOf:
        - $ref: '#/components/schemas/ProjectSummary'
        - type: object
          properties:
            launch_date_source:
              type: string
              nullable: true
            announcement_date_source:
              type: string
              nullable: true
            mission_statement_source:
              type: string
              nullable: true
            tech_stack_description:
              type: string
              nullable: true
            tech_stack_description_source:
              type: string
              nullable: true
            targets_holders_or_users:
              type: boolean
              nullable: true
              description: Whether the project targets credential holders/users
            targets_holders_or_users_source:
              type: string
              nullable: true
            targets_issuers:
              type: boolean
              nullable: true
              description: Whether the project targets credential issuers
            targets_issuers_source:
              type: string
              nullable: true
            targets_verifiers:
              type: boolean
              nullable: true
              description: Whether the project targets credential verifiers
            targets_verifiers_source:
              type: string
              nullable: true
            uses_ssi:
              type: boolean
              nullable: true
              description: Whether the project uses self-sovereign identity
            uses_ssi_source:
              type: string
              nullable: true
            uses_or_endorses_zkp:
              type: boolean
              nullable: true
              description: Whether the project uses/endorses zero-knowledge proofs
            uses_or_endorses_zkp_source:
              type: string
              nullable: true
            has_exportable_credentials:
              type: boolean
              nullable: true
              description: Whether the project has exportable credentials
            has_exportable_credentials_source:
              type: string
              nullable: true
            has_key_storage:
              type: boolean
              nullable: true
              description: Whether the project has key storage capabilities
            has_key_storage_source:
              type: string
              nullable: true
            products:
              type: array
              items:
                type: object
                properties:
                  id:
                    type: integer
                  title:
                    type: string
            links:
              type: array
              items:
                type: object
                properties:
                  category:
                    type: string
                  url:
                    type: string
                  description:
                    type: string
            geographic_focus:
              type: array
              items:
                type: object
                properties:
                  country:
                    type: object
                    properties:
                      id:
                        type: integer
                      name:
                        type: string
                      code:
                        type: string
                  source:
                    type: string
                    nullable: true
            entities:
              type: array
              items:
                type: object
                properties:
                  entity:
                    type: object
                    properties:
                      id:
                        type: integer
                      name:
                        type: string
                      website:
                        type: string
                        nullable: true
                      type:
                        type: array
                        items:
                          type: string
                      country:
                        type: object
                        nullable: true
                        properties:
                          id:
                            type: integer
                          name:
                            type: string
                          code:
                            type: string
                  relationship_type:
                    type: string
                  source:
                    type: string
                    nullable: true
            persons_of_interest:
              type: array
              items:
                type: object
                properties:
                  person:
                    type: object
                    properties:
                      id:
                        type: integer
                      name:
                        type: string
                  role:
                    type: string
                    nullable: true
                  on_behalf_of:
                    type: object
                    nullable: true
                    properties:
                      id:
                        type: integer
                      name:
                        type: string
                  source:
                    type: string
                    nullable: true
            consortia_relations:
              type: object
              properties:
                parent_consortium:
                  type: object
                  nullable: true
                child_projects:
                  type: array
                  items:
                    type: object
                as_source:
                  type: array
                  items:
                    type: object
                    properties:
                      id:
                        type: integer
                      title:
                        type: string
                      website:
                        type: string
                        nullable: true
                      type:
                        type: string
                      source:
                        type: string
                        nullable: true
                as_target:
                  type: array
                  items:
                    type: object
                    properties:
                      id:
                        type: integer
                      title:
                        type: string
                      website:
                        type: string
                        nullable: true
                      type:
                        type: string
                      source:
                        type: string
                        nullable: true
            regulations:
              type: array
              items:
                type: object
                properties:
                  id:
                    type: integer
                  title:
                    type: string
                  country:
                    type: object
                    nullable: true
                    properties:
                      id:
                        type: integer
                      name:
                        type: string
                      code:
                        type: string
                  region:
                    type: object
                    nullable: true
                    properties:
                      title:
                        type: string
                      abbreviation:
                        type: string
                  source:
                    type: string
                    nullable: true
            standards:
              type: array
              items:
                type: object
                properties:
                  id:
                    type: integer
                  title:
                    type: string
                  url:
                    type: string
                    nullable: true
                    format: uri
                  type:
                    type: string
                    enum: ["Follows", "Management"]
                  source:
                    type: string
                    nullable: true
            did_methods:
              type: array
              items:
                type: object
                properties:
                  id:
                    type: integer
                  name:
                    type: string
                  source:
                    type: string
                    nullable: true
                  archived_source:
                    type: string
                    nullable: true
            dlt_instances:
              type: array
              items:
                type: object
                properties:
                  id:
                    type: integer
                  name:
                    type: string
                  website:
                    type: string
                    nullable: true
                  source:
                    type: string
                    nullable: true
            credential_profiles:
              type: array
              items:
                type: object
            inclusion_criteria:
              type: object
              nullable: true
              description: Metadata about how the project qualified for inclusion in the Web of Trust Map
              properties:
                uses_did_or_vc:
                  type: boolean
                  nullable: true
                  description: Whether the project uses W3C DIDs, VCs, or KERI
                uses_did_or_vc_sources:
                  type: array
                  description: Source URLs confirming the use of DIDs/VCs/KERI
                  items:
                    type: string
                    format: uri
                claims_ssi:
                  type: boolean
                  nullable: true
                  description: Whether the project claims to be SSI or decentralized
                claims_ssi_sources:
                  type: array
                  description: Source URLs confirming SSI/decentralization claims
                  items:
                    type: string
                    format: uri
                has_government_funding:
                  type: boolean
                  nullable: true
                  description: Whether the project received government funding or endorsement
                has_government_funding_sources:
                  type: array
                  description: Source URLs confirming government funding/endorsement
                  items:
                    type: string
                    format: uri
                has_known_partners:
                  type: boolean
                  nullable: true
                  description: Whether the project has well-known partners
                has_known_partners_sources:
                  type: array
                  description: Source URLs confirming partnerships
                  items:
                    type: string
                    format: uri
                announcement_date:
                  type: string
                  nullable: true
                  description: When the project was announced
                announcement_date_sources:
                  type: array
                  description: Source URLs confirming announcement date
                  items:
                    type: string
                    format: uri
                exception_reason:
                  type: string
                  nullable: true
                  description: Reason for any exception to standard inclusion criteria
            industries:
              type: array
              items:
                type: object
                properties:
                  id:
                    type: integer
                  name:
                    type: string
                  source:
                    type: string
                    nullable: true
            ai_description:
              type: string
              nullable: true
    
    ProjectRelationships:
      type: object
      description: All relationships for a specific project
      properties:
        project:
          type: object
          description: Basic project information
          properties:
            id:
              type: integer
              example: 118
            title:
              type: string
              example: "TradeTrust"
            type:
              type: string
              enum: ["DID Project", "Consortium"]
              example: "DID Project"
        entities:
          type: array
          description: Organizations related to the project
          items:
            type: object
            properties:
              type:
                type: string
                enum: ["Managing", "Funding", "Affiliation", "Member"]
                example: "Managing"
              entity:
                type: object
                properties:
                  id:
                    type: integer
                    example: 36
                  name:
                    type: string
                    example: "Infocomm Media Development Authority"
                  type:
                    type: array
                    items:
                      type: string
                    example: ["Public"]
                  website:
                    type: object
                    nullable: true
                  country:
                    type: object
                    nullable: true
                    description: Entity headquarters country
                    properties:
                      id:
                        type: integer
                        example: 167
                      name:
                        type: string
                        example: "Singapore"
                      code:
                        type: string
                        example: "SG"
              source:
                type: string
                nullable: true
                example: "https://www.imda.gov.sg/news-and-events/2019/05/tradetrust-launch"
              archived_source:
                type: string
                nullable: true
                example: "https://archive.ph/abc123"
        persons:
          type: array
          description: People associated with the project
          items:
            type: object
            properties:
              type:
                type: string
                example: "Person of Interest"
              person:
                type: object
                properties:
                  id:
                    type: integer
                    example: 1082
                  name:
                    type: string
                    example: "Stephen Curran"
              role:
                type: string
                nullable: true
                example: "Technical Lead"
              on_behalf_of:
                type: object
                nullable: true
                properties:
                  id:
                    type: integer
                  name:
                    type: string
              source:
                type: string
                nullable: true
                example: "https://archive.ph/abc123"
        dlt_instances:
          type: array
          description: Blockchain instances used by the project
          items:
            type: object
            properties:
              type:
                type: string
                example: "DLTinstancesupport"
              dlt_instance:
                type: object
                properties:
                  id:
                    type: integer
                    example: 87
                  name:
                    type: string
                    example: "Ethereum Mainnet"
                  website:
                    type: object
                    nullable: true
              source:
                type: string
                nullable: true
                example: "https://ethereum.org/docs"
              archived_source:
                type: string
                nullable: true
        regulations:
          type: array
          description: Regulations followed by the project
          items:
            type: object
            properties:
              type:
                type: string
                example: "followsRegulation"
              regulation:
                type: object
                properties:
                  id:
                    type: integer
                    example: 50
                  title:
                    type: string
                    example: "EU GDPR - EU General Data Protection Regulation"
                  country:
                    type: object
                    nullable: true
                    description: Regulation's country
                    properties:
                      id:
                        type: integer
                      name:
                        type: string
                      code:
                        type: string
              source:
                type: string
                nullable: true
                example: "https://gdpr.eu/compliance"
        standards:
          type: array
          description: Standards implemented by the project
          items:
            type: object
            properties:
              type:
                type: string
                enum: ["Follows", "Management"]
                example: "Follows"
              standard:
                type: object
                properties:
                  id:
                    type: integer
                    example: 15
                  title:
                    type: string
                    example: "W3C Verifiable Credentials Data Model"
              source:
                type: string
                nullable: true
                example: "https://w3.org/TR/vc-data-model"
              archived_source:
                type: string
                nullable: true
        did_methods:
          type: array
          description: DID methods used by the project
          items:
            type: object
            properties:
              type:
                type: string
                example: "Follows"
              did_method:
                type: object
                properties:
                  id:
                    type: integer
                    example: 123
                  name:
                    type: string
                    example: "ethr"
                  specification_url:
                    type: string
                    nullable: true
                    example: "https://github.com/decentralized-identity/ethr-did-resolver"
              source:
                type: string
                nullable: true
                example: "https://github.com/project/did-implementation"
              archived_source:
                type: string
                nullable: true
        projects:
          type: object
          description: Project-to-project relationships
          properties:
            outgoing:
              type: array
              description: Projects that this project has relationships with
              items:
                type: object
                properties:
                  type:
                    type: string
                    example: "Member"
                  target_project:
                    type: object
                    properties:
                      id:
                        type: integer
                        example: 456
                      title:
                        type: string
                        example: "Digital Identity Consortium"
                      website:
                        type: object
                        nullable: true
                  source:
                    type: string
                    nullable: true
            incoming:
              type: array
              description: Projects that have relationships with this project
              items:
                type: object
                properties:
                  type:
                    type: string
                    example: "Member"
                  source_project:
                    type: object
                    properties:
                      id:
                        type: integer
                        example: 789
                      title:
                        type: string
                        example: "Identity Foundation"
                      website:
                        type: object
                        nullable: true
                  source:
                    type: string
                    nullable: true
        summary:
          type: object
          description: Summary statistics of all relationships
          properties:
            total_entities:
              type: integer
              example: 5
            total_persons:
              type: integer
              example: 3
            total_dlt_instances:
              type: integer
              example: 2
            total_regulations:
              type: integer
              example: 1
            total_standards:
              type: integer
              example: 4
            total_did_methods:
              type: integer
              example: 2
            total_project_relations:
              type: integer
              example: 6

    EntitySummary:
      type: object
      required:
        - id
        - name
        - type
      properties:
        id:
          type: integer
          example: 649
        name:
          type: string
          example: "European Commission"
        trade_name:
          type: string
          nullable: true
          example: "European Commission"
        type:
          type: array
          items:
            type: string
            enum: ["Public", "Private"]
          example: ["Public"]
        lei:
          type: string
          nullable: true
          example: "254900ZNYA1FLUQ9U393"
        website:
          type: string
          nullable: true
          example: "https://commission.europa.eu/index_en"
        logo_url:
          type: string
          description: Full URL to the entity's logo image (derived from website domain)
          format: uri
          nullable: true
          example: "https://www.weboftrust.org/icons/commission.europa.eu.webp"
        address:
          type: string
          nullable: true
          example: "Rue Belliard 28 (Secondary entrance : Rue de l'Industrie 21), 1000 Bruxelles / Brussel, Belgium"
        country:
          type: object
          nullable: true
          properties:
            id:
              type: integer
              example: 17
            name:
              type: string
              example: "Belgium"
            code:
              type: string
              example: "BE"
        coordinates:
          type: object
          nullable: true
          properties:
            latitude:
              type: number
              example: 50.8422911
            longitude:
              type: number
              example: 4.3703692
        stats:
          type: object
          properties:
            total_links:
              type: integer
              example: 122

    EntityListResponse:
      type: object
      required:
        - data
        - pagination
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/EntitySummary'
        pagination:
          $ref: '#/components/schemas/PaginationInfo'
      example:
        data:
          - id: 649
            name: "European Commission"
            trade_name: "European Commission"
            type: ["Public"]
            lei: "254900ZNYA1FLUQ9U393"
            website: "https://commission.europa.eu/index_en"
            logo_url: "https://www.weboftrust.org/icons/commission.europa.eu.webp"
            address: "Rue Belliard 28 (Secondary entrance : Rue de l'Industrie 21), 1000 Bruxelles / Brussel, Belgium"
            country:
              id: 17
              name: "Belgium"
              code: "BE"
            coordinates:
              latitude: 50.8422911
              longitude: 4.3703692
            stats:
              total_links: 122
          - id: 3
            name: "Microsoft Corporation"
            trade_name: "Microsoft Corporation (Microsoft)"
            type: ["Private"]
            lei: "INR2EJN1ERAN0W5ZP974"
            website: "https://www.microsoft.com"
            logo_url: "https://www.weboftrust.org/icons-overwrite/microsoft.com.webp"
            address: "One Microsoft Way, Redmond, WA 98052, United States"
            country:
              id: 197
              name: "United States of America"
              code: "US"
            coordinates:
              latitude: 47.6435274501991
              longitude: -122.130607282319
            stats:
              total_links: 44
        pagination:
          page: 1
          per_page: 2
          total: 5545
          total_pages: 2773

    EntityDetail:
      allOf:
        - $ref: '#/components/schemas/EntitySummary'
        - type: object
          description: Extended entity information including all relationships
          properties:
            operates_dlts:
              type: array
              description: DLT instances operated by this entity
              items:
                type: object
                properties:
                  id:
                    type: integer
                    example: 87
                  name:
                    type: string
                    example: "Hyperledger Fabric Network"
                  website:
                    type: string
                    nullable: true
                    example: "https://www.hyperledger.org/use/fabric"
            project_relations:
              type: object
              description: Projects related to this entity by relationship type
              properties:
                managed:
                  type: array
                  description: Projects managed by this entity
                  items:
                    type: object
                    properties:
                      project:
                        type: object
                        properties:
                          id:
                            type: integer
                            example: 289
                          title:
                            type: string
                            example: "European Digital Credentials for Learning"
                          type:
                            type: string
                            example: "DID Project"
                          website:
                            type: string
                            nullable: true
                            example: "https://europa.eu/europass/en/europass-tools/european-digital-credentials"
                      source:
                        type: string
                        nullable: true
                        example: "https://did-map-resources.s3.amazonaws.com/Northern+Europe/European+Digital+Credentials+for+Learning/PDFs/EDC_presentation_Ilkido_Mazer.pdf"
                funded:
                  type: array
                  items:
                    type: object
                    properties:
                      project:
                        type: object
                        properties:
                          id:
                            type: integer
                          title:
                            type: string
                          type:
                            type: string
                          website:
                            type: string
                            nullable: true
                      source:
                        type: string
                        nullable: true
                affiliated:
                  type: array
                  items:
                    type: object
                    properties:
                      project:
                        type: object
                        properties:
                          id:
                            type: integer
                          title:
                            type: string
                          type:
                            type: string
                          website:
                            type: string
                            nullable: true
                      source:
                        type: string
                        nullable: true
            consortium_memberships:
              type: array
              items:
                type: object
                properties:
                  consortium:
                    type: object
                    properties:
                      id:
                        type: integer
                      title:
                        type: string
                      type:
                        type: string
                      website:
                        type: string
                        nullable: true
                  source:
                    type: string
                    nullable: true
            people:
              type: object
              properties:
                by_person:
                  type: array
                  items:
                    type: object
                    properties:
                      person:
                        type: object
                        properties:
                          id:
                            type: integer
                          name:
                            type: string
                      roles:
                        type: array
                        items:
                          type: string
                      source:
                        type: string
                        nullable: true
                on_behalf_of:
                  type: array
                  items:
                    type: object
                    properties:
                      person:
                        type: object
                        properties:
                          id:
                            type: integer
                          name:
                            type: string
                      role:
                        type: string
                        nullable: true
                      on_behalf_of_role:
                        type: string
                        nullable: true
                      project:
                        type: object
                        properties:
                          id:
                            type: integer
                          title:
                            type: string
                      source:
                        type: string
                        nullable: true
            did_method_relations:
              type: array
              items:
                type: object
                properties:
                  did_method:
                    type: object
                    properties:
                      id:
                        type: integer
                      name:
                        type: string
                      specification_url:
                        type: string
                        nullable: true
                  source:
                    type: string
                    nullable: true
                  archived_source:
                    type: string
                    nullable: true
            ai_description:
              type: string
              nullable: true
              example: "The European Commission is the executive branch of the European Union, responsible for proposing legislation, enforcing EU laws, and representing the EU internationally. In the context of digital identity, the Commission has been instrumental in developing the eIDAS regulation and the EU Digital Identity Wallet initiative."
            stats:
              type: object
              nullable: true
              properties:
                total_links:
                  type: integer
                  example: 122

    CountryListResponse:
      type: object
      required:
        - data
      properties:
        data:
          type: array
          items:
            type: object
            required:
              - id
              - name
              - code
              - stats
            properties:
              id:
                type: integer
                example: 1
              name:
                type: string
                example: "United States"
              code:
                type: string
                example: "US"
              formal_name:
                type: string
                nullable: true
                example: "United States of America"
              stats:
                type: object
                properties:
                  entities:
                    type: integer
                    example: 150
                  projects_hq:
                    type: integer
                    example: 45
                  projects_target:
                    type: integer
                    example: 78
                  regulations:
                    type: integer
                    example: 12
              projects_hq:
                type: array
                nullable: true
                description: List of all projects headquartered in this country (only included when include_projects_hq=true)
                items:
                  type: object
                  properties:
                    id:
                      type: integer
                      example: 118
                    title:
                      type: string
                      example: "Digital Identity Initiative"
                    type:
                      type: string
                      enum: ["DID Project", "Consortium"]
                      example: "DID Project"
                    status:
                      type: string
                      example: "Launched"
                    website:
                      type: string
                      nullable: true
                      format: uri
              entities_hq:
                type: array
                nullable: true
                description: List of all entities headquartered in this country (only included when include_entities_hq=true)
                items:
                  type: object
                  properties:
                    id:
                      type: integer
                      example: 649
                    name:
                      type: string
                      example: "Example Corporation"
                    type:
                      type: array
                      items:
                        type: string
                      example: ["Private"]
                    website:
                      type: string
                      nullable: true
                      format: uri
                    lei:
                      type: string
                      nullable: true
                      example: "254900ZNYA1FLUQ9U393"
              projects_target:
                type: array
                nullable: true
                description: List of all projects targeting this country (only included when include_projects_target=true)
                items:
                  type: object
                  properties:
                    id:
                      type: integer
                      example: 325
                    title:
                      type: string
                      example: "National ID System"
                    type:
                      type: string
                      enum: ["DID Project", "Consortium"]
                      example: "DID Project"
                    status:
                      type: string
                      example: "Pilot"
                    website:
                      type: string
                      nullable: true
                      format: uri
                    source:
                      type: string
                      nullable: true
                      format: uri
                      description: Source URL confirming project targets this country
              regulations:
                type: array
                nullable: true
                description: List of all regulations from this country (only included when include_regulations=true)
                items:
                  type: object
                  properties:
                    id:
                      type: integer
                      example: 50
                    title:
                      type: string
                      example: "Data Protection Act"
                    official_name:
                      type: string
                      nullable: true
                      example: "National Data Protection and Privacy Act 2023"
                    url:
                      type: string
                      nullable: true
                      format: uri
      example:
        data:
          - id: 1
            name: "Afghanistan"
            code: "AF"
            formal_name: "Islamic State of Afghanistan"
            stats:
              entities: 0
              projects_hq: 0
              projects_target: 0
              regulations: 0
          - id: 17
            name: "Belgium"
            code: "BE"
            formal_name: "Kingdom of Belgium"
            stats:
              entities: 58
              projects_hq: 12
              projects_target: 32
              regulations: 0

    IndustryListResponse:
      type: object
      required:
        - data
      properties:
        data:
          type: array
          items:
            type: object
            required:
              - id
              - name
              - project_count
            properties:
              id:
                type: integer
                example: 666
              name:
                type: string
                example: "Banking"
              project_count:
                type: integer
                example: 15
                description: Number of approved project relations
              projects:
                type: array
                nullable: true
                description: List of projects targeting this industry (only included when include_projects=true)
                items:
                  type: object
                  properties:
                    id:
                      type: integer
                      example: 123
                    title:
                      type: string
                      example: "Digital Identity Banking Solution"
                    type:
                      type: string
                      example: "DID Project"
                    status:
                      type: string
                      example: "Launched"
                    source:
                      type: string
                      nullable: true
                      format: uri
                      description: Source URL confirming the project targets this industry
                      example: "https://example-bank.com/digital-identity"
                    excerpt:
                      type: string
                      nullable: true
                      description: Text snippet from the source that confirms the project-industry connection
                      example: "Our digital banking solution leverages blockchain-based identity verification to streamline customer onboarding..."
      example:
        data:
          - id: 200
            name: "Agriculture"
            project_count: 12
            projects:
              - id: 160
                title: "3air Platform"
                type: "DID Project"
                status: "Launched"
                source: "https://3air.io/blog/3air-use-cases/"
                excerpt: "3air's blockchain platform enables farmers to track their produce from farm to table, ensuring transparency in agricultural supply chains."
              - id: 38
                title: "AGROS"
                type: "DID Project"
                status: "Launched"
                source: "https://agros.tech/farmers"
                excerpt: "AGROS provides digital identity solutions for farmers, enabling them to access credit and insurance services based on their verified agricultural history."
              - id: 9
                title: "Alastria ID"
                type: "DID Project"
                status: "Launched"
                source: "https://alastria.io/en/cases"
                excerpt: "Alastria's use cases include agricultural traceability, where farmers and cooperatives can certify the origin and quality of their products."
          - id: 666
            name: "Banking"
            project_count: 28
            projects:
              - id: 123
                title: "Digital Identity Banking Solution"
                type: "DID Project"
                status: "Launched"
                source: "https://example-bank.com/digital-identity"
                excerpt: "Our banking platform integrates decentralized identity verification to reduce KYC costs by 60% while improving customer onboarding experience."

    TermsResponse:
      type: object
      required:
        - license
        - attribution
        - usage_guidelines
        - api_specific
        - contact
        - disclaimer
        - last_updated
      properties:
        license:
          type: object
          properties:
            name:
              type: string
              example: "Creative Commons Attribution 4.0 International (CC BY 4.0)"
            url:
              type: string
              format: uri
              example: "https://creativecommons.org/licenses/by/4.0/"
            spdx_id:
              type: string
              example: "CC-BY-4.0"
        attribution:
          type: object
          properties:
            required:
              type: boolean
              example: true
            text:
              type: string
              example: "Data from Web of Trust Map (weboftrust.org) by Key State Capital (keystate.capital), licensed under CC BY 4.0"
            components:
              type: object
              properties:
                credit:
                  type: string
                links:
                  type: object
                  properties:
                    web_of_trust:
                      type: string
                      format: uri
                    key_state:
                      type: string
                      format: uri
                    license:
                      type: string
                      format: uri
                indicate_changes:
                  type: string
        usage_guidelines:
          type: object
          properties:
            commercial_use:
              type: string
            distribution:
              type: string
            modification:
              type: string
            private_use:
              type: string
            requirements:
              type: array
              items:
                type: string
        examples:
          type: object
          properties:
            minimal:
              type: string
            standard:
              type: string
            full:
              type: string
            with_modifications:
              type: string
        api_specific:
          type: object
          properties:
            rate_limits:
              type: object
              properties:
                general:
                  type: string
                search:
                  type: string
                graph:
                  type: string
            headers:
              type: object
              additionalProperties:
                type: string
            fair_use:
              type: string
              example: "Please cache responses appropriately and avoid unnecessary repeated requests"
        contact:
          type: object
          properties:
            questions:
              type: string
              format: email
              example: "api@weboftrust.org"
            website:
              type: string
              format: uri
              example: "https://www.weboftrust.org"
            issues:
              type: string
              format: uri
              example: "https://github.com/weboftrust/api-docs/issues"
        disclaimer:
          type: string
          example: "The data is provided 'as is' without warranty of any kind. Web of Trust Map and Key State Capital make no representations about the suitability, reliability, availability, timeliness, or accuracy of the data."
        last_updated:
          type: string
          format: date-time
          example: "2025-09-09T15:32:54.168Z"

    # DID Methods schemas
    DidMethodSummary:
      type: object
      required:
        - id
        - name
        - project_count
      properties:
        id:
          type: integer
          example: 1738169370023
        name:
          type: string
          example: "ethr"
        specification_url:
          type: string
          format: uri
          nullable: true
          example: "https://github.com/decentralized-identity/ethr-did-resolver/blob/master/doc/did-method-spec.md"
        contact_name:
          type: string
          nullable: true
        contact_website:
          type: string
          format: uri
          nullable: true
        project_count:
          type: string
          description: Number of projects using this DID method (as string)
          example: "5"
        source:
          type: string
          format: uri
          nullable: true
        archived_source:
          type: string
          format: uri
          nullable: true
        projects:
          type: array
          nullable: true
          description: List of all projects using this DID method (only included when include_projects=true)
          items:
            type: object
            properties:
              id:
                type: integer
                example: 118
              title:
                type: string
                example: "TradeTrust"
              type:
                type: string
                enum: ["DID Project", "Consortium"]
                example: "DID Project"
              status:
                type: string
                example: "Launched"
              source:
                type: string
                nullable: true
                format: uri
                description: Live source URL confirming the project uses this DID method
                example: "https://github.com/tradetrust/documentation"
              archived_source:
                type: string
                nullable: true
                format: uri
                description: Archived version of the source
                example: "https://web.archive.org/web/20230315120000/https://github.com/tradetrust/documentation"
              excerpt:
                type: string
                nullable: true
                description: Text snippet from the source that confirms the project-DID method connection
                example: "TradeTrust uses the did:ethr method for decentralized identity management across Ethereum networks."

    DidMethodListResponse:
      type: object
      required:
        - data
        - pagination
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/DidMethodSummary'
        pagination:
          $ref: '#/components/schemas/PaginationInfo'
      example:
        data:
          - id: 1738169370023
            name: "3"
            specification_url: "https://cips.ceramic.network/CIPs/cip-79"
            contact_name: "3Box Labs"
            contact_website: "https://3boxlabs.com/"
            project_count: "0"
            source: "https://diddirectory.com/"
            archived_source: null
          - id: 1738169371476
            name: "ethr"
            specification_url: "https://github.com/decentralized-identity/ethr-did-resolver/blob/master/doc/did-method-spec.md"
            contact_name: "ConsenSys"
            contact_website: "https://consensys.net/"
            project_count: "5"
            source: "https://diddirectory.com/"
            archived_source: null
            projects:
              - id: 118
                title: "TradeTrust"
                type: "DID Project"
                status: "Launched"
                source: "https://github.com/tradetrust/documentation"
                archived_source: "https://web.archive.org/web/20230315120000/https://github.com/tradetrust/documentation"
                excerpt: "TradeTrust uses the did:ethr method for decentralized identity management across Ethereum networks."
              - id: 237
                title: "uPort"
                type: "DID Project"
                status: "Discontinued"
                source: "https://github.com/uport-project/ethr-did"
                archived_source: null
                excerpt: "uPort pioneered the use of did:ethr for self-sovereign identity on Ethereum."
        pagination:
          page: 1
          per_page: 2
          total: 207
          total_pages: 104

    DidMethodDetail:
      allOf:
        - $ref: '#/components/schemas/DidMethodSummary'
        - type: object
          description: Extended DID method information including all projects using it
          properties:
            ai_description:
              type: string
              nullable: true
              description: AI-generated description of the DID method
              example: "The did:ethr method allows any Ethereum account to become a valid identifier for DID documents. It uses Ethereum addresses as fully self-managed Decentralized Identifiers and implements the DID standard through smart contracts on Ethereum-compatible blockchains."
            projects:
              type: array
              description: Projects that implement or use this DID method
              items:
                type: object
                properties:
                  project:
                    type: object
                    properties:
                      id:
                        type: integer
                        example: 118
                      title:
                        type: string
                        example: "uPort"
                      type:
                        type: string
                        enum: ["DID Project", "Consortium"]
                        example: "DID Project"
                      website:
                        type: string
                        nullable: true
                        example: "https://www.uport.me/"
                  source:
                    type: string
                    nullable: true
                    description: Live source URL
                    example: "https://github.com/uport-project/ethr-did"
                  archived_source:
                    type: string
                    nullable: true
                    description: Archived version of the source
                    example: "https://web.archive.org/web/20230315120000/https://github.com/uport-project/ethr-did"
                  excerpt:
                    type: string
                    nullable: true
                    description: Text snippet from the source that confirms the project-DID method connection
                    example: "uPort uses the did:ethr method to enable self-sovereign identity on Ethereum, allowing users to create and manage their own decentralized identifiers."
            dlt_instances:
              type: array
              items:
                type: object
                properties:
                  dlt_instance:
                    type: object
                    properties:
                      id:
                        type: integer
                      name:
                        type: string
                      operator:
                        type: object
                        nullable: true
                        properties:
                          id:
                            type: integer
                          name:
                            type: string
                  source:
                    type: string
                    nullable: true
                  archived_source:
                    type: string
                    nullable: true
            entities:
              type: array
              items:
                type: object
                properties:
                  entity:
                    type: object
                    properties:
                      id:
                        type: integer
                      name:
                        type: string
                      type:
                        type: array
                        items:
                          type: string
                      website:
                        type: string
                        nullable: true
                  source:
                    type: string
                  archived_source:
                    type: string
                    nullable: true
            persons:
              type: array
              items:
                type: object
                properties:
                  person:
                    type: object
                    properties:
                      id:
                        type: integer
                      name:
                        type: string
                  source:
                    type: string
                  archived_source:
                    type: string
                    nullable: true

    # DLT Instances schemas
    DltInstanceSummary:
      type: object
      description: Summary information for a DLT instance (blockchain)
      required:
        - id
        - name
        - stats
      properties:
        id:
          type: integer
          example: 2
        name:
          type: string
          example: "Ethereum"
        website:
          type: string
          format: uri
          nullable: true
          example: "https://ethereum.org/en/"
        logo_url:
          type: string
          format: uri
          nullable: true
          description: Full URL to the blockchain's logo
          example: "https://www.weboftrust.org/icons-overwrite/ethereum.org.png"
        operator:
          type: object
          nullable: true
          description: Entity operating this blockchain
          properties:
            id:
              type: integer
              example: 82
            name:
              type: string
              example: "Sovrin Foundation"
        dlt:
          type: object
          description: The underlying DLT technology
          nullable: true
          properties:
            id:
              type: integer
              example: 1
            title:
              type: string
              example: "Ethereum"
        stats:
          type: object
          properties:
            total_links:
              type: integer
              example: 61
        projects:
          type: array
          nullable: true
          description: List of projects using this DLT instance (only included when include_projects=true)
          items:
            type: object
            properties:
              id:
                type: integer
                example: 118
              title:
                type: string
                example: "TradeTrust"
              type:
                type: string
                enum: ["DID Project", "Consortium"]
                example: "DID Project"
              status:
                type: string
                example: "Launched"
              source:
                type: string
                nullable: true
                format: uri
                description: Source URL confirming the project uses this blockchain
                example: "https://archive.ph/QD2fF#selection-1831.0-1818.14"

    DltInstanceListResponse:
      type: object
      required:
        - data
        - pagination
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/DltInstanceSummary'
        pagination:
          $ref: '#/components/schemas/PaginationInfo'
      example:
        data:
          - id: 2
            name: "Ethereum"
            website: "https://ethereum.org/en/"
            logo_url: "https://www.weboftrust.org/icons-overwrite/ethereum.org.png"
            operator: null
            dlt:
              id: 1
              title: "Ethereum"
            stats:
              total_links: 61
          - id: 32
            name: "Sovrin"
            website: "https://sovrin.org/"
            logo_url: "https://www.weboftrust.org/icons-overwrite/sovrin.org.webp"
            operator:
              id: 82
              name: "Sovrin Foundation"
            dlt:
              id: 4
              title: "Hyperledger Indy"
            stats:
              total_links: 41
        pagination:
          page: 1
          per_page: 2
          total: 140
          total_pages: 70

    DltInstanceDetail:
      allOf:
        - $ref: '#/components/schemas/DltInstanceSummary'
        - type: object
          description: Extended DLT instance (blockchain) information
          properties:
            block_explorer:
              type: string
              format: uri
              nullable: true
              description: Block explorer URL for this blockchain
              example: "https://etherscan.io/"
            ai_description:
              type: string
              nullable: true
              description: AI-generated description of this blockchain
              example: "Ethereum Mainnet is the primary public blockchain for the Ethereum network, launched in July 2015. It serves as the foundation for decentralized applications (dApps) and smart contracts, using Ether (ETH) as its native cryptocurrency."
            projects:
              type: array
              description: Projects using this blockchain
              items:
                type: object
                properties:
                  project:
                    type: object
                    properties:
                      id:
                        type: integer
                        example: 118
                      title:
                        type: string
                        example: "uPort"
                      type:
                        type: string
                        enum: ["DID Project", "Consortium"]
                        example: "DID Project"
                      website:
                        type: string
                        nullable: true
                        example: "https://www.uport.me/"
                  source:
                    type: string
                    nullable: true
                    example: "https://ethereum.org/en/developers/docs/"
            did_methods:
              type: array
              items:
                type: object
                properties:
                  did_method:
                    type: object
                    properties:
                      id:
                        type: integer
                      name:
                        type: string
                      specification_url:
                        type: string
                        nullable: true
                  source:
                    type: string
                  archived_source:
                    type: string
                    nullable: true

    # DLT Technologies schemas
    DltSummary:
      type: object
      required:
        - id
        - title
        - instance_count
        - stats
      properties:
        id:
          type: integer
          example: 4
        title:
          type: string
          example: "Hyperledger Indy"
        type:
          type: string
          nullable: true
          example: "Public PoA"
        has_specific_operator:
          type: boolean
          nullable: true
          description: Whether the DLT technology has a specific operator
          example: true
        website:
          type: string
          format: uri
          nullable: true
          example: "https://www.lfdecentralizedtrust.org/projects/hyperledger-indy"
        logo_url:
          type: string
          format: uri
          nullable: true
          example: "https://www.weboftrust.org/icons-overwrite/lfdecentralizedtrust.org.webp"
        instance_count:
          type: integer
          example: 17
        stats:
          type: object
          properties:
            total_links:
              type: integer
              example: 20
        projects:
          type: array
          nullable: true
          description: List of all projects using this DLT technology (only included when include_projects=true)
          items:
            type: object
            properties:
              id:
                type: integer
                example: 32
              title:
                type: string
                example: "Sovrin Network"
              type:
                type: string
                enum: ["DID Project", "Consortium"]
                example: "DID Project"
              status:
                type: string
                example: "Launched"
              source:
                type: string
                nullable: true
                format: uri
                description: Source URL confirming the project uses this DLT technology
                example: "https://sovrin.org/the-sovrin-network/"
        instances:
          type: array
          nullable: true
          description: List of all blockchain instances based on this DLT technology (only included when include_instances=true)
          items:
            type: object
            properties:
              id:
                type: integer
                example: 32
              name:
                type: string
                example: "Sovrin"
              website:
                type: string
                nullable: true
                format: uri
                example: "https://sovrin.org/"
              operator:
                type: object
                nullable: true
                description: Entity operating this blockchain instance
                properties:
                  id:
                    type: integer
                    example: 82
                  name:
                    type: string
                    example: "Sovrin Foundation"

    DltListResponse:
      type: object
      required:
        - data
        - pagination
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/DltSummary'
        pagination:
          $ref: '#/components/schemas/PaginationInfo'
      example:
        data:
          - id: 4
            title: "Hyperledger Indy"
            type: "Public PoA"
            has_specific_operator: true
            website: "https://www.lfdecentralizedtrust.org/projects/hyperledger-indy"
            logo_url: "https://www.weboftrust.org/icons-overwrite/lfdecentralizedtrust.org.webp"
            instance_count: 17
            stats:
              total_links: 20
          - id: 16
            title: "Tendermint"
            type: "Public PoS"
            has_specific_operator: false
            website: "https://tendermint.com/"
            logo_url: "https://www.weboftrust.org/icons/tendermint.com.webp"
            instance_count: 7
            stats:
              total_links: 8
        pagination:
          page: 1
          per_page: 2
          total: 142
          total_pages: 71

    DltDetail:
      allOf:
        - $ref: '#/components/schemas/DltSummary'
        - type: object
          description: Extended DLT technology information including all implementations
          properties:
            ai_description:
              type: string
              nullable: true
              description: AI-generated description of the DLT technology
              example: "Ethereum is a decentralized, open-source blockchain platform featuring smart contract functionality. Created by Vitalik Buterin and launched in 2015, it enables developers to build and deploy decentralized applications (dApps) and has become the foundation for DeFi, NFTs, and numerous identity solutions."
            total_instances:
              type: integer
              description: Number of blockchain instances based on this technology
              example: 5
            total_projects:
              type: integer
              description: Number of projects using this DLT technology
              example: 127
            instances:
              type: array
              description: Blockchain instances based on this DLT technology
              items:
                type: object
                properties:
                  id:
                    type: integer
                    example: 87
                  name:
                    type: string
                    example: "Ethereum Mainnet"
                  website:
                    type: string
                    nullable: true
                    example: "https://ethereum.org"
                  operator:
                    type: object
                    nullable: true
                    description: Entity operating this instance
                    properties:
                      id:
                        type: integer
                        example: 649
                      name:
                        type: string
                  projects_using:
                    type: integer

    # Standards schemas
    StandardSummary:
      type: object
      required:
        - id
        - title
        - stats
      properties:
        id:
          type: integer
          example: 12
        title:
          type: string
          example: "W3C Verifiable Credentials Data Model"
        url:
          type: string
          format: uri
          nullable: true
          example: "https://www.w3.org/TR/vc-data-model/"
        stats:
          type: object
          properties:
            total_links:
              type: integer
              example: 215
        projects:
          type: array
          nullable: true
          description: List of all projects following this standard (only included when include_projects=true)
          items:
            type: object
            properties:
              id:
                type: integer
                example: 118
              title:
                type: string
                example: "TradeTrust"
              type:
                type: string
                enum: ["DID Project", "Consortium"]
                example: "DID Project"
              website:
                type: string
                nullable: true
                format: uri
                example: "https://www.tradetrust.io/"
              source:
                type: string
                nullable: true
                format: uri
                description: Source URL confirming the project follows this standard
                example: "https://archive.li/UpHV3#52%"

    StandardListResponse:
      type: object
      required:
        - data
        - pagination
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/StandardSummary'
        pagination:
          $ref: '#/components/schemas/PaginationInfo'
      example:
        data:
          - id: 12
            title: "W3C Verifiable Credentials Data Model"
            url: "https://www.w3.org/TR/vc-data-model/"
            stats:
              total_links: 215
          - id: 3
            title: "W3C Decentralized Identifiers (DIDs)"
            url: "https://www.w3.org/TR/did-core/"
            stats:
              total_links: 184
        pagination:
          page: 1
          per_page: 2
          total: 88
          total_pages: 44

    StandardDetail:
      allOf:
        - $ref: '#/components/schemas/StandardSummary'
        - type: object
          description: Extended standard information including all implementing projects
          properties:
            ai_description:
              type: string
              nullable: true
              description: AI-generated description of the standard
              example: "The W3C Verifiable Credentials Data Model 1.0 is a specification that provides a mechanism to express credentials on the Web in a way that is cryptographically secure, privacy respecting, and machine-verifiable."
            projects_following_count:
              type: integer
              description: Number of projects implementing this standard
              example: 42
            projects_following:
              type: array
              description: Projects that implement or follow this standard
              items:
                type: object
                properties:
                  project:
                    type: object
                    properties:
                      id:
                        type: integer
                        example: 118
                      title:
                        type: string
                        example: "TradeTrust"
                      type:
                        type: string
                        enum: ["DID Project", "Consortium"]
                        example: "DID Project"
                      website:
                        type: string
                        nullable: true
                        example: "https://www.tradetrust.io/"
                  source:
                    type: string
                    nullable: true
                    description: Source confirming standard implementation
                    example: "https://www.w3.org/TR/vc-data-model/#implementations"
            projects_managing:
              type: array
              items:
                type: object
                properties:
                  project:
                    type: object
                    properties:
                      id:
                        type: integer
                      title:
                        type: string
                      type:
                        type: string
                      website:
                        type: string
                        nullable: true
                  source:
                    type: string
                    nullable: true

    # People schemas
    PersonSummary:
      type: object
      required:
        - id
        - name
        - stats
      properties:
        id:
          type: integer
          example: 1082
        name:
          type: string
          example: "Stephen Curran"
        stats:
          type: object
          properties:
            total_links:
              type: integer
              example: 16

    PeopleListResponse:
      type: object
      required:
        - data
        - pagination
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/PersonSummary'
        pagination:
          $ref: '#/components/schemas/PaginationInfo'
      example:
        data:
          - id: 1082
            name: "Stephen Curran"
            stats:
              total_links: 16
          - id: 651
            name: "Kaliya Young"
            stats:
              total_links: 13
        pagination:
          page: 1
          per_page: 2
          total: 4532
          total_pages: 2266

    PersonDetail:
      allOf:
        - $ref: '#/components/schemas/PersonSummary'
        - type: object
          description: Extended person information including all project affiliations
          properties:
            ai_description:
              type: string
              nullable: true
              description: AI-generated biography or description
              example: "Stephen Curran is a prominent figure in the decentralized identity space, serving as the Technical Lead for the Government of British Columbia's Verifiable Organizations Network. He has been instrumental in developing Hyperledger Aries and promoting interoperable digital credentials."
            project_relations:
              type: array
              description: Projects this person is associated with
              items:
                type: object
                properties:
                  project:
                    type: object
                    properties:
                      id:
                        type: integer
                        example: 342
                      title:
                        type: string
                        example: "Hyperledger Aries"
                      type:
                        type: string
                        enum: ["DID Project", "Consortium"]
                        example: "DID Project"
                      website:
                        type: string
                        nullable: true
                        example: "https://www.hyperledger.org/use/aries"
                  role:
                    type: object
                    nullable: true
                    description: Person's role in the project
                    properties:
                      id:
                        type: integer
                        example: 1
                      title:
                        type: string
                  on_behalf_of_entity:
                    type: object
                    nullable: true
                    properties:
                      id:
                        type: integer
                      name:
                        type: string
                      type:
                        type: array
                        items:
                          type: string
                  source:
                    type: string
                    nullable: true
            did_method_relations:
              type: array
              items:
                type: object
                properties:
                  did_method:
                    type: object
                    properties:
                      id:
                        type: integer
                      name:
                        type: string
                      specification_url:
                        type: string
                        nullable: true
                  source:
                    type: string
                  archived_source:
                    type: string
                    nullable: true

    # Regulations schemas
    RegulationSummary:
      type: object
      required:
        - id
        - title
        - stats
      properties:
        id:
          type: integer
          example: 50
        title:
          type: string
          example: "EU GDPR - EU General Data Protection Regulation"
        official_name:
          type: string
          nullable: true
          example: "Regulation (EU) 2016/679 of the European Parliament and of the Council of 27 April 2016 (General Data Protection Regulation)"
        url:
          type: string
          format: uri
          nullable: true
          example: "https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A02016R0679-20160504"
        country:
          type: object
          nullable: true
          properties:
            id:
              type: integer
              example: 17
            name:
              type: string
              example: "Belgium"
            code:
              type: string
              example: "BE"
        stats:
          type: object
          properties:
            total_links:
              type: integer
              example: 179

    RegulationListResponse:
      type: object
      required:
        - data
        - pagination
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/RegulationSummary'
        pagination:
          $ref: '#/components/schemas/PaginationInfo'
      example:
        data:
          - id: 50
            title: "EU GDPR - EU General Data Protection Regulation"
            official_name: "Regulation (EU) 2016/679 of the European Parliament and of the Council of 27 April 2016 (General Data Protection Regulation)"
            url: "https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A02016R0679-20160504"
            country: null
            stats:
              total_links: 179
          - id: 1
            title: "eIDAS - electronic IDentification, Authentication and trust Services Regulation"
            official_name: "Regulation (EU) No 910/2014 of the European Parliament and of the Council of 23 July 2014"
            url: "https://digital-strategy.ec.europa.eu/en/policies/eidas-regulation"
            country: null
            stats:
              total_links: 66
        pagination:
          page: 1
          per_page: 2
          total: 46
          total_pages: 23

    RegulationDetail:
      allOf:
        - $ref: '#/components/schemas/RegulationSummary'
        - type: object
          description: Extended regulation information including all compliant projects
          properties:
            region:
              type: object
              nullable: true
              description: Geographic region where regulation applies
              properties:
                title:
                  type: string
                  example: "Europe"
                abbreviation:
                  type: string
                  example: "EU"
            ai_description:
              type: string
              nullable: true
              description: AI-generated description of the regulation
              example: "The General Data Protection Regulation (GDPR) is a comprehensive data protection law that came into effect on May 25, 2018. It applies to all organizations processing personal data of EU residents, regardless of the organization's location, and establishes strict requirements for data protection, user consent, and privacy rights."
            projects_following:
              type: array
              description: Projects that comply with this regulation
              items:
                type: object
                properties:
                  project:
                    type: object
                    properties:
                      id:
                        type: integer
                        example: 118
                      title:
                        type: string
                        example: "TradeTrust"
                      type:
                        type: string
                        enum: ["DID Project", "Consortium"]
                        example: "DID Project"
                      website:
                        type: string
                        nullable: true
                  source:
                    type: string
                    nullable: true

    # Graph schemas
    GraphNode:
      type: object
      required:
        - id
        - title
        - type
        - countryCodes
        - industryIds
      properties:
        id:
          type: string
          description: Prefixed node ID (e.g., "project-123", "entity-456")
          example: "project-118"
        title:
          type: string
          description: Display name of the node
          example: "TradeTrust"
        type:
          type: string
          description: Node type
          enum: ["DID Project", "Consortium", "Public", "Private", "Person", "dltinstance", "dlt", "Regulation", "Standard", "didmethod"]
        website:
          type: object
          nullable: true
          properties:
            Description:
              type: string
            Url:
              type: string
              format: uri
        status:
          type: string
          nullable: true
          enum: ["Launched", "Announced", "Pilot", "Discontinued", "Failed to Disclose", "Active", "Inactive"]
        image:
          type: string
          nullable: true
          description: Path to node icon/image
        domain:
          type: string
          nullable: true
          description: Website domain
        description:
          type: string
          nullable: true
        country:
          type: string
          nullable: true
          description: Country code
        countryCodes:
          type: array
          items:
            type: string
          description: Array of relevant country codes
        launch:
          type: string
          nullable: true
          description: Launch date
        latitude:
          type: number
          nullable: true
        longitude:
          type: number
          nullable: true
        score:
          type: number
          nullable: true
          description: Node importance score
        total_links:
          type: integer
          nullable: true
          description: Total number of relationships
        industryIds:
          type: array
          items:
            type: string
          description: Array of industry IDs

    GraphLink:
      type: object
      required:
        - targetNodeId
        - sourceNodeId
        - type
        - label
      properties:
        targetNodeId:
          type: string
          description: Target node ID
          example: "project-118"
        sourceNodeId:
          type: string
          description: Source node ID
          example: "entity-456"
        type:
          type: string
          description: Relationship type
          enum: ["Managing", "Funding", "Affiliation", "Member", "Person of Interest", "DLTinstancesupport", "DLT based on", "followsRegulation", "Follows", "Management", "Interoperability"]
        label:
          type: string
          description: Human-readable description of the relationship
          example: "TradeTrust is managed by Singapore Government"

    GraphNodesResponse:
      type: object
      required:
        - data
        - metadata
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/GraphNode'
        metadata:
          type: object
          required:
            - total
            - compressed
            - format
            - cache_timestamp
          properties:
            total:
              type: integer
              description: Total number of nodes
            compressed:
              type: boolean
              description: Whether the data is compressed
            format:
              type: string
              enum: ["json", "compressed"]
            cache_timestamp:
              type: string
              format: date-time

    GraphLinksResponse:
      type: object
      required:
        - data
        - metadata
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/GraphLink'
        metadata:
          type: object
          required:
            - total
            - compressed
            - format
            - cache_timestamp
          properties:
            total:
              type: integer
              description: Total number of links
            compressed:
              type: boolean
              description: Whether the data is compressed
            format:
              type: string
              enum: ["json", "compressed"]
            cache_timestamp:
              type: string
              format: date-time


  responses:
    InternalServerError:
      description: Internal server error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: "internal_error"
              message: "Failed to fetch search results"
    
    BadRequest:
      description: Bad request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: "invalid_parameter"
              message: "Invalid page parameter"
    
    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: "not_found"
              message: "Project not found"

  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: API key required for all endpoints (except /request-key, /terms, and /docs). Get your key at https://www.weboftrust.org/api

security:
  - ApiKeyAuth: []
