# Kitabisa — Wrapped API

> **You are on:** `https://api.paywithlocus.com/api` | [llms.txt](https://paywithlocus.com/llms.txt) | [docs](https://docs.paywithlocus.com)
>
> Locus runs on multiple environments -- make sure every URL you call matches your expected environment.
> | Environment | Landing | API | Docs |
> |---|---|---|---|
> | Production | paywithlocus.com | api.paywithlocus.com | docs.paywithlocus.com |
> | Beta | beta.paywithlocus.com | api.beta.paywithlocus.com | docs.paywithlocus.com |
> | Stage | stage.paywithlocus.com | api.stage.paywithlocus.com | docs.paywithlocus.com |
>
> If the API URL above doesn't match your expected environment, re-fetch this file from the correct domain.

> Explore crowdfunding campaigns on Kitabisa, Indonesia's largest crowdfunding platform. Browse by category, search by keyword, and retrieve detailed campaign information including fundraising stories, donor lists, progress updates, and fundraiser profiles.

**Category:** Finance & Markets | **Website:** [kitabisa.com/](https://kitabisa.com/) | **Docs:** [parse.bot/marketplace/7655b0a5-83fa-4360-92a1-c2d5da631507/kitabisa-com-api](https://parse.bot/marketplace/7655b0a5-83fa-4360-92a1-c2d5da631507/kitabisa-com-api)

Pay-per-use API proxy. Each call is automatically billed to your wallet in USDC.

## Access

**Base URL:** `https://api.paywithlocus.com/api/wrapped/parse-kitabisa-com-api-7655b0a5/`
**Auth:** `Authorization: Bearer <LOCUS_API_KEY>`

## Endpoints

### get_campaign_detail

Fetch full details of a single fundraising campaign by its slug. Includes full HTML description, donor count, campaigner info with secondary_id, campaign status, donation progress, and more.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `slug` | string | Yes | Campaign slug (short URL identifier). Available from the short_url field in list_campaigns or search_campaigns results. |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-kitabisa-com-api-7655b0a5/get_campaign_detail \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"slug":"<string>"}'
```

### get_campaign_donors

Fetch the list of donors for a specific campaign. Returns the 10 most recent verified donations with amount, user info, and verification timestamp. New campaigns may have no donors yet.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `campaign_id` | integer | Yes | Campaign ID (numeric). Available from campaign list or detail endpoints. |
| `sort` | string | No | Sort order for donors. Accepted values: 'verified', 'latest'. |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-kitabisa-com-api-7655b0a5/get_campaign_donors \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"campaign_id":"<integer>","sort":"<string>"}'
```

### get_campaign_latest_news

Fetch the latest news/updates for a specific campaign. Returns update posts with title, HTML content, and publication timestamp. Not all campaigns have updates — an empty array is valid for campaigns without news.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `campaign_id` | integer | Yes | Campaign ID (numeric). Available from campaign list or detail endpoints. |
| `limit` | integer | No | Number of updates to return. |
| `offset` | integer | No | Pagination offset. |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-kitabisa-com-api-7655b0a5/get_campaign_latest_news \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"campaign_id":"<integer>","limit":"<integer>","offset":"<integer>"}'
```

### get_categories

Retrieve the full list of campaign categories. Each category has a slug usable with list_campaigns_by_category and a numeric ID usable with list_campaigns. The list is relatively stable (15-20 items).

**Estimated cost:** Metered

_No parameters required._

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-kitabisa-com-api-7655b0a5/get_categories \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
```

### get_fundraiser_profile

Fetch a fundraiser's public profile by their secondary ID (hash). The secondary_id can be found in campaign detail responses under campaigner.secondary_id. Returns full name, biography, verification status, and active_since timestamp.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `secondary_id` | string | Yes | Fundraiser's secondary ID (hash string from campaign detail). Available under campaigner.secondary_id in get_campaign_detail responses. |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-kitabisa-com-api-7655b0a5/get_fundraiser_profile \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"secondary_id":"<string>"}'
```

### list_campaigns

Fetch a paginated list of fundraising campaigns with optional filters and sorting. Returns campaigns ordered by the specified sort parameter. Use offset/limit for manual pagination.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `campaign_type` | string | No | Filter by campaign type. Accepted values: 'regular', 'pool_of_fund'. |
| `category_id` | integer | No | Filter by category ID. Category IDs can be obtained from get_categories endpoint. |
| `limit` | integer | No | Number of campaigns to return per page. |
| `offset` | integer | No | Offset for pagination. |
| `sort` | string | No | Sort order for campaigns. |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-kitabisa-com-api-7655b0a5/list_campaigns \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"campaign_type":"<string>","category_id":"<integer>","limit":"<integer>","offset":"<integer>","sort":"<string>"}'
```

### list_campaigns_by_category

Fetch campaigns filtered by a specific category slug. Resolves the slug to a category ID internally, then returns campaigns in that category. Use get_categories to discover valid slugs.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `category_slug` | string | Yes | Category slug to filter by (e.g. 'bencana-alam', 'kegiatan-sosial', 'bantuan-medis', 'beasiswa-pendidikan'). Valid slugs available from get_categories endpoint. |
| `limit` | integer | No | Number of results per page. |
| `offset` | integer | No | Pagination offset. |
| `sort` | string | No | Sort order for campaigns. |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-kitabisa-com-api-7655b0a5/list_campaigns_by_category \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"category_slug":"<string>","limit":"<integer>","offset":"<integer>","sort":"<string>"}'
```

### search_campaigns

Search for fundraising campaigns by keyword. Returns matching campaigns ranked by relevance/popularity. Results include campaign summary fields.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `page` | integer | No | Page number for pagination. |
| `per_page` | integer | No | Results per page (minimum 5). |
| `query` | string | Yes | Search keyword (e.g. 'anak', 'pendidikan', 'bencana'). |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-kitabisa-com-api-7655b0a5/search_campaigns \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"page":"<integer>","per_page":"<integer>","query":"<string>"}'
```
