Athens Halloween Fest APIathenshalloweenfest.gr ↗
Access photo records from the Athens Halloween Festival 2025 gallery. Returns full-size image URLs, thumbnails, captions, and pagination metadata via one endpoint.
What is the Athens Halloween Fest API?
The Athens Halloween Festival API exposes 1 endpoint — list_gallery_photos — that returns structured photo records from the official athenshalloweenfest.gr gallery page. Each record includes a stable photo ID, a direct full-size 1600px WebP image URL, a thumbnail URL, and a caption field (which may be null). Pagination is handled via limit and offset parameters, and the response also surfaces the total photo count and gallery page heading.
curl -X GET 'https://api.parse.bot/scraper/3a7f24ff-14fa-4aa7-a39c-660b8bbfc2b7/list_gallery_photos?limit=4' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace athenshalloweenfest-gr-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Athens Halloween Festival Gallery — browse festival photos."""
from parse_apis.athenshalloweenfest_gr_api import AthensHalloweenFest, InputFormatInvalid
client = AthensHalloweenFest()
# Fetch the first page of gallery photos
page = client.gallery.get(page_size=4)
print(f"Gallery: {page.gallery_title} ({page.total} photos)")
# Browse thumbnails from the first page
for photo in page.photos or []:
print(f" {photo.id}: {photo.caption} — {photo.thumbnail_url}")
# Use offset to fetch a second window, driven by the first response
if page.has_more:
next_offset = page.offset + page.limit
page2 = client.gallery.get(page_size=4, offset=next_offset)
for photo in page2.photos or []:
print(f" {photo.id}: {photo.caption}")
# Typed-error handling: InputFormatInvalid is raised for bad parameters
try:
client.gallery.get(page_size=-1)
except InputFormatInvalid as e:
print(f"Caught expected error: {e.message}")
print("exercised: gallery.get / InputFormatInvalid")
Returns photos from the Athens Halloween Festival 2025 photo gallery, one record per gallery photo in the site's display order. Each record carries a stable photo id, the direct URL of the full-size image (1600px WebP), the thumbnail URL, the caption shown by the site (null when the site gives none), and the thumbnail's intrinsic pixel dimensions. Only gallery photos are returned; site logos and decorative images are excluded. The whole gallery is one page fetch, so a call costs one round trip regardless of limit. Pagination is a simple offset over the gallery: `limit` (default 4, max 100) and `offset` (default 0) select a window, `total` is the number of photos in the gallery and `has_more` tells whether photos remain after this window. An offset past the end yields an empty `photos` array with has_more false. Caption and thumbnail-size fields are source values from the gallery markup, not estimates.
| Param | Type | Description |
|---|---|---|
| limit | integer | Maximum number of photos to return in this window; values above 100 are clamped to 100. |
| offset | integer | Zero-based position in the gallery at which the window starts. |
{
"type": "object",
"fields": {
"limit": "integer, the window size that was applied (after clamping)",
"total": "integer, number of photos in the whole gallery",
"offset": "integer, the window start that was applied",
"photos": "array of photo records: id (stable photo identifier), image_url (direct full-size image URL), thumbnail_url, caption (string or null), thumbnail_width and thumbnail_height (integer pixels)",
"has_more": "boolean, true when photos remain after this window",
"gallery_title": "heading of the gallery page as shown by the site"
},
"sample": {
"data": {
"limit": 4,
"total": 80,
"offset": 0,
"photos": [
{
"id": "ahf2025-01",
"caption": "The festival banner, 2025",
"image_url": "https://athenshalloweenfest.gr/wp-content/themes/ahf/assets/img/gallery/ahf2025-01-1600.webp",
"thumbnail_url": "https://athenshalloweenfest.gr/wp-content/themes/ahf/assets/img/gallery/ahf2025-01-600.webp",
"thumbnail_width": 400,
"thumbnail_height": 600
},
{
"id": "ahf2025-02",
"caption": "The 2025 venue entrance",
"image_url": "https://athenshalloweenfest.gr/wp-content/themes/ahf/assets/img/gallery/ahf2025-02-1600.webp",
"thumbnail_url": "https://athenshalloweenfest.gr/wp-content/themes/ahf/assets/img/gallery/ahf2025-02-600.webp",
"thumbnail_width": 600,
"thumbnail_height": 600
},
{
"id": "ahf2025-03",
"caption": "Visitors under the umbrellas",
"image_url": "https://athenshalloweenfest.gr/wp-content/themes/ahf/assets/img/gallery/ahf2025-03-1600.webp",
"thumbnail_url": "https://athenshalloweenfest.gr/wp-content/themes/ahf/assets/img/gallery/ahf2025-03-600.webp",
"thumbnail_width": 600,
"thumbnail_height": 400
},
{
"id": "ahf2025-04",
"caption": "A packed market hall",
"image_url": "https://athenshalloweenfest.gr/wp-content/themes/ahf/assets/img/gallery/ahf2025-04-1600.webp",
"thumbnail_url": "https://athenshalloweenfest.gr/wp-content/themes/ahf/assets/img/gallery/ahf2025-04-600.webp",
"thumbnail_width": 600,
"thumbnail_height": 400
}
],
"has_more": true,
"gallery_title": "This is how 2025 looked"
},
"status": "success"
}
}About the Athens Halloween Fest API
What the API Returns
The single list_gallery_photos endpoint returns an array of photo records drawn from the Athens Halloween Festival 2025 gallery. Each record in the photos array carries an id (a stable identifier for that photo), image_url (direct link to the full-size 1600px WebP file), thumbnail_url, and caption (a string or null when the site displays no caption for that image). The response also includes a top-level gallery_title field reflecting the heading shown on the gallery page.
Pagination
The endpoint accepts two optional integer parameters: limit controls how many records are returned in a single call, with values above 100 clamped to 100; offset is a zero-based index indicating where in the full gallery the window starts. The response echoes back the applied limit and offset, reports the total number of photos in the gallery, and sets has_more to true when additional photos remain beyond the current window. Iterating through the full gallery requires incrementing offset by limit until has_more is false.
Coverage Scope
All data corresponds to the 2025 edition of the Athens Halloween Festival. The endpoint returns photos in the same display order as the gallery page. Caption availability depends on what the site publishes alongside each image; no photographer credit, EXIF, or date metadata is included in the response fields.
The Athens Halloween Fest API is a managed, monitored endpoint for athenshalloweenfest.gr — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when athenshalloweenfest.gr changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official athenshalloweenfest.gr API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Embed the Athens Halloween Festival photo gallery in a third-party event recap page using
image_urlandcaptionfields. - Build a paginated thumbnail grid by requesting
thumbnail_urlrecords in batches vialimitandoffset. - Monitor gallery growth over time by polling
totalto detect when new photos are added. - Download all full-size 1600px WebP images for offline archiving by iterating through pages until
has_moreis false. - Generate a caption-only feed for social media posts by filtering records where
captionis non-null. - Populate a media press kit with festival images by fetching
image_urlvalues from the full gallery.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does athenshalloweenfest.gr provide an official developer API?+
What does the `list_gallery_photos` endpoint return for photos without captions?+
caption field is returned as null for any photo where the site does not display a caption. All other fields — id, image_url, and thumbnail_url — are always present in each record regardless of caption availability.How do I retrieve the full gallery when there are more than 100 photos?+
limit parameter is clamped to a maximum of 100 per call. To retrieve all photos, make successive requests incrementing offset by your chosen limit value. Stop when the response returns has_more: false. The total field tells you the full gallery size upfront.Does the API cover previous years of the Athens Halloween Festival?+
Does the API return photographer credits, upload dates, or EXIF data for photos?+
id, image_url, thumbnail_url, and caption. You can fork it on Parse and revise it to add the missing endpoint if that metadata becomes available on the source page.