Ardent AfricaDocs
Developers

Endpoint reference

Every public API endpoint, its parameters, and its exact response shape.

All endpoints are GET, under https://api.ardent.africa/public/v1. List endpoints return { data, page, limit, total }. Detail endpoints return the resource object. Send x-api-key for the higher rate tier (optional).

A machine-readable OpenAPI 3.1 spec of everything below is served at https://api.ardent.africa/public/v1/openapi.json.

Common list parameters:

ParamTypeDefaultNotes
pageinteger11-based page number
limitinteger20max 50

All endpoints (generated)

Generated from the live /public/v1 API contract. Response shapes and examples are documented per resource in the sections below.

MethodPathHandler
GET/public/v1/eventsList events
GET/public/v1/events/:slugGet event
GET/public/v1/jobsList jobs
GET/public/v1/jobs/:slugGet job
GET/public/v1/marketplace/servicesList services
GET/public/v1/marketplace/services/:idGet service
GET/public/v1/marketplace/categoriesList categories
GET/public/v1/openapi.jsonGet open api
GET/public/v1/reviews/entitiesList entities
GET/public/v1/reviews/entities/:slugGet entity
GET/public/v1/actorsList actors
GET/public/v1/actors/:handleGet actor
GET/public/v1/postsList posts
GET/public/v1/posts/:idGet post
GET/public/v1/groupsList groups
GET/public/v1/groups/:slugGet group
GET/public/v1/campaignsList campaigns
GET/public/v1/campaigns/:slugGet campaign
GET/public/v1/petitionsList petitions
GET/public/v1/petitions/:slugGet petition
GET/public/v1/blogList blog
GET/public/v1/blog/:slugGet blog post
GET/public/v1/profiles/:usernameGet profile
GET/public/v1/statsGet stats

Campaigns

GET/public/v1/campaigns

Lists active and won fundraising campaigns. Extra params: category, country (target country code, for example GH).

curl "https://api.ardent.africa/public/v1/campaigns?limit=2&category=Education"
{
  "data": [
    {
      "id": "c7ee417f-...",
      "slug": "clean-water-for-tamale",
      "title": "Clean water for Tamale",
      "description": "...",
      "category": "Education",
      "status": "active",
      "goal_amount": 50000,
      "raised_amount": 12500,
      "image_url": "https://.../image.jpg",
      "country": "Ghana",
      "target_country": "GH",
      "target_country_name": "Ghana",
      "progress": { "raised_amount": 12500, "goal_amount": 50000, "percent": 25 },
      "goal_reached_at": null,
      "deadline": null,
      "created_at": "2026-06-13T23:31:27.767Z"
    }
  ],
  "page": 1,
  "limit": 2,
  "total": 6
}
GET/public/v1/campaigns/:slug

A single campaign, plus its public updates. Same fields as above, with an updates array (id, title, content (sanitized HTML), media_urls, created_at).

{
  "id": "c7ee417f-...",
  "slug": "clean-water-for-tamale",
  "title": "Clean water for Tamale",
  "progress": { "raised_amount": 12500, "goal_amount": 50000, "percent": 25 },
  "updates": [
    { "id": "...", "title": "Drilling begins", "content": "<p>...</p>", "media_urls": [], "created_at": "2026-06-14T..." }
  ]
}

There are no creator, donor, or internal fields. Only active or won campaigns are returned; anything else gives 404.


Marketplace

GET/public/v1/marketplace/services

Lists active marketplace listings. Extra params: q (full-text search), listing_type (service or goods), category (category slug), location.

curl "https://api.ardent.africa/public/v1/marketplace/services?limit=2&listing_type=service"
{
  "data": [
    {
      "id": "9b1e...",
      "slug": "wedding-photography-accra",
      "title": "Wedding photography in Accra",
      "description": "...",
      "listing_type": "service",
      "category_slugs": ["photography"],
      "price_min_pesewas": 150000,
      "price_max_pesewas": 500000,
      "currency": "GHS",
      "location": "Accra",
      "rating": 4.8,
      "review_count": 23,
      "is_verified": true,
      "is_featured": false,
      "cover_url": "https://.../cover.jpg",
      "supports_campaign_id": null,
      "created_at": "2026-06-14T..."
    }
  ],
  "page": 1,
  "limit": 2,
  "total": 12
}
GET/public/v1/marketplace/services/:id

A single active listing. Adds public packages (each name, price_pesewas, currency, description, delivery_days), portfolio_urls, and languages. Provider contact details and identity are never returned.

{
  "id": "9b1e...",
  "slug": "wedding-photography-accra",
  "title": "Wedding photography in Accra",
  "rating": 4.8,
  "review_count": 23,
  "packages": [
    { "name": "Half day", "price_pesewas": 150000, "currency": "GHS", "description": "...", "delivery_days": 7 }
  ],
  "portfolio_urls": ["https://.../1.jpg"],
  "languages": ["English"]
}
GET/public/v1/marketplace/categories

The active marketplace category taxonomy.

{
  "data": [
    { "id": "...", "slug": "photography", "name": "Photography", "kind": "service" }
  ]
}

Events

GET/public/v1/events

Lists published events. Extra params: q (full-text search), event_type, category, location, is_paid (true/false), is_online (true/false), date_from, date_to.

