# Profilculture — 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.

> Search and filter job listings in France's cultural and media sectors by keyword, sector, region, contract type, or job family to find employment opportunities and internships. Retrieve full details on specific job offers including requirements, contract terms, and position information.

**Category:** Jobs | **Website:** [profilculture.com/](https://profilculture.com/) | **Docs:** [parse.bot/marketplace/e30aa870-c23b-46a6-beeb-eab95e0db2b3/profilculture-com-api](https://parse.bot/marketplace/e30aa870-c23b-46a6-beeb-eab95e0db2b3/profilculture-com-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/profilculture/`
**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

### Get offer detail

Retrieve the full detail of a specific job offer by its slug-ID or full URL. Either slug_id or url must be provided. The slug_id is the portion of the listing URL after /annonce/ without the .html extension. Returns comprehensive information including job description, required profile, employer description, salary, and application instructions when available.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `slug_id` | string | No | Job slug and ID extracted from a listing URL (the portion after /annonce/ without .html), e.g. 'directeur-rice-495571'. |
| `url` | string | No | Full job offer URL from listing results. |

```bash
curl -X POST https://api.beta.paywithlocus.com/api/wrapped/credits/profilculture/get-offer-detail \
  -H "Authorization: Bearer $LOCUS_CREDITS_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"slug_id":"<string>","url":"<string>"}'
```

### List all offers

Retrieve all job offers with pagination. Returns approximately 20 offers per page across all categories (employment, internships, apprenticeships). Results are ordered by posting date descending.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `page` | integer | No | Page number for pagination. |

```bash
curl -X POST https://api.beta.paywithlocus.com/api/wrapped/credits/profilculture/list-all-offers \
  -H "Authorization: Bearer $LOCUS_CREDITS_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"page":"<integer>"}'
```

### List employment offers

Retrieve employment (CDI/CDD) offers with pagination. Excludes internships and apprenticeships. Results are ordered by posting date descending.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `page` | integer | No | Page number for pagination. |

```bash
curl -X POST https://api.beta.paywithlocus.com/api/wrapped/credits/profilculture/list-employment-offers \
  -H "Authorization: Bearer $LOCUS_CREDITS_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"page":"<integer>"}'
```

### List internship offers

Retrieve internship, apprenticeship, and civic service offers with pagination. Excludes standard employment contracts. Results are ordered by posting date descending.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `page` | integer | No | Page number for pagination. |

```bash
curl -X POST https://api.beta.paywithlocus.com/api/wrapped/credits/profilculture/list-internship-offers \
  -H "Authorization: Bearer $LOCUS_CREDITS_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"page":"<integer>"}'
```

### Search offers by contract type

Filter job offers by contract type IDs with pagination. Each ID corresponds to a specific employment contract category. Results are ordered by posting date descending.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `contract_ids` | string | Yes | Comma-separated contract type IDs. Accepted values: 1 (CDI), 2 (CDD long > 5 mois), 3 (CDD court/CDDU), 4 (Fonction publique/territoriale), 5 (Service Civique/Volontariat), 6 (Free lance/Indépendant), 7 (Stage), 8 (Alternance). |
| `page` | integer | No | Page number for pagination. |

```bash
curl -X POST https://api.beta.paywithlocus.com/api/wrapped/credits/profilculture/search-offers-by-contract-type \
  -H "Authorization: Bearer $LOCUS_CREDITS_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"contract_ids":"<string>","page":"<integer>"}'
```

### Search offers by job family

Filter job offers by job family IDs (Famille de métiers) with pagination. Each family groups related professional roles in the cultural sector. Results are ordered by posting date descending.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `job_family_ids` | string | Yes | Comma-separated job family IDs. Accepted values: 1 (Administration/Gestion/Juridique), 2 (Diffusion/Distribution/Commercialisation), 3 (Communication/Promotion/Marketing), 4 (Production/Réalisation/Programmation), 5 (Professionnels de l'Ecriture), 6 (Son/Image/Direction technique/Régie), 7 (Relation avec les publics/Médiation), 8 (Conservation du Patrimoine/Politique Culturelle), 9 (Architecture/Décoration/Scénographie), 10 (Enseignement), 11 (Artistes), 12 (Conception web/Multimédia/Graphisme), 13 (Direction générale). |
| `page` | integer | No | Page number for pagination. |

```bash
curl -X POST https://api.beta.paywithlocus.com/api/wrapped/credits/profilculture/search-offers-by-job-family \
  -H "Authorization: Bearer $LOCUS_CREDITS_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"job_family_ids":"<string>","page":"<integer>"}'
```

### Search offers by keyword

Search job offers by keyword with pagination. Returns listings matching the provided keyword across all fields (title, employer, description). Results are ordered by relevance.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `keyword` | string | Yes | Search keyword (e.g. 'communication', 'marketing', 'design'). |
| `page` | integer | No | Page number for pagination. |

```bash
curl -X POST https://api.beta.paywithlocus.com/api/wrapped/credits/profilculture/search-offers-by-keyword \
  -H "Authorization: Bearer $LOCUS_CREDITS_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"keyword":"<string>","page":"<integer>"}'
```

### Search offers by region

Filter job offers by region IDs with pagination. Covers all French regions plus neighboring countries. Results are ordered by posting date descending.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `page` | integer | No | Page number for pagination. |
| `region_ids` | string | Yes | Comma-separated region IDs. Accepted values: 1 (Auvergne-Rhône-Alpes), 2 (Bourgogne-Franche-Comté), 3 (Bretagne), 4 (Centre-Val de Loire), 5 (Corse), 6 (Grand Est), 7 (Hauts-de-France), 8 (Île-de-France), 9 (Normandie), 10 (Nouvelle-Aquitaine), 11 (Occitanie), 12 (Pays de la Loire), 13 (Provence-Alpes-Côte d'Azur), 14 (DROM-COM), 15 (Belgique/Luxembourg), 16 (Suisse), 17 (Autre pays UE), 18 (Autre pays hors UE). |

```bash
curl -X POST https://api.beta.paywithlocus.com/api/wrapped/credits/profilculture/search-offers-by-region \
  -H "Authorization: Bearer $LOCUS_CREDITS_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"page":"<integer>","region_ids":"<string>"}'
```

### Search offers by sector

Filter job offers by sector IDs with pagination. Each sector represents a cultural industry vertical. Results are ordered by posting date descending.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `page` | integer | No | Page number for pagination. |
| `sector_ids` | string | Yes | Comma-separated sector IDs. Accepted values: 1 (Audiovisuel), 2 (Événementiel), 3 (Edition/Presse/Communication), 4 (Spectacle vivant), 5 (Patrimoine/Politique Culturelle), 6 (Art/Architecture/Design). |

```bash
curl -X POST https://api.beta.paywithlocus.com/api/wrapped/credits/profilculture/search-offers-by-sector \
  -H "Authorization: Bearer $LOCUS_CREDITS_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"page":"<integer>","sector_ids":"<string>"}'
```

### Search offers combined

Search job offers using multiple combined filters. At least one filter should be provided. Combines keyword, sector, region, contract type, and job family filters into a single query. If no filters are given, returns all offers. Results are ordered by posting date descending.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `contract_ids` | string | No | Comma-separated contract type IDs (1-8). |
| `job_family_ids` | string | No | Comma-separated job family IDs (1-13). |
| `keyword` | string | No | Search keyword. |
| `page` | integer | No | Page number for pagination. |
| `region_ids` | string | No | Comma-separated region IDs (1-18). |
| `sector_ids` | string | No | Comma-separated sector IDs (1-6). |

```bash
curl -X POST https://api.beta.paywithlocus.com/api/wrapped/credits/profilculture/search-offers-combined \
  -H "Authorization: Bearer $LOCUS_CREDITS_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"contract_ids":"<string>","job_family_ids":"<string>","keyword":"<string>","page":"<integer>","region_ids":"<string>","sector_ids":"<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.