API v1.0  ·  Read-Only  ·  Live

AmarEvents API Docs

A clean, read-only REST API to access event data from amarevents.zone.id. Embed event listings, check ticket availability, or pull full stats for your own events.

Base URL https://amarevents.zone.id/api
This API is read-only. Only GET requests are accepted. POST, PUT, DELETE return 405 Method Not Allowed. All responses are JSON with Content-Type: application/json.
Authentication

All endpoints require an API key. Two key types exist with different access levels and rate limits.

User Key
Access public events only. Anyone can create one. Good for embedding event listings on your own site.
Rate limit: 3 requests / second
Organizer Key
Access your own events with full stats — registrations, revenue, and ambassador data. Organizer account required.
Rate limit: 5 requests / second

Sending Your Key

Pass your API key in one of two ways:

 Option 1 — Authorization Header (Recommended)

HTTP Header
Authorization: Bearer ae_u_your_key_here

 Option 2 — Query Parameter

URL
https://amarevents.zone.id/api/events?api_key=ae_u_your_key_here
Avoid putting your key in URLs for production apps — it can end up in server logs or browser history. Use the Authorization header instead.

How to Get a Key

1

Create an account

Sign up at amarevents.zone.id/register — it's free.

2

Go to API Keys dashboard

Visit amarevents.zone.id/dashboard/api-keys after logging in.

3

Create a key

Choose a name, select key type (User or Organizer), and click Create. Your key is shown once — copy it immediately.

4

Start making requests

Pass the key via Authorization header or ?api_key= param. You're ready.

Mock Keys for Testing

Use these shared keys to test the API without creating an account. They return real public data.

Test keys — do not use in production

These keys are publicly visible and shared. For any real integration, generate your own key.

User Key  ·  3 req/sec  ·  Public events only ae_u_test_0000000000000000000000000000000000000000000000
USER
Organizer Key  ·  5 req/sec  ·  Demo org data ae_o_test_1111111111111111111111111111111111111111111111
ORGANIZER

All code examples on this page use the mock user key. Copy-paste and run them — they'll work immediately.

API Playground

Paste your own API key (or use a mock key) and fire a real request straight from this page — no terminal needed.

Requests go out from your own browser directly to https://amarevents.zone.id/api using the key above — nothing is sent through our servers, and your key is never stored.

Response

      
Quick Start

Go from zero to a working API call in under a minute.

cURL
curl -H "Authorization: Bearer ae_u_test_0000000000000000000000000000000000000000000000" \
  https://amarevents.zone.id/api/events
JavaScript
const response = await fetch('https://amarevents.zone.id/api/events', {
  headers: {
    'Authorization': 'Bearer ae_u_test_0000000000000000000000000000000000000000000000'
  }
});

const data = await response.json();
console.log(data.data);
PHP
$ch = curl_init('https://amarevents.zone.id/api/events');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: Bearer ae_u_test_0000000000000000000000000000000000000000000000'
]);
$json = curl_exec($ch);
curl_close($ch);

$data = json_decode($json, true);
print_r($data['data']);
Python
import requests

headers = {'Authorization': 'Bearer ae_u_test_0000000000000000000000000000000000000000000000'}
r = requests.get('https://amarevents.zone.id/api/events', headers=headers)
data = r.json()
print(data['data'])

Example Response

JSON
{
  "success": true,
  "data": [
    {
      "id": 29,
      "name": "Thakurgaon 7.5K Friendship Run",
      "date": "2025-10-03",
      "deadline": "2025-09-26 01:30:00",
      "location": "Thakurgaon",
      "category": "Sports",
      "organization_id": 16,
      "organizer": "Thakurgaon Runners",
      "price_from": "499",
      "price_to": "499",
      "ticket_type_count": 1
    }
  ],
  "pagination": {
    "total": 5,
    "page": 1,
    "limit": 20,
    "pages": 1
  }
}
Rate Limits

Limits are enforced per API key, per second. Headers on every response show your current usage.

 User Key
3 req/sec
For browsing public events
 Organizer Key
5 req/sec
For dashboard integrations

Every response includes these headers:

Response Headers
X-RateLimit-Limit: 3
X-RateLimit-Remaining: 2
X-RateLimit-Reset: 1719600001
X-RateLimit-Window: per-second
If you hit the limit you'll get 429 Too Many Requests with a Retry-After: 1 header. Wait 1 second and retry.
Error Codes

All errors follow the same shape: {"success": false, "error": "message here"}

200
OK — request succeeded
401
No key provided, or key is invalid / expired
403
Key valid but lacks permission
404
Event not found, or event is not public
400
Bad request — invalid or missing parameters
405
Method not allowed — only GET requests accepted
429
Rate limit exceeded — wait 1 second and retry
 Public Endpoints
User / Organizer

These endpoints work with either a User or Organizer key. They only return public events.

GET /api/events List upcoming public events User / Organizer

Returns a paginated list of upcoming public events, sorted by date ascending.

Query Parameters

NameTypeDescription
pageintoptionalPage number, default 1
limitintoptionalResults per page, default 20, max 50
searchstringoptionalSearch by event name or location
categorystringoptionalFilter by category e.g. Sports, Education
organization_idintoptionalFilter to one organizer's events
cURL
curl -H "Authorization: Bearer ae_u_test_0000000000000000000000000000000000000000000000" \
  "https://amarevents.zone.id/api/events?category=Sports&limit=5"