curl "https://api.ardent.africa/public/v1/events?limit=2&is_paid=true"
{
  "data": [
    {
      "id": "4f2c...",
      "slug": "accra-tech-summit-2026",
      "title": "Accra Tech Summit 2026",
      "description": "...",
      "event_type": "conference",
      "category": "Technology",
      "start_date": "2026-09-12T09:00:00Z",
      "end_date": "2026-09-12T17:00:00Z",
      "timezone": "Africa/Accra",
      "location": "Accra International Conference Centre",
      "is_online": false,
      "image_url": "https://.../event.jpg",
      "is_paid": true,
      "currency": "GHS",
      "tags": ["tech", "startups"],
      "is_featured": true,
      "created_at": "2026-06-14T..."
    }
  ],
  "page": 1,
  "limit": 2,
  "total": 7
}
GET/public/v1/events/:slug

A single published event, plus public content blocks (agenda, speakers, sponsors, gallery). For paid events it also returns ticket_tiers, each with name, description, price_pesewas, currency, and an is_available flag. Raw inventory counts, promo codes, organizer details, and online joining links are never returned.

{
  "slug": "accra-tech-summit-2026",
  "title": "Accra Tech Summit 2026",
  "is_paid": true,
  "currency": "GHS",
  "agenda": [],
  "speakers": [],
  "sponsors": [],
  "gallery": [],
  "ticket_tiers": [
    { "id": "...", "name": "Early bird", "description": "...", "price_pesewas": 20000, "currency": "GHS", "is_available": true }
  ]
}

An unpublished or unknown slug gives 404.


Jobs

GET/public/v1/jobs

Lists open job postings. Extra params: q (full-text search), employment_type, workplace_type (onsite / hybrid / remote), seniority, location, category. Featured postings come first, then the newest.

curl "https://api.ardent.africa/public/v1/jobs?limit=2&workplace_type=remote"
{
  "data": [
    {
      "id": "...",
      "slug": "senior-nurse-accra",
      "title": "Senior Nurse",
      "description": "...",
      "employment_type": "full_time",
      "workplace_type": "onsite",
      "seniority": "senior",
      "location": "Accra",
      "salary_min_pesewas": 500000,
      "salary_max_pesewas": 800000,
      "salary_currency": "GHS",
      "salary_period": "month",
      "salary_hidden": false,
      "skills": ["nursing"],
      "application_deadline": null,
      "is_featured": true,
      "published_at": "2026-07-01T00:00:00Z",
      "created_at": "2026-07-01T00:00:00Z"
    }
  ],
  "page": 1,
  "limit": 2,
  "total": 37
}

When an employer chooses to hide pay, salary_hidden is true and both salary bounds come back null. The API respects that choice, not just the website.

GET/public/v1/jobs/{slug}

Adds responsibilities, requirements, benefits, and the hiring employer (id, slug, name, logo_url, industry, location, is_verified). A closed or unknown slug gives 404.

There is no candidate or application endpoint, and there never will be. A job posting is public; the people applying to it are not. Nothing here exposes applicants, applications, screening answers, messages, interviews, offers, or fees. Employers get applicant detail through their authenticated dashboard, not through this API.


Petitions

GET/public/v1/petitions

Lists active petitions. Extra params: category, country.

{
  "data": [
    {
      "id": "6844cb10-...",
      "slug": "pass-the-affirmative-action-bill",
      "title": "Pass the Affirmative Action Bill",
      "description": "...",
      "category": "Governance",
      "status": "active",
      "petition_target": 10000,
      "signatures_count": 3421,
      "target_country": "GH",
      "target_country_name": "Ghana",
      "country": "Ghana",
      "image_url": null,
      "progress": { "signatures_count": 3421, "petition_target": 10000, "percent": 34 },
      "created_at": "2026-06-10T..."
    }
  ],
  "page": 1,
  "limit": 20,
  "total": 4
}
GET/public/v1/petitions/:slug

A single petition, plus aggregate momentum. Adds momentum.signatures_last_7_days. Signer names, emails, and comments are never returned.

{
  "slug": "pass-the-affirmative-action-bill",
  "signatures_count": 3421,
  "progress": { "signatures_count": 3421, "petition_target": 10000, "percent": 34 },
  "momentum": { "signatures_last_7_days": 188 }
}

Blog

GET/public/v1/blog

Lists published posts. Extra param: category (category id).

{
  "data": [
    {
      "title": "How tipping works",
      "slug": "how-tipping-works",
      "excerpt": "A short explainer",
      "published_at": "2026-06-13T23:54:21.892Z",
      "featured_image_url": null,
      "blog_categories": { "name": "Product", "slug": "product" }
    }
  ],
  "page": 1,
  "limit": 20,
  "total": 1
}
GET/public/v1/blog/:slug

A single published post. content is sanitized HTML.

{
  "title": "How tipping works",
  "slug": "how-tipping-works",
  "excerpt": "A short explainer",
  "content": "<p>Sanitized HTML body.</p>",
  "published_at": "2026-06-13T23:54:21.892Z",
  "featured_image_url": null,
  "category": { "name": "Product", "slug": "product" }
}

Profiles

GET/public/v1/profiles/:username

A public supporter profile (only where the user has enabled a public profile). Returns aggregate signature count. Never returns email, phone, or internal ids.

{
  "username": "ama",
  "full_name": "Ama O.",
  "bio": "Supporter of education causes",
  "avatar_url": "https://.../avatar.jpg",
  "country": "Ghana",
  "account_type": "personal",
  "signatures_count": 12
}

A username with no public profile gives 404.


Stats

GET/public/v1/stats

Platform-level aggregates. No per-user or donor data.

{
  "total_active_campaigns": 10,
  "total_campaigns": 11,
  "countries_reached": 1,
  "total_funds_raised": 288460,
  "total_signatures": 51
}

Last updated: 3 August 2026

On this page