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
-
Clone the repository
git clone <repository-url> cd wim-api -
Install dependencies
go mod tidy -
Start the database
docker compose up -d db -
Run the application
Docker with hot reloading (recommended):
docker compose up --build appOr locally with Air:
export WIMAPI_DATABASE_HOST=localhost airOr directly:
export WIMAPI_DATABASE_HOST=localhost go run cmd/api/main.go -
Seed sample data (optional)
WIMAPI_DATABASE_HOST=localhost go run ./cmd/seed -
Test the API
curl http://localhost:8080/health curl http://localhost:8080/api/v1/relying-parties
Documentation
| Document | Description |
|---|---|
| docs/api.md | API server architecture, technology choices, data models, adding filters/endpoints |
| docs/crawler.md | Crawler architecture, running, configuration, sources, state management |
| docs/ipfs-publisher.md | IPFS publisher architecture, running, configuration, chain linking, multi-publisher coordination |
| docs/tools.md | Seed and mock generator CLI tools — flags, usage, when to use which |
| docs/development.md | Dev setup, Docker, configuration, database migrations, testing |
| docs/database-schema-new.md | Full 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.