Monopigi

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

ParameterTypeDefaultDescription
qstringrequiredSearch query
sourcestringFilter to a single source
limitinteger100Results per page (1-1000)
offsetinteger0Skip 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)

ParameterTypeDefaultDescription
limitinteger100Results per page (1-1000)
offsetinteger0Skip results for pagination
sincestringISO 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

ParameterTypeDescription
source_idpathThe 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.

ParameterTypeDefaultDescription
questionstringrequiredNatural language question
limitinteger5Max 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

ParameterTypeDefaultDescription
identifierpathrequiredThe identifier to look up
typequeryafmIdentifier 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

ParameterTypeDefaultDescription
source_idpathrequiredThe document to find similar matches for
limitinteger10Max 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

ParameterTypeDescription
entity_identifierstringVAT number (AFM), name, or ADA
identifier_typestringafm, 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

ParameterTypeDefaultDescription
limitinteger20Results per page (1-100)
offsetinteger0Skip 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

ParameterTypeDescription
namestringProfile name
filtersobjectFilter criteria (see below)
channelsarray["email"], ["webhook"], or both
webhook_urlstringWebhook delivery URL (required when using webhook channel)
notify_emailstringEmail address for alert delivery

Filter object:

FieldTypeDescription
sectorsarray of stringSector codes to match
regionsarray of stringRegion codes to match
keywordsarray of stringKeywords to match in document text
min_valuenumberMinimum contract value
max_valuenumberMaximum contract value
sourcesarray of stringLimit 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

ParameterTypeDefaultDescription
limitinteger20Results per page (1-100)
offsetinteger0Skip 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

ParameterTypeDefaultDescription
limitinteger20Results per page (1-100)
offsetinteger0Skip 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

ParameterTypeDescription
entity_identifierstringVAT number (AFM), name, or ADA
identifier_typestringafm, name, or ada
labelstringOptional 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

ParameterTypeDefaultDescription
limitinteger20Results per page (1-100)
offsetinteger0Skip 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

ParameterTypeDefaultDescription
entity_iduuidFilter to a single monitored entity
event_typestringFilter by type: new_decision, contract_award, regulatory_action, permit_change, other
sincestringISO datetime, only events detected after
limitinteger20Results per page (1-100)
offsetinteger0Skip 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

StatusMeaning
200Success
401Invalid or missing API token
403Feature not available on your tier
404Resource or source not found
429Rate limit exceeded
500Internal server error

All errors return JSON:

{
  "detail": "Invalid or missing API token"
}