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

> 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. Each call is automatically billed to your wallet in USDC.

## Access

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

## 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.paywithlocus.com/api/wrapped/parse-profilculture-com-api-e30aa870/get_offer_detail \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -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.paywithlocus.com/api/wrapped/parse-profilculture-com-api-e30aa870/list_all_offers \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -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.paywithlocus.com/api/wrapped/parse-profilculture-com-api-e30aa870/list_employment_offers \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -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.paywithlocus.com/api/wrapped/parse-profilculture-com-api-e30aa870/list_internship_offers \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -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.paywithlocus.com/api/wrapped/parse-profilculture-com-api-e30aa870/search_offers_by_contract_type \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -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.paywithlocus.com/api/wrapped/parse-profilculture-com-api-e30aa870/search_offers_by_job_family \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -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.paywithlocus.com/api/wrapped/parse-profilculture-com-api-e30aa870/search_offers_by_keyword \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -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.paywithlocus.com/api/wrapped/parse-profilculture-com-api-e30aa870/search_offers_by_region \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -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.paywithlocus.com/api/wrapped/parse-profilculture-com-api-e30aa870/search_offers_by_sector \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -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.paywithlocus.com/api/wrapped/parse-profilculture-com-api-e30aa870/search_offers_combined \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"contract_ids":"<string>","job_family_ids":"<string>","keyword":"<string>","page":"<integer>","region_ids":"<string>","sector_ids":"<string>"}'
```
