> ## Documentation Index
> Fetch the complete documentation index at: https://docs.9pic.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Participant Search

> Read and review changes to BIB and selfie search settings.

## Overview

> [!TIP]
>
> [Event Settings](/api-reference/event-settings) reads and changes these searches together with the other gallery settings.

Read or change BIB and selfie search settings. Enabled settings do not prove photo indexes are ready: `readiness` remains `unknown`. Disabling BIB search also disables context search; non-running events keep BIB search off. Active photo work blocks changes.

OAuth only. Read calls require `events:read`. Writes require both `events:read` and `events:write`, plus an accepted organiser **admin** membership. Send a bearer token without `X-API-Key`.

## Path Parameters

| Parameter | Type | Required | Description |
| - | - | - | - |
| `org_id` | integer | Yes | Organiser where the caller has an accepted membership. |
| `event_id` | integer | Yes | Event owned by that organiser. |

## GET Participant Search

```
GET /api/v1/ext/{org_id}/event/{event_id}/participant-search
```

### Example Request

```bash cURL theme={null}
curl -i -X GET \
  -H "Authorization: Bearer <oauth_access_token>" \
  "https://api.9pic.ai/api/v1/ext/903/event/456/participant-search"
```

```python Python theme={null}
import requests

response = requests.get(
    "https://api.9pic.ai/api/v1/ext/903/event/456/participant-search",
    headers={"Authorization": "Bearer <oauth_access_token>"},
)
print(response.status_code, response.json())
```

```javascript JavaScript theme={null}
const response = await fetch("https://api.9pic.ai/api/v1/ext/903/event/456/participant-search", {
  method: "GET",
  headers: { "Authorization": "Bearer <oauth_access_token>" },
});
console.log(await response.json());
```

### Example Response

```json theme={null}
{
  "responseType": "success",
  "message": "Records",
  "data": {
    "event_id": 456,
    "bib_search": false,
    "selfie_search": false,
    "context_search": false,
    "readiness": "unknown",
    "processing_required": false
  }
}
```

## PATCH Participant Search

```
PATCH /api/v1/ext/{org_id}/event/{event_id}/participant-search
```

### Request Body

Supply at least one of `bib_search` or `selfie_search` (boolean), plus `mode: "execute"` and an `idempotency_key`. Omitted settings retain their current value.

This write runs in one call: send `mode: "execute"` with a stable `idempotency_key`. No review token or confirmation is needed. `mode: "preview"` remains available as an optional dry run that returns `proposed` and `consequences` without changing anything. See [Operations](/api-reference/operations) for retry rules and status tracking.

### Example Request

```bash cURL theme={null}
curl -i -X PATCH \
  -H "Authorization: Bearer <oauth_access_token>" \
  -H "Content-Type: application/json" \
  "https://api.9pic.ai/api/v1/ext/903/event/456/participant-search" \
  -d '{"mode": "execute", "idempotency_key": "event-456-bib-on", "bib_search": true}'
```

```python Python theme={null}
import requests

response = requests.patch(
    "https://api.9pic.ai/api/v1/ext/903/event/456/participant-search",
    headers={"Authorization": "Bearer <oauth_access_token>"},
    json={'mode': 'execute', 'idempotency_key': 'event-456-bib-on', 'bib_search': True},
)
print(response.status_code, response.json())
```

```javascript JavaScript theme={null}
const response = await fetch("https://api.9pic.ai/api/v1/ext/903/event/456/participant-search", {
  method: "PATCH",
  headers: { "Authorization": "Bearer <oauth_access_token>", "Content-Type": "application/json" },
  body: JSON.stringify({"mode": "execute", "idempotency_key": "event-456-bib-on", "bib_search": true}),
});
console.log(await response.json());
```

### Example Response

```json theme={null}
{
  "responseType": "success",
  "message": "Search settings updated",
  "data": {
    "mode": "execute",
    "operation": "configure_participant_search",
    "org_id": 903,
    "event_id": 456,
    "review_token": null,
    "expires_at": null,
    "proposed": {
      "before": {
        "bib_search": false,
        "selfie_search": false,
        "context_search": false
      },
      "after": {
        "bib_search": true,
        "selfie_search": false,
        "context_search": false
      }
    },
    "consequences": [
      "Changes search settings; existing photos may need indexing before search is ready."
    ],
    "operation_id": "ddc661a7-8861-4793-9437-af42a82d12f8",
    "status": "completed",
    "result": {
      "event_id": 456,
      "bib_search": true,
      "selfie_search": false,
      "context_search": false,
      "readiness": "unknown",
      "processing_required": true
    }
  }
}
```

## Response Models

[ParticipantSearchData](/api-reference/models/workflow#participantsearchdata) and [GuardedOperationData](/api-reference/models/workflow#guardedoperationdata).

## Error Responses

| Status | Meaning |
| - | - |
| `400` / `422` | Invalid input or missing `idempotency_key` at execution. |
| `401` | Invalid or expired access token. |
| `403` | Missing scopes, membership, admin role, or entitlement. |
| `404` | Event configuration or caller-owned operation not found. |
| `409` | Retry key reused for a different action, duplicate source, active work, or state conflict. |
| `503` | Organiser writes are temporarily unavailable. |

See [Errors](/api-reference/errors) and [Conventions](/api-reference/conventions).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.