Source: https://dinakar-rewind.docs.pageloop.ai/api-reference/admin/adminsyncattending

# Trigger attending backfill

POST `https://api.rewind.rest/v1/admin/sync/attending`

Run the attending backfill pipeline against Google Calendar and Gmail. Pass dry\_run=true to inspect candidates without writing.

## Authorization

#### Authorization (header, string, required)

API key. Read keys (rw\_live\_...) access GET endpoints. Admin keys (rw\_admin\_...) access all endpoints.

## Body

#### source (body, enum (string)) — allowed: gcal, gmail, all

#### dry\_run (body, boolean)

#### from (body, string)

#### to (body, string)

## Response

#### 200

Backfill completed

#### status (enum (string), required) — allowed: completed

#### candidates\_found (integer, required)

#### events\_loaded (integer, required)

#### sources (object, required)

#### properties

#### gcal (integer, required)

#### gmail (integer, required)

#### dry\_run (boolean, required)

#### timestamp (string, required)

#### gcal (object)

#### properties

#### scanned (integer, required)

#### matched (integer, required)

#### inserted (integer, required)

#### candidates (array of object)

#### resynced\_from\_expiry (boolean)

#### gmail (object)

#### properties

#### scanned (integer, required)

#### fetched (integer, required)

#### parsed (integer, required)

#### inserted (integer, required)

#### skipped\_subject (integer, required)

#### skipped\_no\_jsonld (integer, required)

#### candidates (array of object)

#### enriched (array of object)

#### load (object)

#### properties

#### enriched (integer, required)

#### inserted (integer, required)

#### updated (integer, required)

#### failed (integer, required)

#### ticket\_inserts (integer, required)

#### performer\_inserts (integer, required)

#### 400

Bad request

#### error (string, required)

#### status (integer, required)

#### 401

Unauthorized

#### error (string, required)

#### status (integer, required)

#### 500

Internal server error

#### error (string, required)

#### status (integer, required)

#### Request

```bash cURL
curl -X POST 'https://api.rewind.rest/v1/admin/sync/attending' \
  -H 'Authorization: Bearer <token>' \
  -H 'Content-Type: application/json' \
  -d '{"source": "gcal", "dry_run": true, "from": "2018-01-01", "to": "2026-04-25"}'
```

```javascript JavaScript
const res = await fetch('https://api.rewind.rest/v1/admin/sync/attending', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer <token>',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({"source": "gcal", "dry_run": true, "from": "2018-01-01", "to": "2026-04-25"}),
});
const data = await res.json();
```

```python Python
import requests

res = requests.post(
    'https://api.rewind.rest/v1/admin/sync/attending',
    headers={'Authorization': 'Bearer <token>'},
    json={"source": "gcal", "dry_run": true, "from": "2018-01-01", "to": "2026-04-25"}
)
data = res.json()
```

#### Response

```json 200
{
  "status": "completed",
  "candidates_found": 0,
  "events_loaded": 0,
  "sources": {
    "gcal": 0,
    "gmail": 0
  },
  "dry_run": true,
  "timestamp": "date-time",
  "gcal": {
    "scanned": 0,
    "matched": 0,
    "inserted": 0,
    "candidates": [
      {
        "source_ref": "\u2026",
        "event_date": "\u2026",
        "event_datetime": "\u2026",
        "summary": "\u2026",
        "location": "\u2026",
        "status": "\u2026",
        "html_link": "\u2026"
      }
    ],
    "resynced_from_expiry": true
  },
  "gmail": {
    "scanned": 0,
    "fetched": 0,
    "parsed": 0,
    "inserted": 0,
    "skipped_subject": 0,
    "skipped_no_jsonld": 0,
    "candidates": [
      {}
    ]
  },
  "enriched": [
    {}
  ],
  "load": {
    "enriched": 0,
    "inserted": 0,
    "updated": 0,
    "failed": 0,
    "ticket_inserts": 0,
    "performer_inserts": 0
  }
}
```

```json 400
{
  "error": "Not found",
  "status": 404
}
```

```json 401
{
  "error": "Not found",
  "status": 404
}
```

```json 500
{
  "error": "Not found",
  "status": 404
}
```
