API Reference
The Monopigi API is a REST API at https://api.monopigi.com. All data endpoints are prefixed with /v1.
For interactive documentation with try-it-out, see the Swagger UI or ReDoc.
Base URL
https://api.monopigi.com
Authentication
All endpoints require a Bearer token (see Authentication):
Authorization: Bearer mp_live_YOUR_API_KEY
GET /v1/sources
List all available data sources and their status.
Tier: Free
curl -H "Authorization: Bearer $TOKEN" \
"https://api.monopigi.com/v1/sources"
Response:
[
{
"name": "ted",
"label": "TED - Tenders Electronic Daily",
"status": "active",
"description": "EU public procurement notices for Greece",
"country": "GR"
},
{
"name": "diavgeia",
"label": "Diavgeia",
"status": "active",
"description": "Greek government transparency decisions",
"country": "GR"
}
]
GET /v1/search
Full-text search across all sources or a specific source.
Tier: Pro
| Parameter | Type | Default | Description |
|---|---|---|---|
q | string | required | Search query |
source | string | — | Filter to a single source |
limit | integer | 100 | Results per page (1-1000) |
offset | integer | 0 | Skip results for pagination |
curl -H "Authorization: Bearer $TOKEN" \
"https://api.monopigi.com/v1/search?q=hospital+procurement&limit=5"
Response:
{
"query": "hospital procurement",
"results": [
{
"source_id": "ted_2026_123456",
"source": "ted",
"country": "GR",
"title": "Hospital equipment procurement notice",
"doc_type": "notice",
"doc_category": "procurement",
"published_at": "2026-03-15T00:00:00Z",
"source_url": "https://ted.europa.eu/...",
"language": "el",
"quality_score": 0.95
}
],
"total": 42,
"limit": 5,
"offset": 0
}
GET /v1/{source}/documents
Browse documents from a specific source.
Tier: Free (metadata only), Pro (full content)
| Parameter | Type | Default | Description |
|---|---|---|---|
limit | integer | 100 | Results per page (1-1000) |
offset | integer | 0 | Skip results for pagination |
since | string | — | ISO date (YYYY-MM-DD), only documents published after |
Valid sources: ted, diavgeia, elstat, rae, data_gov_gr, mitos, kimdis, e_procurement (alias for kimdis), geodata
curl -H "Authorization: Bearer $TOKEN" \
"https://api.monopigi.com/v1/ted/documents?limit=10&since=2026-01-01"
Response:
{
"source": "ted",
"documents": [
{
"source_id": "ted_2026_123456",
"source": "ted",
"country": "GR",
"title": "Supply of medical equipment",
"doc_type": "notice",
"doc_category": "procurement",
"published_at": "2026-03-10T00:00:00Z",
"source_url": "https://ted.europa.eu/...",
"language": "el",
"quality_score": 0.92
}
],
"total": 2500,
"limit": 10,
"offset": 0
}
On the Free tier, an _upgrade_hint field is included suggesting a Pro upgrade for full content.
GET /v1/documents/{source_id}/content
Download the original content of a document.
Tier: Enterprise
| Parameter | Type | Description |
|---|---|---|
source_id | path | The document's source_id |
curl -H "Authorization: Bearer $TOKEN" \
"https://api.monopigi.com/v1/documents/diavgeia_ABC123/content"
Returns the original document (PDF, XML, or JSON) with the appropriate Content-Type header.
GET /v1/stats
Platform-wide statistics: total documents, per-source counts, and last update times.
Tier: Free
curl -H "Authorization: Bearer $TOKEN" \
"https://api.monopigi.com/v1/stats"
Response:
{
"total_documents": 17865,
"sources": {
"data_gov_gr": {
"documents": 12811,
"last_updated": "2026-03-21T06:00:00Z",
"avg_quality": 0.87
},
"mitos": {
"documents": 2000,
"last_updated": "2026-03-21T06:00:00Z",
"avg_quality": 0.91
}
}
}
GET /v1/usage
Your API usage for today.
Tier: Free
curl -H "Authorization: Bearer $TOKEN" \
"https://api.monopigi.com/v1/usage"
Response:
{
"tier": "pro",
"daily_quota": 5000,
"daily_used": 42,
"daily_remaining": 4958,
"reset_at": "2026-03-23T00:00:00Z"
}
POST /v1/ask
Ask a natural language question about Greek government data. Finds relevant documents via semantic search and returns source citations.
Tier: Enterprise
Note: This endpoint currently returns relevant source documents but does not yet generate LLM-powered answers. Full answer generation is coming soon.
| Parameter | Type | Default | Description |
|---|---|---|---|
question | string | required | Natural language question |
limit | integer | 5 | Max source documents to retrieve (1-20) |
curl -X POST https://api.monopigi.com/v1/ask \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"question": "What energy permits were issued in Crete?", "limit": 5}'
Response:
{
"question": "What energy permits were issued in Crete?",
"answer": "Found 5 relevant documents. LLM-generated answers coming soon.",
"sources": [
{
"source_id": "rae_12345",
"source": "rae",
"title": "Wind farm permit - Heraklion Prefecture",
"relevance": 0.95
}
],
"context_preview": "..."
}
GET /v1/entity/{identifier}
Resolve an entity across all data sources by VAT number (AFM), name, or ADA (decision ID).
Tier: Enterprise
| Parameter | Type | Default | Description |
|---|---|---|---|
identifier | path | required | The identifier to look up |
type | query | afm | Identifier type: afm, name, or ada |
# Look up by Greek VAT number
curl -H "Authorization: Bearer $TOKEN" \
"https://api.monopigi.com/v1/entity/123456789?type=afm"
# Look up by name
curl -H "Authorization: Bearer $TOKEN" \
"https://api.monopigi.com/v1/entity/Ministry+of+Health?type=name"
GET /v1/similar/{source_id}
Find documents similar to a given document using semantic similarity.
Tier: Enterprise
| Parameter | Type | Default | Description |
|---|---|---|---|
source_id | path | required | The document to find similar matches for |
limit | integer | 10 | Max results (1-100) |
curl -H "Authorization: Bearer $TOKEN" \
"https://api.monopigi.com/v1/similar/ted_2026_123456?limit=5"
Answers Layer
The Answers Layer adds due diligence reports, procurement alerts, and compliance monitoring on top of the data API. These endpoints require Pro or Enterprise tier.
POST /v1/reports
Create a due diligence report for an entity. The report is generated asynchronously; poll GET /v1/reports/{id} until status is completed.
Tier: Pro
| Parameter | Type | Description |
|---|---|---|
entity_identifier | string | VAT number (AFM), name, or ADA |
identifier_type | string | afm, name, or ada |
curl -X POST -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"entity_identifier": "123456789", "identifier_type": "afm"}' \
"https://api.monopigi.com/v1/reports"
Response:
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "pending",
"entity_identifier": "123456789",
"identifier_type": "afm",
"created_at": "2026-03-24T10:00:00Z"
}
GET /v1/reports
List report requests for your organization.
Tier: Pro
| Parameter | Type | Default | Description |
|---|---|---|---|
limit | integer | 20 | Results per page (1-100) |
offset | integer | 0 | Skip results for pagination |
curl -H "Authorization: Bearer $TOKEN" \
"https://api.monopigi.com/v1/reports?limit=10"
Response:
{
"items": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "completed",
"entity_identifier": "123456789",
"identifier_type": "afm",
"created_at": "2026-03-24T10:00:00Z",
"completed_at": "2026-03-24T10:02:15Z"
}
],
"total": 1,
"limit": 10,
"offset": 0
}
GET /v1/reports/{id}
Get a single report by ID. When status is completed, the response includes the full report_json payload.
Tier: Pro
curl -H "Authorization: Bearer $TOKEN" \
"https://api.monopigi.com/v1/reports/a1b2c3d4-e5f6-7890-abcd-ef1234567890"
Response (completed):
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "completed",
"entity_identifier": "123456789",
"identifier_type": "afm",
"created_at": "2026-03-24T10:00:00Z",
"completed_at": "2026-03-24T10:02:15Z",
"error_message": null,
"report_json": "{...}"
}
GET /v1/reports/{id}/pdf
Download the PDF for a completed report. Returns application/pdf with a Content-Disposition header.
Tier: Pro
curl -H "Authorization: Bearer $TOKEN" \
-o report.pdf \
"https://api.monopigi.com/v1/reports/a1b2c3d4-e5f6-7890-abcd-ef1234567890/pdf"
Returns 404 if the report is not yet completed.
POST /v1/alerts/profiles
Create an alert profile that watches for new documents matching your filter criteria. Alerts are delivered via email or webhook.
Tier: Pro
| Parameter | Type | Description |
|---|---|---|
name | string | Profile name |
filters | object | Filter criteria (see below) |
channels | array | ["email"], ["webhook"], or both |
webhook_url | string | Webhook delivery URL (required when using webhook channel) |
notify_email | string | Email address for alert delivery |
Filter object:
| Field | Type | Description |
|---|---|---|
sectors | array of string | Sector codes to match |
regions | array of string | Region codes to match |
keywords | array of string | Keywords to match in document text |
min_value | number | Minimum contract value |
max_value | number | Maximum contract value |
sources | array of string | Limit to specific data sources |
curl -X POST -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Hospital procurement",
"filters": {
"keywords": ["hospital", "medical equipment"],
"sources": ["ted", "kimdis"],
"min_value": 50000
},
"channels": ["email", "webhook"],
"webhook_url": "https://example.com/hooks/monopigi",
"notify_email": "alerts@example.com"
}' \
"https://api.monopigi.com/v1/alerts/profiles"
Response (201):
{
"id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"name": "Hospital procurement",
"filters": {
"keywords": ["hospital", "medical equipment"],
"sources": ["ted", "kimdis"],
"min_value": 50000,
"max_value": null,
"sectors": [],
"regions": []
},
"channels": ["email", "webhook"],
"webhook_url": "https://example.com/hooks/monopigi",
"notify_email": "alerts@example.com",
"is_active": true,
"created_at": "2026-03-24T10:00:00Z"
}
GET /v1/alerts/profiles
List alert profiles for your organization.
Tier: Pro
| Parameter | Type | Default | Description |
|---|---|---|---|
limit | integer | 20 | Results per page (1-100) |
offset | integer | 0 | Skip results for pagination |
curl -H "Authorization: Bearer $TOKEN" \
"https://api.monopigi.com/v1/alerts/profiles"
PUT /v1/alerts/profiles/{id}
Update an alert profile. All fields are optional (partial update).
Tier: Pro
curl -X PUT -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "Updated name", "is_active": false}' \
"https://api.monopigi.com/v1/alerts/profiles/b2c3d4e5-f6a7-8901-bcde-f12345678901"
DELETE /v1/alerts/profiles/{id}
Soft-deactivate an alert profile. The profile is not deleted but stops matching new documents.
Tier: Pro
curl -X DELETE -H "Authorization: Bearer $TOKEN" \
"https://api.monopigi.com/v1/alerts/profiles/b2c3d4e5-f6a7-8901-bcde-f12345678901"
Response:
{
"status": "deactivated"
}
GET /v1/alerts/deliveries
List recent alert deliveries for your organization.
Tier: Pro
| Parameter | Type | Default | Description |
|---|---|---|---|
limit | integer | 20 | Results per page (1-100) |
offset | integer | 0 | Skip results for pagination |
curl -H "Authorization: Bearer $TOKEN" \
"https://api.monopigi.com/v1/alerts/deliveries?limit=10"
Response:
{
"items": [
{
"id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"alert_profile_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"document_source_id": "ted_2026_456789",
"channel": "email",
"delivery_status": "sent",
"delivered_at": "2026-03-24T12:30:00Z"
}
],
"total": 1,
"limit": 10,
"offset": 0
}
POST /v1/monitor/entities
Add an entity to continuous compliance monitoring. The platform watches all data sources for new government activity related to the entity.
Tier: Enterprise
| Parameter | Type | Description |
|---|---|---|
entity_identifier | string | VAT number (AFM), name, or ADA |
identifier_type | string | afm, name, or ada |
label | string | Optional human-readable label |
curl -X POST -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"entity_identifier": "123456789", "identifier_type": "afm", "label": "ACME SA"}' \
"https://api.monopigi.com/v1/monitor/entities"
Response:
{
"id": "d4e5f6a7-b8c9-0123-defa-234567890123",
"entity_identifier": "123456789",
"identifier_type": "afm",
"label": "ACME SA",
"is_active": true,
"created_at": "2026-03-24T10:00:00Z"
}
Returns 409 if the entity is already being monitored.
GET /v1/monitor/entities
List monitored entities for your organization.
Tier: Enterprise
| Parameter | Type | Default | Description |
|---|---|---|---|
limit | integer | 20 | Results per page (1-100) |
offset | integer | 0 | Skip results for pagination |
curl -H "Authorization: Bearer $TOKEN" \
"https://api.monopigi.com/v1/monitor/entities"
Response:
{
"items": [
{
"id": "d4e5f6a7-b8c9-0123-defa-234567890123",
"entity_identifier": "123456789",
"identifier_type": "afm",
"label": "ACME SA",
"is_active": true,
"last_checked_at": "2026-03-24T06:00:00Z",
"last_alert_at": null,
"created_at": "2026-03-24T10:00:00Z"
}
],
"total": 1,
"limit": 20,
"offset": 0
}
DELETE /v1/monitor/entities/{id}
Stop monitoring an entity. The entity is soft-deactivated.
Tier: Enterprise
curl -X DELETE -H "Authorization: Bearer $TOKEN" \
"https://api.monopigi.com/v1/monitor/entities/d4e5f6a7-b8c9-0123-defa-234567890123"
Response:
{
"status": "deactivated",
"id": "d4e5f6a7-b8c9-0123-defa-234567890123"
}
GET /v1/monitor/events
List events detected for your monitored entities. Events are generated when new government activity is found.
Tier: Enterprise
| Parameter | Type | Default | Description |
|---|---|---|---|
entity_id | uuid | — | Filter to a single monitored entity |
event_type | string | — | Filter by type: new_decision, contract_award, regulatory_action, permit_change, other |
since | string | — | ISO datetime, only events detected after |
limit | integer | 20 | Results per page (1-100) |
offset | integer | 0 | Skip results for pagination |
curl -H "Authorization: Bearer $TOKEN" \
"https://api.monopigi.com/v1/monitor/events?event_type=contract_award&since=2026-03-01T00:00:00Z"
Response:
{
"items": [
{
"id": "e5f6a7b8-c9d0-1234-efab-345678901234",
"monitored_entity_id": "d4e5f6a7-b8c9-0123-defa-234567890123",
"document_source_id": "ted_2026_789012",
"event_type": "contract_award",
"summary": "Contract awarded for IT services - EUR 120,000",
"detected_at": "2026-03-20T14:30:00Z",
"acknowledged_at": null
}
],
"total": 1,
"limit": 20,
"offset": 0
}
POST /v1/monitor/events/{id}/acknowledge
Mark an event as acknowledged. Acknowledged events are not included in future alert deliveries.
Tier: Enterprise
curl -X POST -H "Authorization: Bearer $TOKEN" \
"https://api.monopigi.com/v1/monitor/events/e5f6a7b8-c9d0-1234-efab-345678901234/acknowledge"
Response:
{
"id": "e5f6a7b8-c9d0-1234-efab-345678901234",
"acknowledged_at": "2026-03-24T15:00:00Z"
}
GET /v1/monitor/entities/{id}/report
Trigger a health report for a monitored entity. Creates a new report request that is processed asynchronously.
Tier: Enterprise
curl -H "Authorization: Bearer $TOKEN" \
"https://api.monopigi.com/v1/monitor/entities/d4e5f6a7-b8c9-0123-defa-234567890123/report"
Response:
{
"report_id": "f6a7b8c9-d0e1-2345-fabc-456789012345",
"entity_id": "d4e5f6a7-b8c9-0123-defa-234567890123",
"entity_identifier": "123456789",
"status": "pending"
}
GET /v1/models
List available LLM models for the /v1/ask endpoint. No authentication required.
Tier: Free (no auth)
curl "https://api.monopigi.com/v1/models"
Response:
{
"models": [
{"id": "deepseek/deepseek-chat", "default": false},
{"id": "mistralai/codestral-2508", "default": false},
{"id": "mistralai/mistral-large-2512", "default": true},
{"id": "mistralai/mistral-small-2603", "default": false},
{"id": "mistralai/mistral-small-3.1-24b-instruct", "default": false}
],
"default": "mistralai/mistral-large-2512"
}
Pagination
All list endpoints support limit and offset for pagination:
# Page 1
curl "$BASE/v1/ted/documents?limit=100&offset=0"
# Page 2
curl "$BASE/v1/ted/documents?limit=100&offset=100"
# Page 3
curl "$BASE/v1/ted/documents?limit=100&offset=200"
The total field in responses tells you the total number of matching documents. Continue paginating until offset + limit >= total.
Error Codes
| Status | Meaning |
|---|---|
200 | Success |
401 | Invalid or missing API token |
403 | Feature not available on your tier |
404 | Resource or source not found |
429 | Rate limit exceeded |
500 | Internal server error |
All errors return JSON:
{
"detail": "Invalid or missing API token"
}