WhoIdentifies.me API

March 19, 2026 · View on GitHub

API for tracking and monitoring eIDAS (European Identity and Access Management System) Wallet Relying Parties and their intended uses. Built for the WhoIdentifies.me project by epicenter.works.

Features

  • RESTful API for accessing eIDAS registry data (relying parties, intended uses, attestations, claims)
  • Advanced filtering and full-text search with wildcard pattern control
  • Dynamic filter value discovery with autocomplete
  • Cursor-based pagination for efficient deep listing
  • Multi-source data crawler with crash recovery and change detection
  • IPFS publishing to Storacha with chain-linked audit trail
  • Automatic filter indexing via database triggers
  • Auto-generated API documentation (OpenAPI via Huma)

Technologies

  • Go 1.24+ — Programming language
  • Gin — HTTP web framework
  • PostgreSQL — Database with JSONB support and triggers
  • pgx/v5 — PostgreSQL driver and toolkit
  • Viper — Configuration management (YAML + environment variables)
  • slog — Structured logging
  • golang-migrate — Database migration management
  • testify — Testing toolkit with assertions and mocks
  • Air — Hot reloading for development
  • Docker & Docker Compose — Containerization and orchestration

Project Structure

wim-api/
├── cmd/
│   ├── api/                 # API server entry point
│   ├── crawler/             # Data crawler entry point
│   ├── ipfs-publisher/      # IPFS publisher entry point
│   ├── seed/                # Database seeding utility
│   └── generate-mock/       # Mock data generator for crawler testing
├── internal/
│   ├── config/              # Configuration management
│   ├── crawler/             # Crawler components (orchestrator, sources, state)
│   ├── ipfspublisher/       # IPFS publisher (Storacha upload, chain linking)
│   ├── snapshot/            # Shared snapshot serialization and compression
│   ├── database/            # Database connection, migrations, seed utilities
│   ├── models/              # Data models
│   ├── repositories/        # Database access layer
│   ├── server/              # HTTP server, route handlers, middleware
│   ├── services/            # Business logic layer
│   └── utils/               # Pagination, cursor encoding
├── docs/                    # Documentation
├── scripts/                 # Test and utility scripts
├── config.yaml              # Configuration file
└── docker-compose.yml       # Docker Compose configuration

Quick Start

  1. Clone the repository

    git clone <repository-url>
    cd wim-api
    
  2. Install dependencies

    go mod tidy
    
  3. Start the database

    docker compose up -d db
    
  4. Run the application

    Docker with hot reloading (recommended):

    docker compose up --build app
    

    Or locally with Air:

    export WIMAPI_DATABASE_HOST=localhost
    air
    

    Or directly:

    export WIMAPI_DATABASE_HOST=localhost
    go run cmd/api/main.go
    
  5. Seed sample data (optional)

    WIMAPI_DATABASE_HOST=localhost go run ./cmd/seed
    
  6. Test the API

    curl http://localhost:8080/health
    curl http://localhost:8080/api/v1/relying-parties
    

Documentation

DocumentDescription
docs/api.mdAPI server architecture, technology choices, data models, adding filters/endpoints
docs/crawler.mdCrawler architecture, running, configuration, sources, state management
docs/ipfs-publisher.mdIPFS publisher architecture, running, configuration, chain linking, multi-publisher coordination
docs/tools.mdSeed and mock generator CLI tools — flags, usage, when to use which
docs/development.mdDev setup, Docker, configuration, database migrations, testing
docs/database-schema-new.mdFull database schema reference

API endpoint documentation is auto-generated at runtime — start the server and visit /docs for the interactive OpenAPI explorer.

Contributing

Contributions are welcome! Please read the contributing guidelines before submitting pull requests.

License

This project is licensed under the MIT License.