API Documentation

Access Dzaleka Online Services data through our RESTful API endpoints. All endpoints support CORS and return JSON responses.

Quick Start

All API endpoints are publicly accessible and require no authentication.

curl https://services.dzaleka.com/api/services

Rate Limiting

All endpoints are rate-limited to prevent abuse:

  • Limit: 60 requests per minute per IP address
  • Headers: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
  • 429 Response: Includes Retry-After header (in seconds)

Caching

Search API includes intelligent caching:

  • TTL: 5 minutes for search results
  • Cache-Control: public, max-age=300
  • X-Cache Header: HIT (cached) or MISS (fresh query)
  • Max Size: 100 unique queries cached

API Endpoints

GET /api/search
Rate Limit: 60 requests per minute

Server-side search across multiple collections with caching

Cache: 5 minutes TTL, 100 queries max

Parameters

Name Type Required Description
q string Yes Search query (min 2 characters)
collections string No Comma-separated list of collections (services,events,resources,news,photos,jobs,docs)
limit number No Max results per collection (default: 10)

Example Request

https://services.dzaleka.com/api/search?q=education&collections=services,events&limit=5

Example Response

{
  "status": "success",
  "query": "refugee services",
  "totalResults": 25,
  "results": {
    "services": [
      {
        "slug": "example",
        "title": "Example Service",
        "description": "...",
        "category": "Education"
      }
    ],
    "events": []
  },
  "cached": false
}
GET /api/services
Rate Limit: 60 requests per minute

Retrieve all service organizations

Example Request

https://services.dzaleka.com/api/services

Example Response

{
  "status": "success",
  "count": 100,
  "data": {
    "services": [
      {
        "id": "...",
        "title": "Service Name",
        "category": "Education",
        "verified": true
      }
    ]
  }
}
GET /api/events
Rate Limit: 60 requests per minute

Retrieve all events

Example Request

https://services.dzaleka.com/api/events

Example Response

{
  "status": "success",
  "count": 30,
  "data": {
    "events": [
      {
        "id": "...",
        "title": "Event Name",
        "date": "2025-01-15",
        "location": "Dzaleka"
      }
    ]
  }
}
GET /api/resources
Rate Limit: 60 requests per minute

Retrieve all resources and documents

Example Request

https://services.dzaleka.com/api/resources

Example Response

{
  "status": "success",
  "count": 300,
  "data": {
    "resources": [
      {
        "id": "...",
        "title": "Resource Name",
        "category": "Policy",
        "fileType": "pdf"
      }
    ]
  }
}
GET /api/news
Rate Limit: 60 requests per minute

Retrieve all news articles

Example Request

https://services.dzaleka.com/api/news

Example Response

{
  "status": "success",
  "count": 50,
  "data": {
    "news": [
      {
        "id": "...",
        "title": "News Title",
        "category": "announcement",
        "date": "2025-01-10"
      }
    ]
  }
}
GET /api/photos
Rate Limit: 60 requests per minute

Retrieve photo gallery items

Example Request

https://services.dzaleka.com/api/photos

Example Response

{
  "status": "success",
  "count": 35,
  "data": {
    "photos": [
      {
        "id": "...",
        "title": "Photo Title",
        "date": "2024-12-01",
        "image": "url"
      }
    ]
  }
}
GET /api/jobs
Rate Limit: 60 requests per minute

Retrieve job listings

Example Request

https://services.dzaleka.com/api/jobs

Example Response

{
  "status": "success",
  "count": 20,
  "data": {
    "jobs": [
      {
        "id": "...",
        "title": "Job Title",
        "type": "full-time",
        "category": "education",
        "status": "open"
      }
    ]
  }
}
GET /api/docs
Rate Limit: 60 requests per minute

Retrieve documentation pages

Example Request

https://services.dzaleka.com/api/docs

Example Response

{
  "status": "success",
  "count": 20,
  "data": {
    "docs": [
      {
        "id": "...",
        "title": "Getting Started",
        "description": "..."
      }
    ]
  }
}

Additional Information

Error Responses

400 Bad Request

{
  "status": "error",
  "message": "Search query must be at least 2 characters long"
}

429 Too Many Requests

{
  "status": "error",
  "message": "Rate limit exceeded. Please try again later.",
  "retryAfter": 45
}

500 Internal Server Error

{
  "status": "error",
  "message": "Failed to fetch services",
  "error": "Error details..."
}

CORS Support

All API endpoints support Cross-Origin Resource Sharing (CORS) with the following headers:

  • Access-Control-Allow-Origin: *
  • Access-Control-Allow-Methods: GET, POST, OPTIONS
  • Access-Control-Allow-Headers: Content-Type

Support

For questions, bug reports, or feature requests, please visit:

Contact Support
0 views