# Devfolio — Wrapped API

> **You are on:** `https://api.beta.paywithlocus.com/api` | [llms.txt](https://beta.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.

> Access data from devfolio.co.

**Category:** Developer Tools | **Website:** [devfolio.co/hackathons](https://devfolio.co/hackathons) | **Docs:** [parse.bot/marketplace/e44c7e9f-ad39-4c30-88dc-692fdbd9a858/devfolio-co-api](https://parse.bot/marketplace/e44c7e9f-ad39-4c30-88dc-692fdbd9a858/devfolio-co-api)

Pay-per-use API proxy for Locus Pro. Each call burns credits from your workspace balance.

## Access

**Base URL:** `https://api.beta.paywithlocus.com/api/wrapped/credits/devfolio/`
**Auth:** `Authorization: Bearer <LOCUS_CREDITS_SECRET_KEY>` (an `lcr_` secret key or a scoped `lcac_` agent credential)
**Required header:** `Idempotency-Key: <fresh UUID per call>`. A retry with the same key replays the stored result without a new charge.
**Response:** the provider response after any endpoint-specific normalization. `X-Locus-Credits-Charged` carries the charge and `X-Locus-Credits-Balance` the remaining balance. Insufficient credits return `402` before the provider is called.
**Pricing:** estimated costs below are USD. Locus debits the credit equivalent at your workspace rate.

Full call contract: https://docs.paywithlocus.com/api-reference/introduction

> Using a Pay With Locus wallet key (`claw_` prefix)? Wallet routes are documented separately: https://docs.paywithlocus.com/wrapped-apis/for-agents

## Endpoints

### Search hackathons

Search hackathons by keyword or list them by status. When a query is provided, results are ranked by relevance across all hackathons regardless of status. When no query is provided, results are filtered by the type parameter (defaults to applications currently open). Results are paginated via from/size offsets. Optional client-side filters (theme, eligibility, level, location) narrow results after fetching from the upstream API; when any filter is active, total reflects the count of matching results found within the scanned upstream window (up to 250 results scanned).

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `eligibility` | string | No | Filter by eligibility/participant criteria (case-insensitive text match against hackathon name, tagline, and description). Use values like 'undergraduate', 'student', 'women' to find hackathons targeting specific participant groups. |
| `from` | integer | No | Zero-based offset for pagination. Use with size to page through results. |
| `level` | string | No | Filter by hackathon scope/level (case-insensitive text match against hackathon name, tagline, and description). Use values like 'national', 'international', 'college' to find hackathons of a specific scale. |
| `location` | string | No | Filter by location. Returns hackathons that are either (a) online (always included) or (b) held in a city matching this value (case-insensitive match against city, location, and name fields). Bangalore and Bengaluru are treated as equivalent. |
| `query` | string | No | Free-text search query matched against hackathon names and descriptions. When provided, the type filter is ignored and results span all statuses. |
| `size` | integer | No | Number of hackathons to return per request, between 1 and 50. |
| `theme` | string | No | Filter by hackathon theme/domain (case-insensitive partial match against theme tags like AI, Blockchain, FinTech, HealthTech, Design, Hardware, etc.). Only hackathons whose themes array contains a matching entry are returned. |
| `type` | string | No | Status filter applied when no query is provided. Ignored when query is set. |

```bash
curl -X POST https://api.beta.paywithlocus.com/api/wrapped/credits/devfolio/search-hackathons \
  -H "Authorization: Bearer $LOCUS_CREDITS_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"eligibility":"<string>","from":"<integer>","level":"<string>","location":"<string>","query":"<string>","size":"<integer>","theme":"<string>","type":"<string>"}'
```

## Next steps

- [All wrapped API providers](https://beta.paywithlocus.com/wapi/index.md): pick another provider.
- [Find and call tools](https://beta.paywithlocus.com/agent/tools.md): price ceilings, async results, and errors.
- [Credits and billing](https://beta.paywithlocus.com/agent/billing.md): what a call costs and how to add credits.
- [Agent docs index](https://beta.paywithlocus.com/agent/index.md): every Locus agent page.