Skip to main content

Collections

Collections store your data as items with defined properties. Each collection becomes a RESTful endpoint.

Naming

  • Unique within the API
  • Case-sensitive
  • Allowed characters: letters, digits, hyphens, underscores
  • The name becomes the endpoint path
https://eu.restapi.com/my-api/products
└── collection name
note

Renaming a collection changes its endpoint path.

Properties

Each collection can have up to 25 properties.

Property Rules

  • Unique names within the collection
  • Case-sensitive
  • Allowed characters: letters, digits, underscores
  • Must begin with a letter

Property Configuration

SettingDescription
NameUnique identifier for the property
TypeData type (string, integer, decimal, etc.)
RequiredIf true, must be provided on create
DefaultValue used when property is omitted
ValidationMin/max length or value constraints

Data Types

TypeDescription
stringText, max 1024 characters
integerWhole numbers (-2,147,483,648 to 2,147,483,647)
decimalDecimal numbers
booleantrue or false
dateDate only (YYYY-MM-DD)
date-timeDate and time in ISO 8601 format
guidUnique identifier (UUID format)
blobBinary data (files)
objectReference to another model

Lookup Properties

Create relationships between collections:

{
"name": "customer",
"type": "lookup",
"target": "customers"
}

Access related data in queries or via the select parameter:

?select=orderDate,total,customer.name,customer.email

Self-Referencing Lookups

Collections can reference themselves, which is useful for hierarchical data structures:

{
"name": "categories",
"properties": [
{ "name": "name", "type": "string" },
{ "name": "parent", "type": "lookup", "target": "categories" }
]
}

Use cases:

  • Category trees with parent/child relationships
  • Organizational hierarchies
  • Threaded comments
  • File/folder structures

Validation

Required Fields

Required properties must be included in POST/PUT requests:

{ "name": "email", "type": "string", "required": true }

Missing required fields return 400 Bad Request.

String Constraints

Limit string length:

{
"name": "title",
"type": "string",
"minLength": 1,
"maxLength": 100
}

Numeric Constraints

Set value boundaries:

{
"name": "quantity",
"type": "integer",
"min": 0,
"max": 1000
}

Default Values

Provide defaults for optional properties:

{
"name": "status",
"type": "string",
"default": "pending"
}

Defaults apply to POST and PUT operations when the property is omitted.

Expression-Based Defaults

Use expressions for dynamic default values:

ExpressionDescription
now()Current UTC date-time
now() + 7D7 days from now
now() - 1H1 hour ago
newId()Generate unique GUID
10 + 5Numeric calculation

Date/time tokens: now(), D (days), H (hours), M (minutes), S (seconds). Tokens are case-insensitive.

{
"name": "createdAt",
"type": "date-time",
"default": "now()"
}
{
"name": "dueDate",
"type": "date-time",
"default": "now() + 7D"
}

See Data Types for complete documentation on default value expressions.

Example Collection

{
"name": "products",
"properties": [
{ "name": "sku", "type": "string", "required": true },
{ "name": "name", "type": "string", "required": true, "maxLength": 200 },
{ "name": "description", "type": "string" },
{ "name": "price", "type": "decimal", "required": true, "min": 0 },
{ "name": "stock", "type": "integer", "default": 0, "min": 0 },
{ "name": "isActive", "type": "boolean", "default": true },
{ "name": "createdAt", "type": "date-time", "default": "now()" },
{ "name": "category", "type": "lookup", "target": "categories" },
{ "name": "image", "type": "blob" }
]
}