---
title: References
description: Manage reference points for your OpenPanel projects. References are useful for marking important dates or events in your analytics timeline.
---

## Authentication

To authenticate with the References API, you need to use your `clientId` and `clientSecret` from a root client. Root clients have organization-wide access.

For detailed authentication information, see the [Authentication](/docs/api/authentication) guide.

Include the following headers with your requests:
- `openpanel-client-id`: Your OpenPanel root client ID
- `openpanel-client-secret`: Your OpenPanel root client secret

## Base URL

All References API requests should be made to:

```
https://api.openpanel.dev/manage/references
```

## What are References?

References are markers you can add to your analytics timeline to track important events such as:
- Product launches
- Marketing campaign start dates
- Feature releases
- Website redesigns
- Major announcements

References appear in your analytics charts and help you correlate changes in metrics with specific events.

## Endpoints

### List References

Retrieve all references in your organization, optionally filtered by project.

```
GET /manage/references
```

#### Query Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `projectId` | string | Optional. Filter references by project ID |

#### Example Request

```bash
# List all references
curl 'https://api.openpanel.dev/manage/references' \
  -H 'openpanel-client-id: YOUR_ROOT_CLIENT_ID' \
  -H 'openpanel-client-secret: YOUR_ROOT_CLIENT_SECRET'

# List references for a specific project
curl 'https://api.openpanel.dev/manage/references?projectId=my-project' \
  -H 'openpanel-client-id: YOUR_ROOT_CLIENT_ID' \
  -H 'openpanel-client-secret: YOUR_ROOT_CLIENT_SECRET'
```

#### Response

```json
{
  "data": [
    {
      "id": "1af09627-2dd7-4b37-9e5c-6ffa7e450e85",
      "title": "Product Launch",
      "description": "Version 2.0 released",
      "date": "2024-01-15T10:00:00.000Z",
      "projectId": "my-project",
      "createdAt": "2024-01-10T08:00:00.000Z",
      "updatedAt": "2024-01-10T08:00:00.000Z"
    },
    {
      "id": "2bf19738-3ee8-4c48-af6d-7ggb8f561f96",
      "title": "Marketing Campaign Start",
      "description": "Q1 2024 campaign launched",
      "date": "2024-01-20T09:00:00.000Z",
      "projectId": "my-project",
      "createdAt": "2024-01-18T10:00:00.000Z",
      "updatedAt": "2024-01-18T10:00:00.000Z"
    }
  ]
}
```

### Get Reference

Retrieve a specific reference by ID.

```
GET /manage/references/{id}
```

#### Path Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `id` | string | The ID of the reference (UUID) |

#### Example Request

```bash
curl 'https://api.openpanel.dev/manage/references/1af09627-2dd7-4b37-9e5c-6ffa7e450e85' \
  -H 'openpanel-client-id: YOUR_ROOT_CLIENT_ID' \
  -H 'openpanel-client-secret: YOUR_ROOT_CLIENT_SECRET'
```

#### Response

```json
{
  "data": {
    "id": "1af09627-2dd7-4b37-9e5c-6ffa7e450e85",
    "title": "Product Launch",
    "description": "Version 2.0 released",
    "date": "2024-01-15T10:00:00.000Z",
    "projectId": "my-project",
    "createdAt": "2024-01-10T08:00:00.000Z",
    "updatedAt": "2024-01-10T08:00:00.000Z"
  }
}
```

### Create Reference

Create a new reference point for a project.

```
POST /manage/references
```

#### Request Body

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `projectId` | string | Yes | The ID of the project this reference belongs to |
| `title` | string | Yes | Reference title (minimum 1 character) |
| `description` | string | No | Optional description or notes |
| `datetime` | string | Yes | Date and time for the reference (ISO 8601 format) |

#### Example Request

```bash
curl -X POST 'https://api.openpanel.dev/manage/references' \
  -H 'openpanel-client-id: YOUR_ROOT_CLIENT_ID' \
  -H 'openpanel-client-secret: YOUR_ROOT_CLIENT_SECRET' \
  -H 'Content-Type: application/json' \
  -d '{
    "projectId": "my-project",
    "title": "Product Launch",
    "description": "Version 2.0 released with new features",
    "datetime": "2024-01-15T10:00:00.000Z"
  }'
```

#### Response

