# ImageReferenceField
Custom field types for referencing Image content objects. Unlike standard relation fields, these serialize to full image data including dimensions and scales.
## Field Types
**ImageReferenceField**
Single image reference. Serializes to a full Image object with metadata and scales.
**ImageReferenceList**
Multiple image references. Serializes to a list of Image objects.
## REST API Serialization
### Single Image Reference (GET)
When serialized via plone.restapi, an ImageReferenceField returns the complete Image object representation instead of relation data.
```http
GET /Plone/my-page HTTP/1.1
Host: localhost:8080
Accept: application/json
```
Response:
```{literalinclude} ./http-examples/imagereference-single.resp
:language: http
```
The serialized image includes:
- `@id`: Absolute URL of the image
- `@type`: Content type (`Image`)
- `UID`: Unique identifier
- `title`: Image title
- `image`: Image data object containing:
- `content-type`: MIME type
- `download`: Download URL
- `filename`: Original filename
- `width`, `height`: Original dimensions
- `size`: File size in bytes
- `scales`: Available image scales with dimensions and URLs
### Multiple Image References (GET)
ImageReferenceList returns an array of Image objects.
```http
GET /Plone/my-gallery HTTP/1.1
Host: localhost:8080
Accept: application/json
```
Response:
```{literalinclude} ./http-examples/imagereference-list.resp
:language: http
```
Empty fields return `null` for single references or `[]` for lists.
## REST API Deserialization
### Creating/Updating Content (POST/PATCH)
Image references accept the same formats as standard relation fields:
**Single reference:**
```json
{
"hero_image": "a1b2c3d4e5f6a1b2c3d4e5f6"
}
```
**Multiple references:**
```json
{
"gallery_images": [
"a1b2c3d4e5f6a1b2c3d4e5f6",
"b2c3d4e5f6a1b2c3d4e5f6a1"
]
}
```
Supported input formats:
- **UID string**: `"a1b2c3d4e5f6a1b2c3d4e5f6"`
- **Path string**: `"/plone/media/hero.jpg"`
- **URL string**: `"http://localhost:8080/plone/media/hero.jpg"`
- **Object with @id**: `{"@id": "http://localhost:8080/plone/media/hero.jpg"}`
## Visibility Filtering
The serializer automatically filters images based on:
- **View permission**: Images without view permission return `null` (single) or are omitted (list)
- **Effective/expiration dates**: Inactive images (future effective date or past expiration) are filtered for anonymous users; managers see all images
## Schema Definition
### Basic Usage
```xml
Hero Image
False
Gallery Images
False
```
### With Widget Configuration
Configure the reference browser widget to restrict selection to Image content types:
```xml
Hero Image
False
Image
True
Gallery Images
False
Image
True
```
Widget options:
- `selectable`: List of portal types the user can select
- `override`: Set to `True` to use custom selectable types instead of defaults