JavaScript
const res = await fetch('https://amarevents.zone.id/api/events?category=Sports&limit=5', {
  headers: { 'Authorization': 'Bearer ae_u_test_0000000000000000000000000000000000000000000000' }
});
const { data, pagination } = await res.json();
GET /api/events/past List past public events User / Organizer

Returns past events sorted by date descending. Includes a total_attendees count per event.

Query Parameters

NameTypeDescription
pageintoptionalPage number
limitintoptionalMax 50
searchstringoptionalSearch by name
categorystringoptionalFilter by category
cURL
curl -H "Authorization: Bearer ae_u_test_0000000000000000000000000000000000000000000000" \
  "https://amarevents.zone.id/api/events/past"
GET /api/events/{id} Full details for one event User / Organizer

Returns complete event info including ticket types, registration fields, and computed flags like is_registration_open.

URL Parameters

NameTypeDescription
idintrequiredEvent ID
cURL
curl -H "Authorization: Bearer ae_u_test_0000000000000000000000000000000000000000000000" \
  "https://amarevents.zone.id/api/events/29"
JavaScript
const eventId = 29;
const res = await fetch(`https://amarevents.zone.id/api/events/${eventId}`, {
  headers: { 'Authorization': 'Bearer ae_u_test_0000000000000000000000000000000000000000000000' }
});
const { data } = await res.json();
console.log(data.is_registration_open);

Response Includes

ticket_typesarrayAll ticket types with available seats and sold_out flag
registration_fieldsarrayCustom form fields the organizer configured
is_registration_openboolWhether the registration deadline has passed
is_upcomingboolWhether the event date is in the future
socialsJSONSocial media links added by the organizer
noticeJSONNotices / announcements for the event
GET /api/events/{id}/tickets Ticket types and availability User / Organizer

Returns all ticket types for an event with real-time availability. Useful for building a ticket widget.

cURL
curl -H "Authorization: Bearer ae_u_test_0000000000000000000000000000000000000000000000" \
  "https://amarevents.zone.id/api/events/29/tickets"
JSON Response
{
  "success": true,
  "event_id": 29,
  "data": [
    {
      "id": 12,
      "name": "7.5K Run",
      "price": "499",
      "capacity": 100,
      "description": "Standard race entry",
      "sold": "63",
      "available": 37,
      "sold_out": false
    }
  ]
}
 Organizer Endpoints
Organizer Only
These endpoints require an Organizer API key. A User key returns 403 Forbidden. Get your key at amarevents.zone.id/dashboard/api-keys.
GET /api/my/events All your events with stats Organizer Only

Returns all events belonging to your organization, including registration counts, revenue, and pending approvals.

Query Parameters

NameTypeDescription
statusstringoptionalupcoming | past | all (default: all)
privacystringoptionalpublic | private
searchstringoptionalFilter by event name
pageintoptionalPage number
limitintoptionalMax 50
cURL
curl -H "Authorization: Bearer ae_o_test_1111111111111111111111111111111111111111111111" \
  "https://amarevents.zone.id/api/my/events?status=upcoming"
JavaScript
const res = await fetch('https://amarevents.zone.id/api/my/events?status=upcoming', {
  headers: { 'Authorization': 'Bearer ae_o_test_1111111111111111111111111111111111111111111111' }
});
const { data, organization } = await res.json();

Each Event Includes

total_registrationsintAll registrations (any status)
approvedintSuccessful / approved tickets
pendingintAwaiting approval
rejectedintRejected registrations
revenuestringTotal BDT collected from approved tickets
GET /api/my/events/{id} Full data + stats for one event Organizer Only

Deep detail for a single event you own. Includes per-ticket-type breakdowns, daily registration trends, and top ambassadors.

cURL
curl -H "Authorization: Bearer ae_o_test_1111111111111111111111111111111111111111111111" \
  "https://amarevents.zone.id/api/my/events/29"

Response Includes

statsobjecttotal, approved, pending, rejected, revenue
ticket_typesarrayPer-type: approved, pending, rejected, available
daily_registrationsarrayDaily trend — date, registrations, approved
registration_fieldsarrayCustom form fields
top_ambassadorsarrayTop 5 ambassadors by referrals
ambassador_countintTotal active ambassadors
JSON Response
{
  "success": true,
  "data": {
    "id": 29,
    "name": "Thakurgaon 7.5K Friendship Run",
    "stats": {
      "total": "84",
      "approved": "63",
      "pending": "18",
      "rejected": "3",
      "revenue": "31437"
    },
    "daily_registrations": [
      { "date": "2025-09-05", "registrations": "12", "approved": "9" }
    ],
    "top_ambassadors": [
      { "username": "runner_ali", "referrals": "14" }
    ]
  }
}
GET /api/my/stats Overall stats across all your events Organizer Only

Aggregated summary across your entire organization — perfect for a dashboard overview widget.

cURL
curl -H "Authorization: Bearer ae_o_test_1111111111111111111111111111111111111111111111" \
  "https://amarevents.zone.id/api/my/stats"

Response Includes

summaryobjecttotal_events, upcoming_events, past_events, total_registrations, approved_tickets, pending_tickets, total_revenue
per_eventarrayPer-event breakdown (last 50 events)
monthly_trendarrayMonth-by-month registrations + revenue for the last 12 months