```json
{
  "data": {
    "id": "1af09627-2dd7-4b37-9e5c-6ffa7e450e85",
    "title": "Product Launch",
    "description": "Version 2.0 released with new features",
    "date": "2024-01-15T10:00:00.000Z",
    "projectId": "my-project",
    "createdAt": "2024-01-10T08:00:00.000Z",
    "updatedAt": "2024-01-10T08:00:00.000Z"
  }
}
```

**Note**: The `date` field in the response is parsed from the `datetime` string you provided.

### Update Reference

Update an existing reference.

```
PATCH /manage/references/{id}
```

#### Path Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `id` | string | The ID of the reference (UUID) |

#### Request Body

All fields are optional. Only include fields you want to update.

| Parameter | Type | Description |
|-----------|------|-------------|
| `title` | string | Reference title (minimum 1 character) |
| `description` | string \| null | Description or notes (set to `null` to clear) |
| `datetime` | string | Date and time for the reference (ISO 8601 format) |

#### Example Request

```bash
curl -X PATCH 'https://api.openpanel.dev/manage/references/1af09627-2dd7-4b37-9e5c-6ffa7e450e85' \
  -H 'openpanel-client-id: YOUR_ROOT_CLIENT_ID' \
  -H 'openpanel-client-secret: YOUR_ROOT_CLIENT_SECRET' \
  -H 'Content-Type: application/json' \
  -d '{
    "title": "Product Launch v2.1",
    "description": "Updated: Version 2.1 released with bug fixes",
    "datetime": "2024-01-15T10:00:00.000Z"
  }'
```

#### Response

```json
{
  "data": {
    "id": "1af09627-2dd7-4b37-9e5c-6ffa7e450e85",
    "title": "Product Launch v2.1",
    "description": "Updated: Version 2.1 released with bug fixes",
    "date": "2024-01-15T10:00:00.000Z",
    "projectId": "my-project",
    "createdAt": "2024-01-10T08:00:00.000Z",
    "updatedAt": "2024-01-10T09:30:00.000Z"
  }
}
```

### Delete Reference

Permanently delete a reference. This action cannot be undone.

```
DELETE /manage/references/{id}
```

#### Path Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `id` | string | The ID of the reference (UUID) |

#### Example Request

```bash
curl -X DELETE 'https://api.openpanel.dev/manage/references/1af09627-2dd7-4b37-9e5c-6ffa7e450e85' \
  -H 'openpanel-client-id: YOUR_ROOT_CLIENT_ID' \
  -H 'openpanel-client-secret: YOUR_ROOT_CLIENT_SECRET'
```

#### Response

```json
{
  "success": true
}
```

## Error Handling

The API uses standard HTTP response codes. Common error responses:

### 400 Bad Request

```json
{
  "error": "Bad Request",
  "message": "Invalid request body",
  "details": [
    {
      "path": ["title"],
      "message": "String must contain at least 1 character(s)"
    }
  ]
}
```

### 401 Unauthorized

```json
{
  "error": "Unauthorized",
  "message": "Manage: Only root clients are allowed to manage resources"
}
```

### 404 Not Found

```json
{
  "error": "Not Found",
  "message": "Reference not found"
}
```

This error can occur if:
- The reference ID doesn't exist
- The reference belongs to a different organization

### 429 Too Many Requests

Rate limiting response includes headers indicating your rate limit status.

## Rate Limiting

The References API implements rate limiting:
- **20 requests per 10 seconds** per client
- Rate limit headers included in responses
- Implement exponential backoff for retries

## Date Format

References use ISO 8601 date format. Examples:

- `2024-01-15T10:00:00.000Z` - UTC timezone
- `2024-01-15T10:00:00-05:00` - Eastern Time (UTC-5)
- `2024-01-15` - Date only (time defaults to 00:00:00)

The `datetime` field in requests is converted to a `date` field in responses, stored as a timestamp.

## Use Cases

References are useful for:

- **Product Launches**: Mark when new versions or features are released
- **Marketing Campaigns**: Track campaign start and end dates
- **Website Changes**: Note when major redesigns or updates occur
- **Business Events**: Record important business milestones
- **A/B Testing**: Mark when experiments start or end
- **Seasonal Events**: Track holidays, sales periods, or seasonal changes

## Notes

- Reference IDs are UUIDs (Universally Unique Identifiers)
- References are scoped to projects - each reference belongs to a specific project
- References are scoped to your organization - you can only manage references for projects in your organization
- The `description` field is optional and can be set to `null` to clear it
- References appear in analytics charts to help correlate metrics with events
- When filtering by `projectId`, the project must exist and belong to your organization
