The Coptic language, education, identity & heritage platform
ⲙ
ⲙ̀ⲧⲟⲛ
API Documentation
Developer documentation for the heritage data interfaces behind the Egyptian Ministry of Tourism and Antiquities website (https://egymonuments.gov.eg). Every endpoint below was verified against the live service — nothing here is inferred from our own importer.
About this documentation
The Ministry's website does not publish an official public API: there is no Swagger/OpenAPI document, no developer portal, and no published terms for programmatic access. What follows is a faithful description of the JSON interfaces the website itself uses, recovered from the site's frontend and confirmed with live requests.
Every endpoint on this page carries the label "Observed website endpoint — not confirmed as a public supported API." Treat it as such: it may change without notice.
Base URL
https://egymonuments.gov.eg/umbraco/api/
Authentication
None observed
Format
JSON
Rate limit
No official rate limit was identified in the publicly accessible documentation.
Getting started
Most content endpoints are POST requests that take a JSON body and respond with a common envelope. Send Content-Type: application/json, and add the culture header to choose a language (see Languages). Here is a working first call:
Language is selected per request with the culture HTTP header, not a query parameter. Two values are used by the site itself: en and ar. The same numeric record Id exists in both languages with localized titles, descriptions and URLs.
same record · culture: ar
curl -s 'https://egymonuments.gov.eg/umbraco/api/InnersWebAPI/GetPeriods' \
-H 'culture: ar'
→ {"Data":{"ListItems":[{"Id":1655,"Title":"عصر ما قبل الأسرات", …}]}}
Note two URL dialects: API payloads reference pages as /en-US/… or /ar-EG/…, while the public website serves /en/… and /ar/…. To link a human to the official page, swap the leading locale segment (/en-US/news/x → /en/news/x).
The response envelope
Listing-style endpoints wrap results in a shared structure. Count holds how many matching items exist; TotalCount was always 0 in our observations (treat it as unused).
Full-text search across museums, monuments, events, news and more. There is no minimum search length — even a single character returns results. Results are a mix of content types; some rows carry empty Title/Description (metadata-only) and must be displayed via their ContentUrlName page.
Parameter
Type
Required
Description
SearchText
string
Yes
Free-text query.
PageIndex
int
Yes
1-based page number.
PageSize
int
Yes
Items per page; the service honored 500 in our tests.
Observed website endpoint — not confirmed as a public supported API.
POST/umbraco/api/MapsWebAPI/GetAllMapPins
Every mapped heritage site in one call: an empty JSON body is enough. Coordinates are strings; a value of “0” means no real coordinates were recorded — do not plot those points.
Parameter
Type
Required
Description
(body)
object
Yes
Send {} — the endpoint requires a JSON body but uses no fields.
Filter lists (cities & periods)
Observed website endpoint — not confirmed as a public supported API.
GET/umbraco/api/MapsWebAPI/GetFiltrationBoxLists
Returns the lookup lists that power the site's map filters: CitiesLookup ({ID, Name}) and PeriodsLookup. The IDs are what GetFilteredMapItems expects.
Practical visit data for a monument Id: location name, opening status and next opening time, plus related media/content stubs. Verified with the Monastery of Anba Simeon in Aswan (Id 38041).
Parameter
Type
Required
Description
Id
number
Yes
Numeric content Id of the monument (query string).
Both take the shared listing body described below (parentContentId = museum or period Id). We confirmed the endpoints exist and accept the shared shape, but have not yet captured populated responses with real collection Ids — sample payloads are therefore not shown.
Related content
Observed website endpoint — not confirmed as a public supported API.
Records the website considers related to a given content Id — e.g. for the Coptic Museum (2227) it returns nearby archaeological sites with Type and IconColor metadata.
Media gallery of a record
Observed website endpoint — not confirmed as a public supported API.
POST/umbraco/api/MediaWebAPI/GetMediaGallery
Returns three nested collections for a record — mediaItems, mediaStoryItems and mediaSocialItems — each in the standard envelope. Records without gallery media return empty ListItems.
Shared listing request body
The POST listing endpoints share one request model. Two fields matter especially: imageSize takes a named crop preset (strings such as sideListingCrop, secondaryListingCrop or mainDetailsCrop), and stringLength truncates every description server-side to roughly that many characters — this is why list data ends with “…” and full text lives on the official detail pages.
Pagination is page-based, not cursor-based. Clients send PageIndex (starting at 1) and PageSize; responses carry Count — the number of matching items — so you know when to stop. TotalCount exists in the envelope but stayed 0 in all our observations; rely on Count instead.
Default page size observed in the site frontend: 8–10 items.
No maximum enforced in tests — a request with PageSize 500 returned all 16 matching items.
Out-of-range pages return an empty ListItems array rather than an error.
Filtering
Only the filters below were confirmed by live requests and the site's own frontend code. We do not document filters we could not exercise.
Search term — SearchText on GetSearchResult.
City/governorate — citiesIds on GetFilteredMapItems (IDs from CitiesLookup).
Historical period — periodId / dynastiesIds on map filtering; periods from GetPeriods.
Language — culture header on every endpoint.
Media & images
Image URLs returned by the API are site-relative and parameterized. The image service resizes server-side — verified: the same source served 78 KB at 645×423 and 169 KB at 1200×630.
URL pattern
https://egymonuments.gov.eg/media/{id}/{file}.jpg?center=x,y&mode=crop&width=645&height=423&rnd=133916151990000000
# variants seen:
# ?anchor=center&mode=crop&width=… (anchor instead of center)
# width=1200&height=630 (og:image size)
# file names may be Arabic — percent-encode them when requesting.
# No authentication; no token expiry observed (rnd is stable per asset).
A dedicated Media Hub exists on the website (images, video, 3D, 360°, audio), but its backing endpoint only returns a generic error without a correctly-shaped payload we have not reverse-engineered — so it is not documented here.
Errors
Status
When we observed it
What to do
200
All documented calls.
—
404
Unknown controller path.
Check the endpoint spelling.
405
Wrong HTTP method (e.g. GET on GetAllMapPins).
Use the method shown per endpoint.
411
POST without Content-Length.
Always send a JSON body.
500
Malformed JSON or unsupported payload — {"Message":"An error has occurred."}
Validate your body against the documented shape.
401/403/429 were never observed: no authentication and no rate limiting was encountered during research.
What can I build with this?
These are ideas, not officially supported use cases — the endpoints above are the supported surface as far as this documentation goes:
✦A searchable heritage explorer across museums, monuments and events
✦An interactive map of Egyptian heritage sites, filterable by period and governorate
✦A historical-period browser (Predynastic → Ptolemaic) using GetPeriods
✦Coptic heritage discovery tools — like Metremnkēme's own archive
✦Visit planners using opening status for monuments
✦Educational apps and research datasets built on audited records
Attribution & responsible usage
All heritage content belongs to the Egyptian Ministry of Tourism and Antiquities. Attribute it, and never present Ministry data as your own first-party data.
Link back to the official detail pages (/en/…, /ar/…) rather than only re-serving raw data — they are richer and authoritative.
These interfaces are undocumented. Request politely: serial requests, small page sizes, aggressive caching, exponential backoff on failures. Do not hammer a national heritage service.
API/listing responses: structured but shallow — descriptions are truncated server-side (stringLength) or even empty; treat them as an index.
Official detail pages: server-rendered HTML carrying the full multi-paragraph descriptions, high-resolution imagery and related content — the authoritative source.
Metremnkēme's normalized archive: our own database that combines list metadata, recovered media and full official-page text into clean bilingual records — see the Heritage Archive.