# Builderly API reference

Base URL: http://bulgariandebateassociation.max-media.io
Generated from the running server on 2026-11-09T16:55:30.339Z. Every mounted route is listed with the access it needs, the parameters its handler reads and the data models it uses.

## Authentication

Send `Authorization: Bearer <token>` where a route needs a token. Add `?ionic=true` to get JSON from routes that also render pages.

- **Admin token** (`admin`): Bearer token of a site admin (Authorization: Bearer <token>).
- **User token** (`user`): Bearer token of a signed-in user of the site.
- **Optional user** (`optional-user`): Works without a token; a user token personalises the answer.
- **User with access** (`user-priv`): A signed-in user whose plan grants access to the item.
- **Page access** (`page-priv`): Pages limited to some users check the token when one is sent.
- **Webhook signature** (`webhook`): Called by a provider; verified by its signature.
- **reCAPTCHA** (`recaptcha`): Needs a reCAPTCHA token from the site form.
- **System** (`system`): Internal - called by the platform itself.

### For AI assistants: getting a token

Public endpoints (Access: Public) need no token. Everything else - changing the site, or reading its orders, bookings, customers and other private data - needs the site owner's API token.

You cannot create a token yourself, and you must not ask for the owner's password. Ask the user for a token instead - you can send them this message as it is:

> To work with your site through its API, I need an API token from you:
> 1. Sign in to your Builderly admin: https://admin.max-media.io
> 2. Open Developers > API reference (or go straight to https://admin.max-media.io/tabs/site-builder/api-docs).
> 3. Press "Generate token", copy the token and paste it here.
> The token acts as you, so only share it in this chat. You can cancel it at any time by signing out of all devices.

Then send it with every request as `Authorization: Bearer <token>`, and add `?ionic=true` to get JSON. Calls go to the site's own address (its domain), not to the reference's.

The token acts as the user: say what you will change and wait for their yes before any request that creates, changes or deletes something, never repeat the token back, and never put it in a link or a file you share.

## Status codes

| Code | Name | Meaning |
| --- | --- | --- |
| 200 | OK | It worked. The answer is the object or list asked for. |
| 201 | Created | The object was created. Some endpoints send it back; others send an empty body. |
| 202 | Accepted | The work was started and finishes in the background - for example a video being processed ({ "status": "processing" }). Check back on the object. |
| 204 | No Content | It worked, and there is nothing to send back - for example after removing a staff member. |
| 301 | Moved Permanently | The address changed; follow the Location header. |
| 400 | Bad Request | The request was refused as sent: a required field is missing, a value has the wrong type or fails validation. The body says what - often as plain text. |
| 401 | Unauthorized | No token, or one that is invalid or signed out. Without ?ionic=true, some endpoints answer this with the HTML login page instead of JSON. |
| 402 | Payment Required | The content needs a subscription: the user has no price plan that unlocks it. |
| 403 | Forbidden | The token is valid but may not do this - the record belongs to someone else, or the user is not an admin. AI builder endpoints also answer 403 when the account is out of credits. |
| 404 | Not Found | No object with that ID or URL slug, or no such endpoint. |
| 409 | Conflict | It clashes with the current state: the item is already being processed, a version is already applied, or an AI plan or preview is no longer available. |
| 410 | Gone | It existed but is no longer there - for example a comment already deleted on the social network. |
| 412 | Precondition Failed | A rule the request must meet is not met - for example push notifications of the same type at least 48 hours apart. |
| 418 | I'm a teapot | An account confirmation or password reset link was used with an email that does not match it. |
| 421 | Misdirected Request | The domain is not a Builderly site. Call the site's own address. |
| 422 | Unprocessable Content | The request was understood but could not be done - for example the AI could not read the website it was asked to clone. The message says what to try instead. |
| 429 | Too Many Requests | Slow down: the site's request limit was reached, an AI chat already has a request running, or the hourly limit of AI search answers is used up. Wait and retry. |
| 500 | Internal Server Error | Something failed on the server. Retrying later may work; if it keeps failing, the request may be one the endpoint does not handle. |
| 502 | Bad Gateway | A service the request depends on failed - for example the address a redirect forwards to. |
| 503 | Service Unavailable | Used by the lead form when an order is below its minimum value, not only for outages: read the message. |

Errors do not share one shape: depending on the endpoint the body is plain text, { "error": "..." }, { "message": "..." } or empty. Rely on the status code, and show the body to the user as the reason.

## Endpoints

### Orders & checkout

Orders are completed purchases from the store - products, programs, tickets, donations - with their payment, delivery and status. Carts and checkout sessions lead to them.

#### Boxnow Settings

##### List all boxnow offices
`GET /boxnow-offices`
BoxNow lockers. Reads no token.
- Access: Public
- Status codes: 200, 500

##### Create a boxnow setting
`POST /boxnow-settings`
Connects BoxNow delivery, for the user or an account they manage (on_behalf_of). 403 for an account the user may not manage. Answers the settings.
- Access: User token
- Body:
  - `on_behalf_of` (string): The boxnow setting's on behalf of.
- Returns: the BoxNowSettings object.
- Status codes: 200, 400, 401, 403, 500
- Models: ConnectedAccount, BoxNowSettings

##### List all boxnow settings
`GET /boxnow-settings/:delivery`
The BoxNow settings of a delivery setting. delivery is the Shipping.id the settings belong to.
- Access: User token
- Path:
  - `delivery` (string): The boxnow setting's delivery.
- Returns: a list of BoxNowSettings objects.
- Status codes: 200, 401, 500
- Models: BoxNowSettings

##### Update a boxnow setting
`PATCH /boxnow-settings/:id`
Updates the BoxNow settings. Fields outside the allowed list are silently ignored. Answers the updated record, or 404.
- Access: User token
- Path:
  - `id` (string): The ID of the boxnow setting.
- Returns: the BoxNowSettings object.
- Status codes: 200, 400, 401, 404, 500
- Models: BoxNowSettings

##### Delete a boxnow setting
`DELETE /boxnow-settings/:id`
Disconnects BoxNow delivery. 403 when they are another user's.
- Access: User token
- Path:
  - `id` (string): The ID of the boxnow setting.
- Returns: an empty answer on success.
- Status codes: 200, 401, 403, 404, 500
- Models: BoxNowSettings, ConnectedAccount

##### Update a boxnow shipping
`PATCH /boxnow-shipping-id/:id`
Links the BoxNow settings to a delivery setting (shipping). 404 when there are no such settings.
- Access: User token
- Path:
  - `id` (string): The ID of the boxnow shipping.
- Body:
  - `shipping` (string): The boxnow shipping's shipping.
- Status codes: 200, 401, 404, 500
- Models: BoxNowSettings

#### Cart

##### List all carts
`GET /carts`
Every cart. Every visitor's cart.
- Access: User token
- Returns: a list of Cart objects.
- Status codes: 200, 401, 500
- Models: Cart

##### Create a cart
`POST /carts`
Creates a cart. Visitors' carts are made by POST /carts/flow; this is for admin tools. Answers 201.
- Access: User token
- Returns: the Cart object.
- Status codes: 201, 400, 401, 500
- Models: Cart

##### Update a cart
`PATCH /carts/:id`
Updates a cart. Answers the updated cart, or 404.
- Access: User token
- Path:
  - `id` (string): The ID of the cart.
- Returns: the Cart object.
- Status codes: 200, 400, 401, 404, 500
- Models: Cart

##### Delete a cart
`DELETE /carts/:id`
Deletes a cart. Answers the deleted cart, or 404.
- Access: User token
- Path:
  - `id` (string): The ID of the cart.
- Returns: an empty answer on success.
- Status codes: 200, 401, 404, 500
- Models: Cart

##### Count carts
`GET /carts/count`
How many items are in the visitor's cart, for the header badge; ?total for the total too. Answers { qty } or { qty, total } with the total to 2 decimals. Not cached, so it stays right on cached pages.
- Access: Public
- Query:
  - `total` (string): Only carts with this total.
- Returns: a list of Cart objects.
- Status codes: 200, 500
- Models: Cart, Product

##### List all carts
`GET /my_carts`
The visitor's cart page, or the cart as JSON with ?ionic (?sessionId). Each item with its product, category and stock. The cart is found by the visitor's session, or ?sessionId in the app.
- Access: Optional user
- Query:
  - `sessionId` (string): Only carts with this session id.
  - `pending_coupon` (string): Only carts with this pending coupon.
  - `region` (string): Only carts with this region.
  - `cart_only` (string): Only carts with this cart only.
- Returns: a list of Cart objects.
- Status codes: 200, 500
- Models: Cart, Product, Collection, Inventory, Coupon, MyContact, SocialModeSettings, Shipping, EcontSettings, SpeedySettings, BoxNowSettings, RatingSettings, Rating

#### Econt Settings

##### Create an econt setting
`POST /econt-settings`
Connects Econt delivery, for the user or an account they manage (on_behalf_of). 403 for an account the user may not manage. Answers the settings.
- Access: User token
- Body:
  - `on_behalf_of` (string): The econt setting's on behalf of.
- Returns: the EcontSettings object.
- Status codes: 200, 400, 401, 403, 500
- Models: ConnectedAccount, EcontSettings

##### List all econt settings
`GET /econt-settings/:delivery`
The Econt settings of a delivery setting. delivery is the Shipping.id the settings belong to.
- Access: User token
- Path:
  - `delivery` (string): The econt setting's delivery.
- Returns: a list of EcontSettings objects.
- Status codes: 200, 401, 500
- Models: EcontSettings

##### Update an econt setting
`PATCH /econt-settings/:id`
Updates the Econt settings. Fields outside the allowed list are silently ignored. Answers the updated record, or 404.
- Access: User token
- Path:
  - `id` (string): The ID of the econt setting.
- Returns: the EcontSettings object.
- Status codes: 200, 400, 401, 404, 500
- Models: EcontSettings

##### Update an econt shipping
`PATCH /econt-shipping-id/:id`
Links the Econt settings to a delivery setting (shipping). 404 when there are no such settings.
- Access: User token
- Path:
  - `id` (string): The ID of the econt shipping.
- Body:
  - `shipping` (string): The econt shipping's shipping.
- Status codes: 200, 401, 404, 500
- Models: EcontSettings

#### Order

##### List all abandoned orders
`GET /abandoned-orders`
Orders left at checkout. Orders that were started but not finalized.
- Access: User token
- Returns: a list of Order objects.
- Status codes: 200, 401, 500
- Models: Order

##### List all orders
`GET /orders`
The orders. Newest first.
- Access: User token
- Returns: a list of Order objects.
- Status codes: 200, 401, 500
- Models: Order

##### Create an order
`POST /orders`
Creates an order from the cart's products. Reads no token. The order is not finalized until payment: see POST /checkout and PATCH /finalize-order.
- Access: Public
- Body:
  - `products` (string[]): Product ids ordered.
- Returns: the Order object.
- Status codes: 200, 400, 500
- Models: Order

##### Retrieve an order
`GET /orders/:id`
One order. Reads no token: anyone who knows the id can read it.
- Access: Public
- Path:
  - `id` (string): The ID of the order.
- Returns: the Order object.
- Status codes: 200, 404, 500
- Models: Order

#### Origin Address

##### Retrieve the origin address
`GET /origin-address`
The origin addresses. Answers an array of every record.
- Access: Public
- Returns: the OriginAddress object.
- Status codes: 200, 500
- Models: OriginAddress

##### Create an origin address
`POST /origin-address`
Creates an origin address (warehouse, office). Answers 201 with no body.
- Access: Admin token
- Returns: the OriginAddress object.
- Status codes: 201, 401, 500
- Models: OriginAddress

##### Retrieve an origin address
`GET /origin-address/:id`
One origin address. Answers null when there is no such address.
- Access: Public
- Path:
  - `id` (string): The ID of the origin address.
- Returns: the OriginAddress object.
- Status codes: 200, 500
- Models: OriginAddress

##### Update an origin address
`PATCH /origin-address/:id`
Updates an origin address. Fields outside the allowed list are silently ignored. Answers the updated record, or 404.
- Access: Admin token
- Path:
  - `id` (string): The ID of the origin address.
- Returns: the OriginAddress object.
- Status codes: 200, 400, 401, 404, 500
- Models: OriginAddress

##### Delete an origin address
`DELETE /origin-address/:id`
Deletes an origin address. Answers the deleted record, or 404. Records that point to it are not changed.
- Access: Admin token
- Path:
  - `id` (string): The ID of the origin address.
- Returns: an empty answer on success.
- Status codes: 200, 401, 404, 500
- Models: OriginAddress

#### Payment

##### Create a checkout
`POST /checkout`
Starts the card payment for an order (order_id): answers the Stripe payment intent. Answers 201 { clientSecret } for the card form. The money goes to the site's Stripe account, or the seller's in a marketplace, minus the platform commission. For tickets, each seat is checked first: 404 when a ticket or seat is gone, 400 "Seat already taken".
- Access: Public
- Query:
  - `sessionId` (string): Only checkouts with this session id.
- Body:
  - `order_id` (string): The checkout's order id.
  - `use_admin_pm` (string): The checkout's use admin pm.
- Status codes: 201, 400, 404, 500
- Models: PaymentMethod, SocialModeSettings, Order, Ticket, Event, Product, Program, Donation, UserPaymentSettings, Lead, Cart, Tax

##### Retrieve the client token
`GET /client_token`
A payment client token for the checkout form. Answers { publishableKey }: the Stripe key the card form needs.
- Access: Public
- Status codes: 200, 500

##### Update the finalize order
`PATCH /finalize-order`
Completes an order after payment (order_id, payment_intent): marks it paid, takes stock, issues tickets and emails both sides. For card orders, checks with Stripe that the payment succeeded and belongs to this order (401 otherwise). Takes the items from stock and marks held tickets paid.
- Access: Public
- Body:
  - `order_id` (string): The finalize order's order id.
  - `payment_intent` (string): The finalize order's payment intent.
  - `ads_credits` (string): The finalize order's ads credits.
  - `user_id` (string): The finalize order's user id.
  - `post_id` (string): The finalize order's post id.
- Returns: the Order object.
- Status codes: 200, 401, 500
- Models: Order, User, Inventory, Ticket, Event, Product, Program, Donation, Post, Lead, PaymentMethod, QrCode

##### Retrieve the payment
`GET /payment`
The checkout page for an order (?order_id). An order already finalized redirects to its receipt (or answers { finalized: true } in the app).
- Access: Optional user
- Query:
  - `order_id` (string): Only payments with this order id.
  - `skip_check` (string): Only payments with this skip check.
  - `sessionId` (string): Only payments with this session id.
- Status codes: 200, 500
- Models: Order, MyContact, SocialModeSettings, Cart, Ticket, Coupon, PaymentMethod, Lead, User, Product, Collection, Inventory, Post, Program, Event, Donation, Shipping, UserPaymentSettings, EcontSettings, SpeedySettings, BoxNowSettings, Tax, InvoiceSettings, PriceQuote

##### Retrieve the payment receipt
`GET /payment-receipt`
An order's receipt page. With the order's items, tickets and the receipt page settings. JSON with ?ionic.
- Access: Optional user
- Query:
  - `id` (string): The ID of the payment receipt.
- Status codes: 200, 500
- Models: Order, PaymentMethod, SocialModeSettings, AboutPage, Product, Program, Ticket, Event, QrCode, Donation, Shipping, Tax

##### Retrieve a ticket pdf
`GET /ticket-pdf/:id`
An order's tickets as a PDF with their QR codes. Also emails the tickets to the customer.
- Access: Optional user
- Path:
  - `id` (string): The ID of the ticket pdf.
- Query:
  - `download_only` (string): Only ticket pdfs with this download only.
- Status codes: 200, 500
- Models: Order, Ticket, Event, QrCode, PaymentMethod, Theme, MyContact

#### Payment Metod

##### Retrieve a merchant account link
`GET /merchant_account_link/:status/:id`
A link to finish or manage the Stripe account. status says which: a link to finish onboarding, or to the Stripe dashboard once the account is active. Answers the link.
- Access: Admin token
- Path:
  - `status` (string): The merchant account link's status.
  - `id` (string): The ID of the merchant account link.
- Status codes: 200, 401, 500

##### List all payment methods
`GET /payment_methods`
The payment settings. Answers the settings with the Stripe account's state.
- Access: Admin token
- Returns: a list of PaymentMethod objects.
- Status codes: 200, 401, 500
- Models: PaymentMethod

##### Create a payment method
`POST /payment_methods`
Creates the payment settings. A site has one; update it with PATCH instead. Answers 201.
- Access: Admin token
- Returns: the PaymentMethod object.
- Status codes: 201, 400, 401, 500
- Models: PaymentMethod

##### Retrieve a payment method
`GET /payment_methods/:id`
The payment settings by id. 404 when there is no such record.
- Access: Admin token
- Path:
  - `id` (string): The ID of the payment method.
- Returns: the PaymentMethod object.
- Status codes: 200, 401, 404, 500
- Models: PaymentMethod

##### Update a payment method
`PATCH /payment_methods/:id`
Updates the payment settings, creating the Stripe account when card payment is turned on. Turning card payment on the first time creates the site's Stripe account; finish it with GET /merchant_account_link. Changing the second currency fetches its rate. Answers the settings, or 404.
- Access: Admin token
- Path:
  - `id` (string): The ID of the payment method.
- Body:
  - `has_card` (boolean): Card payment is offered.
  - `email` (string): An email address.
  - `country` (string): The business's country for payments.
- Returns: the PaymentMethod object.
- Status codes: 200, 400, 401, 404, 500
- Models: PaymentMethod

##### Delete a payment method
`DELETE /payment_methods/:id`
Deletes the payment settings. Answers the deleted record, or 404. Records that point to it are not changed.
- Access: Admin token
- Path:
  - `id` (string): The ID of the payment method.
- Returns: an empty answer on success.
- Status codes: 200, 401, 404, 500
- Models: PaymentMethod

#### Receipt Adjustment

##### List all receipt adjustments
`GET /receipt-adjustments`
The receipt page settings. Answers an array of every record.
- Access: Admin token
- Returns: a list of ReceiptAdjustment objects.
- Status codes: 200, 401, 500
- Models: ReceiptAdjustment

##### Create a receipt adjustment
`POST /receipt-adjustments`
Creates a receipt page setting. Answers 201 with no body.
- Access: Admin token
- Returns: the ReceiptAdjustment object.
- Status codes: 201, 400, 401, 500
- Models: ReceiptAdjustment

##### Retrieve a receipt adjustment
`GET /receipt-adjustments/:id`
The receipt page settings by id. 404 when there is no such record.
- Access: Admin token
- Path:
  - `id` (string): The ID of the receipt adjustment.
- Returns: the ReceiptAdjustment object.
- Status codes: 200, 401, 404, 500
- Models: ReceiptAdjustment

#### Shipping

##### List all shippings
`GET /shippings`
The delivery settings of every region. Answers an array of every record.
- Access: Public
- Returns: a list of Shipping objects.
- Status codes: 200, 500
- Models: Shipping

##### Create a shipping
`POST /shippings`
Creates a delivery setting. Answers 201 { shipping }. 403 when creating for an account the user may not manage.
- Access: User token
- Body:
  - `on_behalf_of` (string): The shipping's on behalf of.
- Returns: the Shipping object.
- Status codes: 201, 400, 401, 403, 500
- Models: ConnectedAccount, Shipping

##### Retrieve a shipping
`GET /shippings-by-id/:id`
One region's delivery settings. 404 when there is no such record.
- Access: Public
- Path:
  - `id` (string): The ID of the shipping.
- Returns: the Shipping object.
- Status codes: 200, 404, 500
- Models: Shipping

##### Update a shipping
`PATCH /shippings/:id`
Updates a delivery setting. Answers the settings. 403 when they are another user's.
- Access: User token
- Path:
  - `id` (string): The ID of the shipping.
- Returns: the Shipping object.
- Status codes: 200, 400, 401, 403, 404, 500
- Models: Shipping, ConnectedAccount

##### Delete a shipping
`DELETE /shippings/:id`
Deletes a delivery setting. Answers the deleted settings. 403 when they are another user's.
- Access: User token
- Path:
  - `id` (string): The ID of the shipping.
- Returns: an empty answer on success.
- Status codes: 200, 401, 403, 404, 500
- Models: Shipping, ConnectedAccount

##### List all shippings
`GET /shippings/:region`
The delivery settings of a region. 404 when the region has no delivery settings.
- Access: Public
- Path:
  - `region` (string): The region this delivery setting is for.
- Returns: a list of Shipping objects.
- Status codes: 200, 404, 500
- Models: Shipping

#### Speedy Settings

##### List all speedy integrations
`GET /speedy-integration/:order`
The Speedy delivery price and options for an order. Answers { hasIntegration } and, when there is one, the price and options.
- Access: Public
- Path:
  - `order` (string): The speedy integration's order.
- Query:
  - `productId` (string): Only speedy integrations with this product id.
  - `region` (string): Only speedy integrations with this region.
- Status codes: 200, 404, 500
- Models: Order, SocialModeSettings, Product, Shipping, SpeedySettings

##### Sign in
`GET /speedy-login/:delivery/:username/:password`
Checks Speedy credentials and saves the client contract. The username and password travel in the path, so they land in access logs.
- Access: User token
- Path:
  - `delivery` (string): The speedy login's delivery.
  - `username` (string): The speedy login's username.
  - `password` (string): The account password.
- Status codes: 200, 401, 500
- Models: SpeedySettings

##### List all speedy offices products
`GET /speedy-offices-by-product/:product/:country/:city`
Speedy offices in a city that a product can be delivered to. An empty list when the seller has no Speedy delivery. Reads no token.
- Access: Public
- Path:
  - `product` (string): The speedy offices product's product.
  - `country` (string): The speedy offices product's country.
  - `city` (string): The speedy offices product's city.
- Returns: a list of Product objects.
- Status codes: 200, 404, 500
- Models: Product, SocialModeSettings, Shipping

##### List all speedy offices
`GET /speedy-offices/:delivery/:country/:city`
Speedy offices in a city. Reads no token: the checkout calls it.
- Access: Public
- Path:
  - `delivery` (string): The speedy office's delivery.
  - `country` (string): The speedy office's country.
  - `city` (string): The speedy office's city.
- Status codes: 200, 500

##### List all speedy offices
`GET /speedy-offices/:order`
Speedy offices an order can be delivered to. An empty list when the seller has no Speedy delivery. Reads no token.
- Access: Public
- Path:
  - `order` (string): The speedy office's order.
- Status codes: 200, 404, 500
- Models: Order, SocialModeSettings, Product, Shipping

##### List all speedy services
`GET /speedy-services/:delivery`
The Speedy services the contract offers. Answers { services: [] } when Speedy is not connected.
- Access: User token
- Path:
  - `delivery` (string): The speedy service's delivery.
- Status codes: 200, 401, 500
- Models: SpeedySettings

##### Create a speedy setting
`POST /speedy-settings`
Connects Speedy courier delivery, for the user or an account they manage (on_behalf_of). 403 for an account the user may not manage. Answers { speedySettings }.
- Access: User token
- Body:
  - `on_behalf_of` (string): The speedy setting's on behalf of.
- Returns: the SpeedySettings object.
- Status codes: 200, 400, 401, 403, 500
- Models: ConnectedAccount, SpeedySettings

##### List all speedy settings
`GET /speedy-settings/:delivery`
The Speedy settings of a delivery setting. delivery is the Shipping.id the settings belong to.
- Access: User token
- Path:
  - `delivery` (string): The speedy setting's delivery.
- Returns: a list of SpeedySettings objects.
- Status codes: 200, 401, 500
- Models: SpeedySettings

##### Update a speedy setting
`PATCH /speedy-settings/:id`
Updates the Speedy settings, checking the sender address with Speedy. Fields outside the allowed list are silently ignored. Answers the updated record, or 404.
- Access: User token
- Path:
  - `id` (string): The ID of the speedy setting.
- Body:
  - `countryId` (string): The speedy setting's country id.
  - `siteId` (string): The speedy setting's site id.
  - `address` (string): The speedy setting's address.
- Returns: the SpeedySettings object.
- Status codes: 200, 400, 401, 404, 500
- Models: SpeedySettings

##### Delete a speedy setting
`DELETE /speedy-settings/:id`
Disconnects Speedy delivery. 403 when they are another user's.
- Access: User token
- Path:
  - `id` (string): The ID of the speedy setting.
- Returns: an empty answer on success.
- Status codes: 200, 401, 403, 404, 500
- Models: SpeedySettings, ConnectedAccount

##### Update a speedy shipping
`PATCH /speedy-shipping-id/:id`
Links the Speedy settings to a delivery setting (shipping). 404 when there are no such settings.
- Access: User token
- Path:
  - `id` (string): The ID of the speedy shipping.
- Body:
  - `shipping` (string): The speedy shipping's shipping.
- Status codes: 200, 401, 404, 500
- Models: SpeedySettings

##### Validate a speedy address
`POST /validate-speedy-address/:order`
Checks an order's delivery address with Speedy. Answers Speedy's result, or { valid: false }.
- Access: User token
- Path:
  - `order` (string): The speedy address's order.
- Status codes: 200, 401, 500
- Models: Order, SocialModeSettings, Product, Shipping, SpeedySettings

#### Tax

##### Retrieve the tax
`GET /tax`
The tax rates. Answers an array of every tax rate.
- Access: Admin token
- Returns: the Tax object.
- Status codes: 200, 401, 500
- Models: Tax

##### Create a tax
`POST /tax`
Creates a tax rate. Answers 201 with no body.
- Access: Admin token
- Returns: the Tax object.
- Status codes: 201, 400, 401, 500
- Models: Tax

##### Retrieve a tax
`GET /tax/:id`
One tax rate. 404 when there is no such record.
- Access: Admin token
- Path:
  - `id` (string): The ID of the tax.
- Returns: the Tax object.
- Status codes: 200, 401, 404, 500
- Models: Tax

#### User Payment Settings

##### Retrieve the currency
`GET /currency`
Never reached: GET /currency in payment_metod.js answers first. Answers { currency }.
- Access: Public
- Status codes: 200, 500
- Models: PaymentMethod

##### Retrieve the currency
`GET /currency`
Never reached: GET /currency in payment_metod.js answers first. Answers { currency }.
- Access: Public
- Status codes: 200, 500
- Models: UserPaymentSettings

##### Retrieve a user merchant account link
`GET /user_merchant_account_link/:status/:id`
A link for the user to finish or manage their Stripe account. Answers the link.
- Access: User token
- Path:
  - `status` (string): The user merchant account link's status.
  - `id` (string): The ID of the user merchant account link.
- Status codes: 200, 401, 500
- Models: MyContact

##### List all user payment settings
`GET /user-payment-settings`
The signed-in user's payment settings. With the Stripe account's state.
- Access: User token
- Returns: a list of UserPaymentSettings objects.
- Status codes: 200, 401, 500
- Models: UserPaymentSettings

##### Create a user payment setting
`POST /user-payment-settings`
Creates the signed-in user's payment settings. Answers 201 with no body.
- Access: User token
- Returns: the UserPaymentSettings object.
- Status codes: 201, 400, 401, 500
- Models: UserPaymentSettings

##### Retrieve a user payment setting
`GET /user-payment-settings/:id`
Payment settings by id. 404 when there is no such record.
- Access: User token
- Path:
  - `id` (string): The ID of the user payment setting.
- Returns: the UserPaymentSettings object.
- Status codes: 200, 401, 404, 500
- Models: UserPaymentSettings

##### Update a user payment setting
`PATCH /user-payment-settings/:id`
Updates the user's payment settings, creating their Stripe account when card payment is turned on. Turning card payment on creates the user's Stripe account; finish it with GET /user_merchant_account_link. Answers the settings, or 404.
- Access: User token
- Path:
  - `id` (string): The ID of the user payment setting.
- Body:
  - `has_card` (boolean): Card payment is offered.
  - `email` (string): An email address.
  - `country` (string): Country for payments.
- Returns: the UserPaymentSettings object.
- Status codes: 200, 400, 401, 404, 500
- Models: UserInvoice, UserPaymentSettings

##### Delete a user payment setting
`DELETE /user-payment-settings/:id`
Deletes the user's payment settings. Answers the deleted record, or 404. Records that point to it are not changed.
- Access: User token
- Path:
  - `id` (string): The ID of the user payment setting.
- Returns: an empty answer on success.
- Status codes: 200, 401, 404, 500
- Models: UserPaymentSettings

#### AI builder

##### Generate an origin address with AI
`POST /generate-origin-addresses`
AI: creates the business's origin addresses from the chat. Answers { action: 'JOB', async_job }. It can add, rename and remove addresses as the owner asked. Charged to the account's credits.
- Access: Admin token
- Body:
  - `prompt` (string): What the AI should do with the origin address, in plain words - any language.
  - `chatId` (string): The AI chat this request belongs to; its history and language carry over. Leave it out to start a new chat.
  - `aiVersion` (string): Which version of the AI builder to use; leave it out for the current one.
- Status codes: 200, 401, 500

## Objects

### AboutPage

A page built in the editor or by the AI builder. Its content is in containers: each container is a full-width section with columns, and each column has components, laid out on a 12-column grid by their size.

- `requiresLogin`: Boolean, default false - Only signed-in users can see the page.
- `requiresSubscription`: Boolean, default false - Only subscribers of one of price_plan_ids can see the page.
- `price_plan_ids`: String[] - The price plans whose subscribers can see the page, with requiresSubscription.
- `title`: String, required - The page's title, shown in the browser tab and in the admin.
- `url`: String, required - The page's address on the site: /<url>. Unique.
- `redirectUrl`: String - When set, visitors who open the page are sent to this address instead.
- `legal_kind`: String - For legal pages: which document it is, in English (Privacy Policy, Terms of Service...).
- `isPartial`: Boolean, default false - A part of other pages (a banner, a block inside a product page), not a page of its own.
- `showTo`: String, default "0" - Who sees the page: "0" everyone, "1" signed-in users only, "2" visitors who are not signed in.
- `showHeader`: Boolean, default true - Show the site's header on the page.
- `showFooter`: Boolean, default true - Show the site's footer on the page.
- `ai_context_v2`: Mixed - Legacy, no longer written: the AI context is built on demand. Old copies are not selected and are removed by npm run migrate:strip-about-page-ai-context.
- `ai_surfaces_v2`: Mixed - The editable regions the AI page modifier found on the page last time it read it; written by the AI builder.
- `ai_overview`: String - A short summary of the page the AI builder keeps for its own use.
- `ai_generation_metadata`: Mixed - How the AI builder generated the page (mode, prompt, timings); written by the AI builder.
- `containers`: Object[] - The page's content: sections, each with columns of components.
  - `isFluid`: Boolean, default false
  - `parallaxEnabled`: Boolean
  - `parallaxAmount`: Number
  - `parallaxZoom`: Number
  - `continuousEnabled`: Boolean, default false
  - `continuousEffect`: String, default "none"
  - `continuousDuration`: Number, default 2400
  - `continuousIntensity`: Number, default 4
  - `backgroundImage`: String
  - `backgroundSize`: String
  - `backgroundPosition`: String
  - `backgroundRepeat`: String
  - `backgroundVideo`: String
  - `backgroundColor`: String
  - `backgroundGradient.enabled`: Boolean, default false
  - `backgroundGradient.type`: String
  - `backgroundGradient.degrees`: Number
  - `backgroundGradient.radialShape`: String
  - `backgroundGradient.radialPosition`: String
  - `backgroundGradient.colors`: Object[]
    - `color`: String
    - `percentage`: Number
    - `_id`: ObjectId
  - `backgroundGradient.css`: String
  - `backgroundParallax`: Boolean, default false
  - `minHeight`: Number
  - `minHeightMobile`: Number
  - `padding_top.value`: String, default ""
  - `padding_top.unit`: String, default "px"
  - `padding_top.mobile_value`: String, default ""
  - `padding_top.mobile_unit`: String, default "px"
  - `padding_right.value`: String, default ""
  - `padding_right.unit`: String, default "px"
  - `padding_right.mobile_value`: String, default ""
  - `padding_right.mobile_unit`: String, default "px"
  - `padding_bottom.value`: String, default ""
  - `padding_bottom.unit`: String, default "px"
  - `padding_bottom.mobile_value`: String, default ""
  - `padding_bottom.mobile_unit`: String, default "px"
  - `padding_left.value`: String, default ""
  - `padding_left.unit`: String, default "px"
  - `padding_left.mobile_value`: String, default ""
  - `padding_left.mobile_unit`: String, default "px"
  - `allowOffset`: Boolean, default false
  - `offsetX`: Number, default 0
  - `offsetY`: Number, default 0
  - `offsetMobileX`: Number, default 0
  - `offsetMobileY`: Number, default 0
  - `zIndex`: Number, default 0
  - `wrap_reverse`: Boolean, default false
  - `borderRadius`: Number, default 0
  - `marginX`: Number, default 0
  - `editorName`: String
  - `horizontalScroll`: Boolean, default false
  - `horizontalScrollWidth`: Number, default 100
  - `overflowX`: String, default "hidden"
  - `columns`: Object[]
    - `size`: String
    - `hoverGroup`: Boolean
    - `parallaxEnabled`: Boolean
    - `parallaxAmount`: Number
    - `parallaxZoom`: Number
    - `continuousEnabled`: Boolean, default false
    - `continuousEffect`: String, default "none"
    - `continuousDuration`: Number, default 2400
    - `continuousIntensity`: Number, default 4
    - `sticky`: Boolean, default false
    - `justify`: String
    - `align`: String
    - `onHoverActions`: Boolean, default false
    - `onHoverTransition`: Number, default 0.3
    - `backgroundColor`: String
    - `backgroundGradient.enabled`: Boolean, default false
    - `backgroundGradient.type`: String
    - `backgroundGradient.degrees`: Number
    - `backgroundGradient.radialShape`: String
    - `backgroundGradient.radialPosition`: String
    - `backgroundGradient.colors`: Object[]
      - `color`: String
      - `percentage`: Number
      - `_id`: ObjectId
    - `backgroundGradient.css`: String
    - `backgroundColorOnHover`: String
    - `innerBackgroundColor`: String
    - `innerBackgroundGradient.enabled`: Boolean, default false
    - `innerBackgroundGradient.type`: String
    - `innerBackgroundGradient.degrees`: Number
    - `innerBackgroundGradient.radialShape`: String
    - `innerBackgroundGradient.radialPosition`: String
    - `innerBackgroundGradient.colors`: Object[]
      - `color`: String
      - `percentage`: Number
      - `_id`: ObjectId
    - `innerBackgroundGradient.css`: String
    - `innerBackgroundColorOnHover`: String
    - `backgroundImage`: String
    - `backgroundSize`: String
    - `backgroundPosition`: String
    - `backgroundRepeat`: String
    - `backgroundVideo`: String
    - `paddingX`: Number, default 0
    - `paddingXOnHover`: Number, default 0
    - `paddingY`: Number, default 0
    - `paddingYOnHover`: Number, default 0
    - `innerPaddingX`: Number, default 0
    - `innerPaddingXOnHover`: Number, default 0
    - `innerPaddingY`: Number, default 0
    - `allowOffset`: Boolean, default false
    - `offsetX`: Number, default 0
    - `offsetY`: Number, default 0
    - `offsetMobileX`: Number, default 0
    - `offsetMobileY`: Number, default 0
    - `zIndex`: Number, default 0
    - `innerPaddingYOnHover`: Number, default 0
    - `paddingOptions`: String
    - `paddingOptionsOnHover`: String
    - `innerPaddingOptions`: String
    - `borderOptions`: String
    - `borderOptionsOnHover`: String
    - `card`: Boolean, default false
    - `borderRadius`: Number, default 0
    - `borderRadiusOnHover`: Number, default 0
    - `borderType`: String, default "none"
    - `borderTypeOnHover`: String, default "none"
    - `borderWidth`: Number, default 0
    - `borderWidthOnHover`: Number, default 0
    - `borderColor`: String, default ""
    - `borderColorOnHover`: String, default ""
    - `components`: Object[]
      - `type`: String
      - `size`: String, default "12"
      - `sticky`: Boolean, default false
      - `paddingX`: Number, default 0
      - `paddingY`: Number, default 0
      - `allowOffset`: Boolean, default false
      - `offsetX`: Number, default 0
      - `offsetY`: Number, default 0
      - `offsetMobileX`: Number, default 0
      - `offsetMobileY`: Number, default 0
      - `zIndex`: Number, default 0
      - `position`: String, one of static | relative | absolute | fixed | sticky, default "static"
      - `top.value`: String, default "0"
      - `top.unit`: String, default "px"
      - `top.mobile_value`: String, default ""
      - `top.mobile_unit`: String, default "px"
      - `left.value`: String, default "0"
      - `left.unit`: String, default "px"
      - `left.mobile_value`: String, default ""
      - `left.mobile_unit`: String, default "px"
      - `right.value`: String, default "0"
      - `right.unit`: String, default "px"
      - `right.mobile_value`: String, default ""
      - `right.mobile_unit`: String, default "px"
      - `bottom.value`: String, default "0"
      - `bottom.unit`: String, default "px"
      - `bottom.mobile_value`: String, default ""
      - `bottom.mobile_unit`: String, default "px"
      - `custom_measurements`: Boolean, default false
      - `edit_type`: String, default "simple"
      - `custom_width.value`: Mixed
      - `custom_width.unit`: String, default "px"
      - `custom_width.mobile_value`: Mixed
      - `custom_width.mobile_unit`: String, default "px"
      - `custom_min_width.value`: Mixed
      - `custom_min_width.unit`: String, default "px"
      - `custom_min_width.mobile_value`: Mixed
      - `custom_min_width.mobile_unit`: String, default "px"
      - `custom_max_width.value`: Mixed
      - `custom_max_width.unit`: String, default "px"
      - `custom_max_width.mobile_value`: Mixed
      - `custom_max_width.mobile_unit`: String, default "px"
      - `custom_height.value`: Mixed
      - `custom_height.unit`: String, default "px"
      - `custom_height.mobile_value`: Mixed
      - `custom_height.mobile_unit`: String, default "px"
      - `custom_min_height.value`: Mixed
      - `custom_min_height.unit`: String, default "px"
      - `custom_min_height.mobile_value`: Mixed
      - `custom_min_height.mobile_unit`: String, default "px"
      - `custom_max_height.value`: Mixed
      - `custom_max_height.unit`: String, default "px"
      - `custom_max_height.mobile_value`: Mixed
      - `custom_max_height.mobile_unit`: String, default "px"
      - `object_fit`: String, default "none"
      - `aspect_ratio.custom`: Boolean, default false
      - `aspect_ratio.ratio`: String, default ""
      - `min_height`: Number, default 0
      - `margin_left.value`: Mixed
      - `margin_left.unit`: String, default "px"
      - `margin_left.mobile_value`: Mixed
      - `margin_left.mobile_unit`: String, default "px"
      - `margin_right.value`: Mixed
      - `margin_right.unit`: String, default "px"
      - `margin_right.mobile_value`: Mixed
      - `margin_right.mobile_unit`: String, default "px"
      - `margin_top.value`: Mixed
      - `margin_top.unit`: String, default "px"
      - `margin_top.mobile_value`: Mixed
      - `margin_top.mobile_unit`: String, default "px"
      - `margin_bottom.value`: Mixed
      - `margin_bottom.unit`: String, default "px"
      - `margin_bottom.mobile_value`: Mixed
      - `margin_bottom.mobile_unit`: String, default "px"
      - `padding_left.value`: Mixed
      - `padding_left.unit`: String, default "px"
      - `padding_left.mobile_value`: Mixed
      - `padding_left.mobile_unit`: String, default "px"
      - `padding_right.value`: Mixed
      - `padding_right.unit`: String, default "px"
      - `padding_right.mobile_value`: Mixed
      - `padding_right.mobile_unit`: String, default "px"
      - `padding_top.value`: Mixed
      - `padding_top.unit`: String, default "px"
      - `padding_top.mobile_value`: Mixed
      - `padding_top.mobile_unit`: String, default "px"
      - `padding_bottom.value`: Mixed
      - `padding_bottom.unit`: String, default "px"
      - `padding_bottom.mobile_value`: Mixed
      - `padding_bottom.mobile_unit`: String, default "px"
      - `border_left.color`: String
      - `border_left.width.value`: Mixed
      - `border_left.width.unit`: String, default "px"
      - `border_left.style`: String
      - `border_right.color`: String
      - `border_right.width.value`: Mixed
      - `border_right.width.unit`: String, default "px"
      - `border_right.style`: String
      - `border_top.color`: String
      - `border_top.width.value`: Mixed
      - `border_top.width.unit`: String, default "px"
      - `border_top.style`: String
      - `border_bottom.color`: String
      - `border_bottom.width.value`: Mixed
      - `border_bottom.width.unit`: String, default "px"
      - `border_bottom.style`: String
      - `border_top_left_radius.value`: Mixed
      - `border_top_left_radius.unit`: String, default "px"
      - `border_top_right_radius.value`: Mixed
      - `border_top_right_radius.unit`: String, default "px"
      - `border_bottom_left_radius.value`: Mixed
      - `border_bottom_left_radius.unit`: String, default "px"
      - `border_bottom_right_radius.value`: Mixed
      - `border_bottom_right_radius.unit`: String, default "px"
      - `custom_border_radius.value`: Number
      - `custom_border_radius.unit`: String, default "px"
      - `specific_border_radius`: Boolean, default false
      - `box_shadows`: Object[]
      - `mix_blend_mode`: String, one of normal | multiply | screen | overlay | darken | lighten | color-dodge | color-burn | hard-light | soft-light | difference | exclusion | hue | saturation | color | luminosity, default "normal"
      - `paddingOptions`: String
      - `backgroundColor`: String
      - `backgroundGradient.enabled`: Boolean, default false
      - `backgroundGradient.type`: String
      - `backgroundGradient.degrees`: Number
      - `backgroundGradient.radialShape`: String
      - `backgroundGradient.radialPosition`: String
      - `backgroundGradient.colors`: Object[]
      - `backgroundGradient.css`: String
      - `card`: Boolean, default false
      - `borderRadius`: Number, default 0
      - `borderType`: String, default "none"
      - `borderWidth`: Number, default 0
      - `borderColor`: String, default ""
      - `borderOptions`: String
      - `showOnMobile`: Boolean, default true
      - `showOnDesktop`: Boolean, default true
      - `icon`: String
      - `iconSettings.size`: Number, default 40
      - `iconSettings.color`: String, default "var(--ion-color-primary)"
      - `heading`: String
      - `subHeading`: String
      - `heading_alignment`: String
      - `innerHTML`: String
      - `innerCSS`: String
      - `innerJS`: String
      - `lineHeight`: String, default "normal"
      - `medias`: Object[]
      - `products`: ObjectId[], → Product
      - `product_gallery.design_layout`: String, default ""
      - `product_gallery.mode`: String, default "card"
      - `product_gallery.columns`: Number, default 3
      - `product_gallery.placeholderItems`: Object[]
      - `product_gallery.placeholderPlateColor`: String, default ""
      - `product_gallery.showName`: Boolean, default true
      - `product_gallery.showPrice`: Boolean, default true
      - `product_gallery.showDescription`: Boolean, default false
      - `product_gallery.showBrand`: Boolean, default false
      - `product_gallery.showRibbon`: Boolean, default false
      - `product_gallery.showRating`: Boolean, default false
      - `product_gallery.showCart`: Boolean, default false
      - `product_gallery.showLink`: Boolean, default false
      - `product_gallery.linkLabel`: String, default "View product"
      - `product_gallery.imageAspectRatio`: String, default "1/1"
      - `product_gallery.imageHeight`: Number, default 260
      - `product_gallery.imageRadius`: Number, default 20
      - `product_gallery.imageObjectFit`: String, default "cover"
      - `product_gallery.cardBackgroundColor`: String, default "var(--ion-card-background, #ffffff)"
      - `product_gallery.cardBorderRadius`: Number, default 28
      - `product_gallery.cardBorderWidth`: Number, default 0
      - `product_gallery.cardBorderColor`: String, default "transparent"
      - `product_gallery.cardPaddingX`: Number, default 20
      - `product_gallery.cardPaddingY`: Number, default 20
      - `product_gallery.gap`: Number, default 24
      - `product_gallery.boxShadowColor`: String, default "rgba(var(--ion-color-primary-rgb, 56,128,255), 0.22)"
      - `product_gallery.boxShadowOffsetY`: Number, default 20
      - `product_gallery.boxShadowBlurRadius`: Number, default 40
      - `product_gallery.boxShadowSpreadRadius`: Number, default -22
      - `product_gallery.fieldBackground`: String, default "transparent"
      - `product_gallery.hairlineColor`: String, default "transparent"
      - `product_gallery.hairlineWidth`: Number, default 0
      - `product_gallery.maxWidth`: Number, default 0
      - `product_gallery.scrimGradient`: String, default ""
      - `product_gallery.align`: String, default "left"
      - `product_gallery.accentColor`: String, default "var(--ion-color-primary, #3880ff)"
      - `product_gallery.nameColor`: String, default "var(--ion-text-color, #1e293b)"
      - `product_gallery.nameFontSize`: String, default "1em"
      - `product_gallery.nameFontWeight`: String, default "700"
      - `product_gallery.nameFontFamily`: String, default ""
      - `product_gallery.nameTransform`: String, default "none"
      - `product_gallery.priceColor`: String, default "var(--ion-color-primary, #3880ff)"
      - `product_gallery.priceFontSize`: String, default "0.94em"
      - `product_gallery.priceFontWeight`: String, default "600"
      - `product_gallery.priceFontFamily`: String, default ""
      - `product_gallery.priceFontStyle`: String, default "normal"
      - `product_gallery.metaColor`: String, default "rgba(var(--ion-text-color-rgb, 30,41,59), 0.66)"
      - `product_gallery.titlePosition`: String, default "bottom"
      - `product_gallery.imageSide`: String, default "left"
      - `product_gallery.imagePadding`: Number, default 0
      - `product_gallery.boxShadowOffsetX`: Number, default 0
      - `product_gallery.descFontSize`: String, default "13px"
      - `product_gallery.descFontWeight`: String, default "400"
      - `product_gallery.animation`: String, default "none"
      - `product_gallery.animationDuration`: Number, default 0
      - `product_gallery.animationDelay`: Number, default 0
      - `product_gallery.showCustomFields`: Boolean, default false
      - `product_gallery.cardDesign`: String, default ""
      - `product_gallery.carouselLoop`: Boolean, default false
      - `product_gallery.carouselControls`: Boolean, default false
      - `product_gallery.customCss`: String, default ""
      - `services`: ObjectId[], → Service
      - `service_gallery.design_layout`: String, default ""
      - `service_gallery.mode`: String, default "card"
      - `service_gallery.columns`: Number, default 3
      - `service_gallery.placeholderItems`: Object[]
      - `service_gallery.placeholderPlateColor`: String, default ""
      - `service_gallery.showTitle`: Boolean, default true
      - `service_gallery.showPrice`: Boolean, default true
      - `service_gallery.showDescription`: Boolean, default false
      - `service_gallery.showDuration`: Boolean, default false
      - `service_gallery.durationLabel`: String, default "min"
      - `service_gallery.showImage`: Boolean, default true
      - `service_gallery.showLink`: Boolean, default false
      - `service_gallery.linkLabel`: String, default "View service"
      - `service_gallery.imageAspectRatio`: String, default "1/1"
      - `service_gallery.imageHeight`: Number, default 260
      - `service_gallery.imageRadius`: Number, default 20
      - `service_gallery.imageObjectFit`: String, default "cover"
      - `service_gallery.cardBackgroundColor`: String, default "var(--ion-card-background, #ffffff)"
      - `service_gallery.cardBorderRadius`: Number, default 28
      - `service_gallery.cardBorderWidth`: Number, default 0
      - `service_gallery.cardBorderColor`: String, default "transparent"
      - `service_gallery.cardPaddingX`: Number, default 20
      - `service_gallery.cardPaddingY`: Number, default 20
      - `service_gallery.gap`: Number, default 24
      - `service_gallery.boxShadowColor`: String, default "rgba(var(--ion-color-primary-rgb, 56,128,255), 0.22)"
      - `service_gallery.boxShadowOffsetY`: Number, default 20
      - `service_gallery.boxShadowBlurRadius`: Number, default 40
      - `service_gallery.boxShadowSpreadRadius`: Number, default -22
      - `service_gallery.fieldBackground`: String, default "transparent"
      - `service_gallery.hairlineColor`: String, default "transparent"
      - `service_gallery.hairlineWidth`: Number, default 0
      - `service_gallery.rowRuleColor`: String, default "transparent"
      - `service_gallery.rowRuleWidth`: Number, default 0
      - `service_gallery.maxWidth`: Number, default 0
      - `service_gallery.scrimGradient`: String, default ""
      - `service_gallery.align`: String, default "left"
      - `service_gallery.accentColor`: String, default "var(--ion-color-primary, #3880ff)"
      - `service_gallery.titleColor`: String, default "var(--ion-text-color, #1e293b)"
      - `service_gallery.titleFontSize`: String, default "1em"
      - `service_gallery.titleFontWeight`: String, default "700"
      - `service_gallery.titleFontFamily`: String, default ""
      - `service_gallery.titleTransform`: String, default "none"
      - `service_gallery.priceColor`: String, default "var(--ion-color-primary, #3880ff)"
      - `service_gallery.priceFontSize`: String, default "0.94em"
      - `service_gallery.priceFontWeight`: String, default "600"
      - `service_gallery.priceFontFamily`: String, default ""
      - `service_gallery.priceFontStyle`: String, default "normal"
      - `service_gallery.metaColor`: String, default "rgba(var(--ion-text-color-rgb, 30,41,59), 0.66)"
      - `service_gallery.titlePosition`: String, default "bottom"
      - `service_gallery.imageSide`: String, default "left"
      - `service_gallery.imagePadding`: Number, default 0
      - `service_gallery.boxShadowOffsetX`: Number, default 0
      - `service_gallery.descFontSize`: String, default "13px"
      - `service_gallery.descFontWeight`: String, default "400"
      - `service_gallery.animation`: String, default "none"
      - `service_gallery.animationDuration`: Number, default 0
      - `service_gallery.animationDelay`: Number, default 0
      - `service_gallery.showCustomFields`: Boolean, default false
      - `service_gallery.cardDesign`: String, default ""
      - `service_gallery.carouselLoop`: Boolean, default false
      - `service_gallery.carouselControls`: Boolean, default false
      - `service_gallery.customCss`: String, default ""
      - `blog_gallery.design_layout`: String, default ""
      - `blog_gallery.mode`: String, default "card"
      - `blog_gallery.columns`: Number, default 3
      - `blog_gallery.leadLayout`: String, default "beside"
      - `blog_gallery.leadWidth`: Number, default 58
      - `blog_gallery.placeholderItems`: Object[]
      - `blog_gallery.placeholderPlateColor`: String, default ""
      - `blog_gallery.showTitle`: Boolean, default true
      - `blog_gallery.showExcerpt`: Boolean, default false
      - `blog_gallery.showDate`: Boolean, default true
      - `blog_gallery.showImage`: Boolean, default true
      - `blog_gallery.showLink`: Boolean, default false
      - `blog_gallery.linkLabel`: String, default "Read more"
      - `blog_gallery.showCustomFields`: Boolean, default false
      - `blog_gallery.imageAspectRatio`: String, default "1/1"
      - `blog_gallery.imageHeight`: Number, default 260
      - `blog_gallery.imageRadius`: Number, default 20
      - `blog_gallery.imageObjectFit`: String, default "cover"
      - `blog_gallery.imagePadding`: Number, default 0
      - `blog_gallery.imageSide`: String, default "left"
      - `blog_gallery.cardBackgroundColor`: String, default "var(--ion-card-background, #ffffff)"
      - `blog_gallery.cardBorderRadius`: Number, default 28
      - `blog_gallery.cardBorderWidth`: Number, default 0
      - `blog_gallery.cardBorderColor`: String, default "transparent"
      - `blog_gallery.cardPaddingX`: Number, default 20
      - `blog_gallery.cardPaddingY`: Number, default 20
      - `blog_gallery.gap`: Number, default 24
      - `blog_gallery.boxShadowColor`: String, default "rgba(var(--ion-color-primary-rgb, 56,128,255), 0.22)"
      - `blog_gallery.boxShadowOffsetX`: Number, default 0
      - `blog_gallery.boxShadowOffsetY`: Number, default 20
      - `blog_gallery.boxShadowBlurRadius`: Number, default 40
      - `blog_gallery.boxShadowSpreadRadius`: Number, default -22
      - `blog_gallery.fieldBackground`: String, default "transparent"
      - `blog_gallery.hairlineColor`: String, default "transparent"
      - `blog_gallery.hairlineWidth`: Number, default 0
      - `blog_gallery.rowRuleColor`: String, default "transparent"
      - `blog_gallery.rowRuleWidth`: Number, default 0
      - `blog_gallery.maxWidth`: Number, default 0
      - `blog_gallery.scrimGradient`: String, default ""
      - `blog_gallery.align`: String, default "left"
      - `blog_gallery.accentColor`: String, default "var(--ion-color-primary, #3880ff)"
      - `blog_gallery.titleColor`: String, default "var(--ion-text-color, #1e293b)"
      - `blog_gallery.titleFontSize`: String, default "1em"
      - `blog_gallery.titleFontWeight`: String, default "700"
      - `blog_gallery.titleFontFamily`: String, default ""
      - `blog_gallery.titleTransform`: String, default "none"
      - `blog_gallery.dateColor`: String, default "var(--ion-color-primary, #3880ff)"
      - `blog_gallery.dateFontSize`: String, default "0.81em"
      - `blog_gallery.dateFontWeight`: String, default "600"
      - `blog_gallery.dateFontFamily`: String, default ""
      - `blog_gallery.dateFontStyle`: String, default "normal"
      - `blog_gallery.metaColor`: String, default "rgba(var(--ion-text-color-rgb, 30,41,59), 0.66)"
      - `blog_gallery.excerptFontSize`: String, default "0.88em"
      - `blog_gallery.excerptFontWeight`: String, default "400"
      - `blog_gallery.excerptFontFamily`: String, default ""
      - `blog_gallery.titlePosition`: String, default "bottom"
      - `blog_gallery.animation`: String, default "none"
      - `blog_gallery.animationDuration`: Number, default 0
      - `blog_gallery.animationDelay`: Number, default 0
      - `blog_gallery.cardDesign`: String, default ""
      - `blog_gallery.customCss`: String, default ""
      - `multi_booking.layout`: String, default "chips"
      - `multi_booking.columns`: Number, default 3
      - `multi_booking.pickerBackground`: String, default "transparent"
      - `multi_booking.gap`: Number, default 10
      - `multi_booking.align`: String, default "left"
      - `multi_booking.showPrice`: Boolean, default false
      - `multi_booking.showDuration`: Boolean, default false
      - `multi_booking.showDescription`: Boolean, default false
      - `multi_booking.showImage`: Boolean, default false
      - `multi_booking.itemPaddingX`: Number, default 18
      - `multi_booking.itemPaddingY`: Number, default 10
      - `multi_booking.itemRadius`: Number, default 100
      - `multi_booking.itemBorderWidth`: Number, default 0
      - `multi_booking.itemBorderColor`: String, default "rgba(var(--ion-color-primary-rgb, 56,128,255), 0.12)"
      - `multi_booking.itemBackground`: String, default "rgba(var(--ion-color-primary-rgb, 56,128,255), 0.10)"
      - `multi_booking.itemTextColor`: String, default "var(--ion-text-color, inherit)"
      - `multi_booking.itemSubTextColor`: String, default "var(--ion-color-medium, rgba(0,0,0,0.55))"
      - `multi_booking.selectedBackground`: String, default "var(--ion-color-primary)"
      - `multi_booking.selectedTextColor`: String, default "var(--ion-color-primary-contrast, #ffffff)"
      - `multi_booking.selectedSubTextColor`: String, default "rgba(var(--ion-color-primary-contrast-rgb, 255,255,255), 0.75)"
      - `multi_booking.selectedBorderColor`: String, default "var(--ion-color-primary)"
      - `multi_booking.hoverBackground`: String, default "rgba(var(--ion-color-primary-rgb, 56,128,255), 0.18)"
      - `multi_booking.titleFontSize`: Number, default 14
      - `multi_booking.titleFontWeight`: String, default "500"
      - `multi_booking.subFontSize`: Number, default 13
      - `multi_booking.dividerColor`: String, default "rgba(var(--ion-color-primary-rgb, 56,128,255), 0.12)"
      - `multi_booking.dividerWidth`: Number, default 1
      - `multi_booking.autoScroll`: Boolean, default true
      - `multi_booking.cardBackground`: String, default "var(--ion-card-color, #ffffff)"
      - `multi_booking.cardRadius`: Number, default 28
      - `multi_booking.cardBorderWidth`: Number, default 0
      - `multi_booking.cardBorderColor`: String, default "rgba(var(--ion-color-primary-rgb, 56,128,255), 0.12)"
      - `multi_booking.cardMaxWidth`: Number, default 820
      - `multi_booking.cardLayout`: String, default "stack"
      - `multi_booking.splitWidth`: Number, default 340
      - `multi_booking.shadowColor`: String, default "rgba(var(--ion-color-primary-rgb, 56,128,255), 0.18)"
      - `multi_booking.shadowOffsetY`: Number, default 20
      - `multi_booking.shadowBlur`: Number, default 40
      - `multi_booking.shadowSpread`: Number, default -22
      - `multi_booking.sectionPaddingX`: Number, default 40
      - `multi_booking.sectionPaddingY`: Number, default 32
      - `multi_booking.sectionDividerColor`: String, default "rgba(var(--ion-color-primary-rgb, 56,128,255), 0.12)"
      - `multi_booking.sectionDividerWidth`: Number, default 1
      - `multi_booking.showStepLabels`: Boolean, default true
      - `multi_booking.serviceStepLabel`: String, default "Step 1 — Service"
      - `multi_booking.dayStepLabel`: String, default "Step 2 — Day"
      - `multi_booking.staffStepLabel`: String, default "Step 3 — Staff member"
      - `multi_booking.timeStepLabel`: String, default "Step 4 — Time"
      - `multi_booking.stepLabelColor`: String, default "var(--ion-color-medium, rgba(0,0,0,0.55))"
      - `multi_booking.stepLabelSize`: Number, default 13
      - `multi_booking.stepLabelWeight`: String, default "700"
      - `multi_booking.stepLabelSpacing`: Number, default 0.04
      - `multi_booking.stepLabelUppercase`: Boolean, default true
      - `multi_booking.dayCount`: Number, default 6
      - `multi_booking.dayLayout`: String, default "strip"
      - `multi_booking.dayBorderColor`: String, default "rgba(var(--ion-color-primary-rgb, 56,128,255), 0.15)"
      - `multi_booking.dayShape`: String, default "circle"
      - `multi_booking.daySize`: Number, default 64
      - `multi_booking.dayGap`: Number, default 10
      - `multi_booking.dayShowWeekday`: Boolean, default false
      - `multi_booking.dayBackground`: String, default "rgba(var(--ion-color-primary-rgb, 56,128,255), 0.10)"
      - `multi_booking.dayTextColor`: String, default "var(--ion-text-color, inherit)"
      - `multi_booking.daySelectedBackground`: String, default "var(--ion-color-primary)"
      - `multi_booking.daySelectedTextColor`: String, default "var(--ion-color-primary-contrast, #ffffff)"
      - `multi_booking.dayDisabledOpacity`: Number, default 0.35
      - `multi_booking.timeGap`: Number, default 10
      - `multi_booking.timeRadius`: Number, default 100
      - `multi_booking.timeBorderWidth`: Number, default 0
      - `multi_booking.timeBorderColor`: String, default "rgba(var(--ion-color-primary-rgb, 56,128,255), 0.15)"
      - `multi_booking.timeSelectedBorderColor`: String, default "var(--ion-color-primary)"
      - `multi_booking.timePaddingX`: Number, default 18
      - `multi_booking.timePaddingY`: Number, default 10
      - `multi_booking.timeBackground`: String, default "rgba(var(--ion-color-primary-rgb, 56,128,255), 0.10)"
      - `multi_booking.timeTextColor`: String, default "var(--ion-text-color, inherit)"
      - `multi_booking.timeSelectedBackground`: String, default "var(--ion-color-primary)"
      - `multi_booking.timeSelectedTextColor`: String, default "var(--ion-color-primary-contrast, #ffffff)"
      - `multi_booking.buttonText`: String, default "Confirm my booking"
      - `multi_booking.buttonBackground`: String, default "var(--ion-color-primary)"
      - `multi_booking.buttonTextColor`: String, default "var(--ion-color-primary-contrast, #ffffff)"
      - `multi_booking.buttonRadius`: Number, default 100
      - `multi_booking.buttonPaddingY`: Number, default 16
      - `multi_booking.buttonFontSize`: Number, default 15
      - `multi_booking.buttonFontWeight`: String, default "700"
      - `multi_booking.buttonFullWidth`: Boolean, default true
      - `blogposts`: ObjectId[], → BlogPost
      - `videos`: ObjectId[], → Video
      - `price_plans`: ObjectId[], → PricePlan
      - `href`: String, default "#"
      - `router_link`: String
      - `buttonOptions.fill`: String
      - `buttonOptions.expand`: String
      - `buttonOptions.size`: String
      - `buttonOptions.color`: String
      - `buttonOptions.class`: String
      - `buttonOptions.customColor`: String
      - `buttonOptions.customColorContrast`: String
      - `buttonOptions.customColorHover`: String
      - `buttonOptions.hoverRoll`: Boolean
      - `buttonOptions.fontWeight`: Number
      - `buttonOptions.letterSpacing`: Number
      - `buttonOptions.fontSize`: Number, default 14
      - `buttonOptions.borderRadius`: Number, default 6
      - `buttonOptions.customColorA`: String
      - `buttonOptions.customColorB`: String
      - `buttonOptions.customColorC`: String
      - `buttonOptions.custom_measurements`: Boolean, default false
      - `buttonOptions.height.value`: String
      - `buttonOptions.height.unit`: String
      - `buttonOptions.width.value`: String
      - `buttonOptions.width.unit`: String
      - `carousel.showArrows`: Boolean, default true
      - `carousel.showIndicators`: Boolean, default true
      - `carousel.height`: Number, default 90
      - `carousel.automaticHeight`: Boolean, default true
      - `carousel.carouselMedias`: Object[]
      - `map`: String
      - `contactForm.name`: String
      - `contactForm.email`: String
      - `contactForm.subject`: String
      - `contactForm.body`: String
      - `contactForm.button`: String
      - `contactForm.hideNewsletter`: Boolean
      - `contactForm.placeholders.name`: String
      - `contactForm.placeholders.email`: String
      - `contactForm.placeholders.subject`: String
      - `contactForm.placeholders.body`: String
      - `contactForm.style.backgroundColor`: String
      - `contactForm.style.textColor`: String
      - `contactForm.style.accentColor`: String
      - `contactForm.style.border.color`: String
      - `contactForm.style.border.width.value`: Mixed
      - `contactForm.style.border.width.unit`: String
      - `contactForm.style.border.style`: String
      - `contactForm.style.borderRadius.value`: Mixed
      - `contactForm.style.borderRadius.unit`: String
      - `contactForm.style.padding.value`: Mixed
      - `contactForm.style.padding.unit`: String
      - `contactForm.style.labelFontSize.value`: Mixed
      - `contactForm.style.labelFontSize.unit`: String
      - `contactForm.style.consentFontSize.value`: Mixed
      - `contactForm.style.consentFontSize.unit`: String
      - `contactForm.style.inputBackgroundColor`: String
      - `contactForm.style.inputTextColor`: String
      - `contactForm.style.placeholderColor`: String
      - `contactForm.style.inputFocusColor`: String
      - `contactForm.style.inputFontSize.value`: Mixed
      - `contactForm.style.inputFontSize.unit`: String
      - `contactForm.style.inputPadding.value`: Mixed
      - `contactForm.style.inputPadding.unit`: String
      - `contactForm.style.textareaMinHeight.value`: Mixed
      - `contactForm.style.textareaMinHeight.unit`: String
      - `contactForm.style.inputMargin.value`: Mixed
      - `contactForm.style.inputMargin.unit`: String
      - `contactForm.style.inputBorder.color`: String
      - `contactForm.style.inputBorder.width.value`: Mixed
      - `contactForm.style.inputBorder.width.unit`: String
      - `contactForm.style.inputBorder.style`: String
      - `contactForm.style.inputBorderRadius.value`: Mixed
      - `contactForm.style.inputBorderRadius.unit`: String
      - `contactForm.style.buttonBackgroundColor`: String
      - `contactForm.style.buttonTextColor`: String
      - `contactForm.style.buttonAlign`: String
      - `contactForm.style.buttonFontSize.value`: Mixed
      - `contactForm.style.buttonFontSize.unit`: String
      - `contactForm.style.buttonBorder.color`: String
      - `contactForm.style.buttonBorder.width.value`: Mixed
      - `contactForm.style.buttonBorder.width.unit`: String
      - `contactForm.style.buttonBorder.style`: String
      - `contactForm.style.buttonBorderRadius.value`: Mixed
      - `contactForm.style.buttonBorderRadius.unit`: String
      - `contactForm.style.buttonWidth.value`: Mixed
      - `contactForm.style.buttonWidth.unit`: String
      - `contactForm.additional`: Object[]
      - `instagram.columns`: Number
      - `instagram.first`: Number
      - `instagram.skip`: Number
      - `instagram.showInfo`: Boolean
      - `instagram.gridType`: Number
      - `instagram.profile`: String
      - `facebook.url`: String
      - `facebook.width`: String
      - `facebook.height`: String
      - `animation`: String, default "none"
      - `animationDuration`: Number, default 0
      - `animationStrength`: Number
      - `parallaxEnabled`: Boolean
      - `parallaxAmount`: Number
      - `parallaxZoom`: Number
      - `textReveal`: String
      - `animationDelay`: Number, default 0
      - `animationReplay`: String, default "once"
      - `animationEasing`: String, default "power3.out"
      - `animationBreakpoint`: String, default "all"
      - `scrollScrubEnabled`: Boolean, default false
      - `scrollScrubAxis`: String, default "y"
      - `scrollScrubDistance`: Number, default 80
      - `motionOrigin`: String, default "center center"
      - `hoverEnabled`: Boolean, default false
      - `hoverEffect`: String, default "none"
      - `hoverDuration`: Number, default 240
      - `hoverIntensity`: Number, default 4
      - `continuousEnabled`: Boolean, default false
      - `continuousEffect`: String, default "none"
      - `continuousDuration`: Number, default 2400
      - `continuousIntensity`: Number, default 4
      - `statefulEnabled`: Boolean, default false
      - `statefulEffect`: String, default "none"
      - `statefulDuration`: Number, default 260
      - `statefulStagger`: Number, default 60
      - `transform.enabled`: Boolean, default false
      - `transform.translateX.value`: Number, default 0
      - `transform.translateX.unit`: String, default "px"
      - `transform.translateY.value`: Number, default 0
      - `transform.translateY.unit`: String, default "px"
      - `transform.scaleX`: Number, default 1
      - `transform.scaleY`: Number, default 1
      - `transform.rotate`: Number, default 0
      - `transform.rotateX`: Number, default 0
      - `transform.rotateY`: Number, default 0
      - `transform.skewX`: Number, default 0
      - `transform.skewY`: Number, default 0
      - `transform.perspective`: Number, default 0
      - `transform.originX`: String, default "center"
      - `transform.originY`: String, default "center"
      - `opacity`: Mixed
      - `transitionDuration`: Mixed
      - `transitionEasing`: String
      - `states`: Mixed
      - `useIframe`: Boolean, default false
      - `popup.text`: String
      - `popup.backgroundColor`: String
      - `popup.fullScreen`: Boolean, default false
      - `popup.about_page`: ObjectId, → AboutPage
      - `custom_component.html`: String
      - `custom_component.compiled_html`: String
      - `custom_component.css`: String
      - `custom_component.compiled_css`: String
      - `custom_component.js`: String
      - `custom_component.iframe`: Boolean, default false
      - `custom_component.variables`: Object[]
      - `hoverable_media.before_hover_media.media`: ObjectId, → Media
      - `hoverable_media.before_hover_media.gcs_url`: String
      - `hoverable_media.before_hover_media.vimeo_uri`: String
      - `hoverable_media.before_hover_media.vimeo_picture`: String
      - `hoverable_media.before_hover_media.youtube_url`: String
      - `hoverable_media.before_hover_media.vimeo_url`: String
      - `hoverable_media.before_hover_media.href`: String
      - `hoverable_media.before_hover_media.router_link`: String
      - `hoverable_media.before_hover_media.thumbnail`: String
      - `hoverable_media.before_hover_media.autoplay`: Boolean, default false
      - `hoverable_media.before_hover_media.loop`: Boolean, default false
      - `hoverable_media.before_hover_media.show_controls`: Boolean, default true
      - `hoverable_media.after_hover_media.media`: ObjectId, → Media
      - `hoverable_media.after_hover_media.gcs_url`: String
      - `hoverable_media.after_hover_media.vimeo_uri`: String
      - `hoverable_media.after_hover_media.vimeo_picture`: String
      - `hoverable_media.after_hover_media.youtube_url`: String
      - `hoverable_media.after_hover_media.vimeo_url`: String
      - `hoverable_media.after_hover_media.href`: String
      - `hoverable_media.after_hover_media.router_link`: String
      - `hoverable_media.after_hover_media.thumbnail`: String
      - `hoverable_media.after_hover_media.autoplay`: Boolean, default false
      - `hoverable_media.after_hover_media.loop`: Boolean, default false
      - `hoverable_media.after_hover_media.show_controls`: Boolean, default true
      - `collapsible_container`: Object[]
      - `collapsible_container_settings.enable_customization`: Boolean, default false
      - `collapsible_container_settings.title_color`: String
      - `collapsible_container_settings.title_color_checked`: String
      - `collapsible_container_settings.title_background`: String
      - `collapsible_container_settings.title_background_checked`: String
      - `collapsible_container_settings.title_font_size`: String
      - `collapsible_container_settings.title_border_radius`: String
      - `collapsible_container_settings.title_border_color`: String
      - `collapsible_container_settings.title_border_width`: String
      - `collapsible_container_settings.body_color`: String
      - `collapsible_container_settings.body_background`: String
      - `collapsible_container_settings.body_border_radius`: String
      - `collapsible_container_settings.body_border_color`: String
      - `collapsible_container_settings.body_border_width`: String
      - `collapsible_container_settings.body_font_size`: String
      - `collapsible_container_settings.icon_color`: String
      - `collapsible_container_settings.icon_glyph_color`: String
      - `collapsible_container_settings.icon_background_color`: String
      - `quiz.title`: String
      - `quiz.header`: String
      - `quiz.questions`: Object[]
      - `quiz.score_results`: Object[]
      - `quiz.show_right_answers`: Boolean, default false
      - `quiz.mutliple_choice`: Boolean, default false
      - `partners.defaultCollection`: String, default ""
      - `partners.defaultView`: String, default "locations"
      - `scroll_sequence.media`: ObjectId, → Media
      - `scroll_sequence.scroll_length`: Number, default 3
      - `scroll_sequence.fit`: String, one of cover | contain, default "cover"
      - `scroll_sequence.background_color`: String, default "#000000"
      - `scroll_sequence.overlay_color`: String, default ""
      - `scroll_sequence.overlay_opacity`: Number, default 0
      - `scroll_sequence.rows_over`: Boolean, default true
      - `scroll_sequence.rows_effect`: String, one of slide | pop, default "slide"
      - `scroll_sequence.snap_points`: Number[]
      - `scroll_sequence.snap_scroll_speed`: Number, default 1.5
      - `scroll_sequence.snap_down`: Boolean, default true
      - `scroll_sequence.snap_up`: Boolean, default false
      - `scroll_sequence.stop_momentum`: Boolean, default false
      - `smart_search.placeholder`: String, default ""
      - `smart_search.kinds`: String[]
      - `smart_search.collections`: String[]
      - `smart_search.items`: Object[]
      - `smart_search.showKindFilter`: Boolean, default true
      - `smart_search.showPriceFilter`: Boolean, default false
      - `smart_search.showDateFilter`: Boolean, default false
      - `smart_search.showSort`: Boolean, default true
      - `smart_search.dateMode`: String, one of created | updated | availability, default "created"
      - `smart_search.layout`: String, one of grid | list, default "grid"
      - `smart_search.columns`: Number, default 3
      - `smart_search.perPage`: Number, default 12
      - `smart_search.instant`: Boolean, default true
      - `smart_search.showImages`: Boolean, default true
      - `smart_search.showPrices`: Boolean, default true
      - `smart_search.showInitial`: Boolean, default false
      - `smart_search.showAnswer`: Boolean, default false
      - `countdown.targetDate`: String, default ""
      - `countdown.expiredText`: String, default "Offer has ended"
      - `countdown.hideOnExpire`: Boolean, default false
      - `countdown.textColor`: String, default ""
      - `countdown.boxColor`: String, default ""
      - `countdown.align`: String, one of  | left | center | right, default ""
      - `swiper.slides`: Object[]
      - `swiper.autoplay`: Boolean, default false
      - `swiper.loop`: Boolean, default false
      - `swiper.show_controls`: Boolean, default true
      - `swiper.dynamic_bullets`: Boolean, default false
      - `swiper.pagination`: Boolean, default true
      - `dynamicField`: String
      - `useDynamicField`: Boolean, default false
      - `text_auto_slider.speed`: Number
      - `text_auto_slider.aspect_ratio`: String
      - `text_auto_slider.text_color`: String
      - `text_auto_slider.background_color`: String
      - `text_auto_slider.delimiter_color`: String
      - `text_auto_slider.direction`: String
      - `text_auto_slider.width`: Number
      - `text_auto_slider.font_size`: Number
      - `text_auto_slider.text_transform`: String, one of none | uppercase, default "none"
      - `text_auto_slider.texts`: Object[]
      - `image_auto_slider.speed`: Number
      - `image_auto_slider.aspect_ratio`: String
      - `image_auto_slider.direction`: String
      - `image_auto_slider.width`: Number
      - `image_auto_slider.medias`: Object[]
      - `image_dragger.aspect_ratio`: String
      - `image_dragger.media_1.media`: ObjectId, → Media
      - `image_dragger.media_1.gcs_url`: String
      - `image_dragger.media_1.vimeo_uri`: String
      - `image_dragger.media_1.vimeo_picture`: String
      - `image_dragger.media_1.vimeo_url`: String
      - `image_dragger.media_1.youtube_url`: String
      - `image_dragger.media_2.media`: ObjectId, → Media
      - `image_dragger.media_2.gcs_url`: String
      - `image_dragger.media_2.vimeo_uri`: String
      - `image_dragger.media_2.vimeo_picture`: String
      - `image_dragger.media_2.vimeo_url`: String
      - `image_dragger.media_2.youtube_url`: String
      - `image_dragger.media_2.title`: String
      - `image_dragger.media_2.body`: String
      - `image_dragger.media_2.textColor`: String
      - `image_dragger.media_2.href`: String
      - `image_dragger.media_2.router_link`: String
      - `_id`: ObjectId
    - `sections`: Object[]
      - `position`: String, one of static | relative | absolute | fixed | sticky, default "static"
      - `overflow`: String, one of visible | hidden | scroll | auto, default "visible"
      - `editorName`: String
      - `top.value`: String, default "0"
      - `top.unit`: String, default "px"
      - `top.mobile_value`: String, default ""
      - `top.mobile_unit`: String, default "px"
      - `left.value`: String, default "0"
      - `left.unit`: String, default "px"
      - `left.mobile_value`: String, default ""
      - `left.mobile_unit`: String, default "px"
      - `right.value`: String, default "0"
      - `right.unit`: String, default "px"
      - `right.mobile_value`: String, default ""
      - `right.mobile_unit`: String, default "px"
      - `bottom.value`: String, default "0"
      - `bottom.unit`: String, default "px"
      - `bottom.mobile_value`: String, default ""
      - `bottom.mobile_unit`: String, default "px"
      - `display`: String, one of block | inline | flex, default "block"
      - `flex_direction`: String, one of row | row-reverse | column | column-reverse, default "row"
      - `flex_direction_mobile`: String, default ""
      - `backdropFilter`: String, default ""
      - `justify`: String, one of start | end | center | space-between | space-around | stretch, default "start"
      - `justify_mobile`: String, default ""
      - `align`: String, one of start | end | center | space-between | space-around | stretch, default "start"
      - `align_mobile`: String, default ""
      - `animation`: String, default "none"
      - `animationDuration`: Number, default 0
      - `animationStrength`: Number
      - `parallaxEnabled`: Boolean
      - `parallaxAmount`: Number
      - `parallaxZoom`: Number
      - `animationDelay`: Number, default 0
      - `animationReplay`: String, default "once"
      - `animationEasing`: String, default "power3.out"
      - `animationBreakpoint`: String, default "all"
      - `scrollScrubEnabled`: Boolean, default false
      - `scrollScrubAxis`: String, default "y"
      - `scrollScrubDistance`: Number, default 80
      - `motionOrigin`: String, default "center center"
      - `hoverEnabled`: Boolean, default false
      - `hoverEffect`: String, default "none"
      - `hoverDuration`: Number, default 240
      - `hoverIntensity`: Number, default 4
      - `continuousEnabled`: Boolean, default false
      - `continuousEffect`: String, default "none"
      - `continuousDuration`: Number, default 2400
      - `continuousIntensity`: Number, default 4
      - `statefulEnabled`: Boolean, default false
      - `statefulEffect`: String, default "none"
      - `statefulDuration`: Number, default 260
      - `statefulStagger`: Number, default 60
      - `transform.enabled`: Boolean, default false
      - `transform.translateX.value`: Number, default 0
      - `transform.translateX.unit`: String, default "px"
      - `transform.translateY.value`: Number, default 0
      - `transform.translateY.unit`: String, default "px"
      - `transform.scaleX`: Number, default 1
      - `transform.scaleY`: Number, default 1
      - `transform.rotate`: Number, default 0
      - `transform.rotateX`: Number, default 0
      - `transform.rotateY`: Number, default 0
      - `transform.skewX`: Number, default 0
      - `transform.skewY`: Number, default 0
      - `transform.perspective`: Number, default 0
      - `transform.originX`: String, default "center"
      - `transform.originY`: String, default "center"
      - `opacity`: Mixed
      - `transitionDuration`: Mixed
      - `transitionEasing`: String
      - `states`: Mixed
      - `hoverGroup`: Boolean
      - `flex_wrap`: String, one of nowrap | wrap | wrap-reverse, default "wrap"
      - `flex_wrap_mobile`: String, default ""
      - `width.value`: String, default ""
      - `width.unit`: String, default "px"
      - `width.mobile_value`: String, default ""
      - `width.mobile_unit`: String, default "px"
      - `min_width.value`: String, default ""
      - `min_width.unit`: String, default "px"
      - `min_width.mobile_value`: String, default ""
      - `min_width.mobile_unit`: String, default "px"
      - `max_width.value`: String, default ""
      - `max_width.unit`: String, default "px"
      - `max_width.mobile_value`: String, default ""
      - `max_width.mobile_unit`: String, default "px"
      - `height.value`: String, default ""
      - `height.unit`: String, default "px"
      - `height.mobile_value`: String, default ""
      - `height.mobile_unit`: String, default "px"
      - `min_height.value`: String, default ""
      - `min_height.unit`: String, default "px"
      - `min_height.mobile_value`: String, default ""
      - `min_height.mobile_unit`: String, default "px"
      - `max_height.value`: String, default ""
      - `max_height.unit`: String, default "px"
      - `max_height.mobile_value`: String, default ""
      - `max_height.mobile_unit`: String, default "px"
      - `object_fit`: String
      - `aspect_ratio.custom`: Boolean, default false
      - `aspect_ratio.ratio`: String, default ""
      - `margin_left.value`: String, default "0"
      - `margin_left.unit`: String, default "px"
      - `margin_left.mobile_value`: String, default ""
      - `margin_left.mobile_unit`: String, default "px"
      - `margin_right.value`: String, default "0"
      - `margin_right.unit`: String, default "px"
      - `margin_right.mobile_value`: String, default ""
      - `margin_right.mobile_unit`: String, default "px"
      - `margin_top.value`: String, default "0"
      - `margin_top.unit`: String, default "px"
      - `margin_top.mobile_value`: String, default ""
      - `margin_top.mobile_unit`: String, default "px"
      - `margin_bottom.value`: String, default "0"
      - `margin_bottom.unit`: String, default "px"
      - `margin_bottom.mobile_value`: String, default ""
      - `margin_bottom.mobile_unit`: String, default "px"
      - `padding_left.value`: String, default "0"
      - `padding_left.unit`: String, default "px"
      - `padding_left.mobile_value`: String, default ""
      - `padding_left.mobile_unit`: String, default "px"
      - `padding_right.value`: String, default "0"
      - `padding_right.unit`: String, default "px"
      - `padding_right.mobile_value`: String, default ""
      - `padding_right.mobile_unit`: String, default "px"
      - `padding_top.value`: String, default "0"
      - `padding_top.unit`: String, default "px"
      - `padding_top.mobile_value`: String, default ""
      - `padding_top.mobile_unit`: String, default "px"
      - `padding_bottom.value`: String, default "0"
      - `padding_bottom.unit`: String, default "px"
      - `padding_bottom.mobile_value`: String, default ""
      - `padding_bottom.mobile_unit`: String, default "px"
      - `border_left.style`: String, default "none"
      - `border_left.color`: String
      - `border_left.width.value`: String, default "0"
      - `border_left.width.unit`: String, default "px"
      - `border_right.style`: String, default "none"
      - `border_right.color`: String
      - `border_right.width.value`: String, default "0"
      - `border_right.width.unit`: String, default "px"
      - `border_top.style`: String, default "none"
      - `border_top.color`: String
      - `border_top.width.value`: String, default "0"
      - `border_top.width.unit`: String, default "px"
      - `border_bottom.style`: String, default "none"
      - `border_bottom.color`: String
      - `border_bottom.width.value`: String, default "0"
      - `border_bottom.width.unit`: String, default "px"
      - `border_top_left_radius.value`: String, default "0"
      - `border_top_left_radius.unit`: String, default "px"
      - `border_top_right_radius.value`: String, default "0"
      - `border_top_right_radius.unit`: String, default "px"
      - `border_bottom_left_radius.value`: String, default "0"
      - `border_bottom_left_radius.unit`: String, default "px"
      - `border_bottom_right_radius.value`: String, default "0"
      - `border_bottom_right_radius.unit`: String, default "px"
      - `border_radius.value`: String, default "0"
      - `border_radius.unit`: String, default "px"
      - `specific_border_radius`: Boolean, default false
      - `box_shadows`: Object[]
      - `backgroundColor`: String
      - `backgroundGradient.enabled`: Boolean, default false
      - `backgroundGradient.type`: String
      - `backgroundGradient.degrees`: Number
      - `backgroundGradient.radialShape`: String
      - `backgroundGradient.radialPosition`: String
      - `backgroundGradient.colors`: Object[]
      - `backgroundGradient.css`: String
      - `backgroundVideo`: String
      - `backgroundImage`: String
      - `backgroundSize`: String
      - `backgroundPosition`: String
      - `backgroundRepeat`: String
      - `showOnMobile`: Boolean, default true
      - `showOnDesktop`: Boolean, default true
      - `components`: Object[]
      - `sections`: Object[]
      - `_id`: ObjectId
    - `_id`: ObjectId
  - `ai_meta`: Mixed
  - `_id`: ObjectId
- `suitability_price_plans`: ObjectId[], → PricePlan - PricePlan ids.
- `isSuitable`: Boolean - Set per request, not stored: whether the signed-in user's price plans match the page's suitability plans.
- `archived`: Boolean, default false - Hidden from the site and the admin's page list without being deleted.
- `archivedAt`: Date - When the page was archived.
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### BoxNowSettings

- `shipping`: ObjectId, → Shipping - Shipping.id.
- `create_label`: Boolean, default false - Shipments are created at BoxNow automatically when an order is placed.
- `client_id`: String - BoxNow API client id.
- `contactNumber`: String - Sender's phone number.
- `contactEmail`: String - Sender's email.
- `contactName`: String - Sender's name.
- `locationId`: String - Warehouse ID.
- `owner_id`: ObjectId, required, → User - User.id.
- `box`: Object[] - Box sizes the business ships in.
  - `height`: Number
  - `length`: Number
  - `width`: Number
  - `_id`: ObjectId
- `multiple_items`: String, one of box | sum, default "sum" - One of: box, sum.
- `divide_by`: Number - When several items are summed into one parcel, their added dimensions are divided by this to estimate it.
- `product_default_dimensions.height`: Number
- `product_default_dimensions.width`: Number
- `product_default_dimensions.length`: Number
- `product_default_dimensions.weight`: Number
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### Cart

- `session`: String, required - The visitor's session the cart belongs to.
- `items`: Object[] - What is in the cart: product, quantity and chosen options.
  - `item`: ObjectId, → Products
  - `options`: String
  - `_id`: ObjectId
- `coupon`: ObjectId - Code of the applied coupon.
- `discount_value`: Number, default 0 - The discount the coupon gives.
- `ip_guessed.country`: String
- `ip_guessed.country_code`: String
- `ip_guessed.city`: String
- `ip_guessed.state`: String
- `ip_guessed.zip_code`: String
- `ip_guessed.dialing_code`: String
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### Collection

A group or filter of items; the prefix of its name is its kind (product/, grouping/, service/, blogpost/...).

- `name`: String, required - Written "<kind>/<Name>": the prefix is where it shows - product/ (a store category), service/ (a service category), blogpost/, program-category/, donation-category/; filters: grouping/ (in a product category), calendar-filter/ (on the booking page). "service/Deep cleaning". A name without a prefix shows nowhere.
- `parent_collection`: ObjectId, → Collection - Collection.id of the parent collection.
- `picture`: ObjectId, → Media - Media.id.
- `about_page`: ObjectId, → AboutPage - Reference to AboutPage.
- `match_to_option`: Boolean, default false - Matches all products which have an option with match_to_collection true.
- `is_color`: Boolean, default false - Used for products with color options.
- `color`: String - Used to visually show the color on the page when is_color is true.
- `position`: Number - Order among collections of the same kind; lower first.
- `items`: ObjectId[] - Array<Product.id> deprecated.
- `thumbnail`: ObjectId, → Media - Media.id, shown on the store cards instead of picture.
- `_id`: ObjectId

### ConnectedAccount

- `on_behalf_of`: ObjectId, required, → User - The profile that gives authority to other user to alter his account.
- `user_account`: ObjectId, required, → User - The account which will receive certain privileges over over the account of the authorizer.
- `status`: String, default "pending" - State of the connection (connected, expired...).
- `is_authorized_to.create_posts`: Boolean, default false
- `is_authorized_to.send_messages`: Boolean, default false
- `is_authorized_to.answer_delete_comments`: Boolean, default false
- `is_authorized_to.access_engagements`: Boolean, default false
- `is_authorized_to.access_boosted_posts`: Boolean, default false
- `is_authorized_to.access_analytics`: Boolean, default false
- `is_authorized_to.alter_profile_settings`: Boolean, default false
- `is_authorized_to.catalogue_access.alter_products`: Boolean, default false
- `is_authorized_to.catalogue_access.alter_services`: Boolean, default false
- `is_authorized_to.catalogue_access.alter_blogposts`: Boolean, default false
- `is_authorized_to.catalogue_access.alter_price_plans`: Boolean, default false
- `is_authorized_to.catalogue_access.alter_programs`: Boolean, default false
- `is_authorized_to.catalogue_access.alter_orders`: Boolean, default false
- `is_authorized_to.catalogue_access.alter_bookings`: Boolean, default false
- `is_authorized_to.catalogue_access.alter_subscriptions`: Boolean, default false
- `is_authorized_to.catalogue_access.alter_purchases`: Boolean, default false
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### Coupon

A discount code for checkout.

- `code`: String, required - Coupon code.
- `name`: String, required - Coupon name (not shown to end user).
- `fixed_discount`: Number - Fixed amount of discount.
- `percentage_discount`: Number - Discount in percent, e.g. 90 for 90% off.
- `shipping_discount`: Number - Shipping discount discount.
- `sale_discount`: Number - Sale discount discount.
- `quantity_discount.buy`: Number
- `quantity_discount.get`: Number
- `apply_to_all_orders`: Boolean - The coupon works on any order.
- `apply_to_all_products`: Boolean - The coupon works on every product.
- `apply_to_product`: String - The NAME of the one product the coupon works on, exactly as the product is named (not its id): the cart matches it against product names.
- `apply_to_event`: String - The NAME of the one event the coupon works on, exactly as the event is named.
- `apply_to_all_events`: Boolean - The coupon works on every event.
- `apply_to_collection`: String - The full NAME of the one category the coupon works on ("product/Candles"), not its id: the cart matches it against category names.
- `apply_to_minimum_subtotal`: Number - Minimum total amount.
- `start_date`: Date - When the coupon starts working; now when left out.
- `end_date`: Date - When it stops working, unless no_end_date is set.
- `no_end_date`: Boolean, default false - The coupon never expires; end_date is ignored.
- `limit_uses`: Number - How many times the coupon can be used in all; null (the default) for unlimited.
- `uses`: Number, default 0 - How many times it has been used (do not set).
- `_id`: ObjectId

### Donation

A fundraising campaign.

- `enabled`: Boolean, default false - The campaign accepts donations.
- `has_shippable_items`: Boolean, default false - Donors get something shipped, so an address is asked for.
- `medias`: Object[] - The campaign's pictures.
  - `media`: ObjectId, → Media
  - `gcs_url`: String
  - `gcs_480_30_url`: String
  - `gcs_720_30_url`: String
  - `gcs_1080_30_url`: String
  - `duration`: Number
  - `vimeo_uri`: String
  - `vimeo_picture`: String
  - `vimeo_url`: String
  - `youtube_url`: String
  - `youtube_picture`: String
  - `thumbnail`: String
  - `_id`: ObjectId
- `url`: String, required - Generated from name, no need to set it manually.
- `static_url`: String - A fixed address kept when the url changes.
- `title`: String, required - Name of the campaign, required.
- `description`: String, required - Full body text describing the campaign and its goals, in HTML format, required.
- `about_page`: ObjectId, → AboutPage - AboutPage.id.
- `target_amount.enabled`: Boolean, default false
- `target_amount.amount`: Number
- `predefined_amounts.enabled`: Boolean, default false
- `predefined_amounts.amounts`: Object[]
  - `title`: String, required
  - `description`: String
  - `amount`: Number, required
  - `_id`: ObjectId
- `collection_id`: ObjectId, → Collection - Reference to a Collection with name starting with 'donation-category/', optional.
- `topics`: Object[] - Causes a donor can choose to give to.
  - `collection_id`: ObjectId, → Collection
  - `_id`: ObjectId
- `owner_id`: ObjectId, → User - User.id.
- `options`: Object[] - Purchasable add-on option groups for the donation (e.g. "Include a gift", "Select a reward tier").
  - `name`: String, required
  - `options`: Object[]
    - `option`: String, required
    - `match_to_collection`: ObjectId, → Collection
    - `quantity`: Number
    - `badge`: String
    - `option_specific_media`: ObjectId, → Media
    - `_id`: ObjectId
  - `_id`: ObjectId
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### EcontSettings

- `shipping`: ObjectId, → Shipping - Shipping.id.
- `create_label`: Boolean, default false - Shipments are created at Econt automatically when an order is placed.
- `username`: String - Econt account username.
- `from_office`: Boolean, default false - Shipments leave from an Econt office; false: picked up from the sender's door.
- `automatic_courier`: Boolean, default false - A courier is ordered to pick shipments up automatically.
- `sender_address.city.country.code2`: String
- `sender_address.city.name`: String
- `sender_address.city.postCode`: String
- `sender_address.quarter`: String
- `sender_address.street`: String
- `sender_address.other`: String
- `sender_address.num`: String
- `sender_office.code`: String
- `sender_office.name`: String
- `sender`: String - Sender's name on shipments.
- `sender_agent.name`: String
- `sender_agent.phones`: String[]
- `sender_agent.email`: String
- `payAfterAccept`: Boolean, default false - Customers may inspect the parcel before paying.
- `multiple_items`: String, one of box | sum, default "sum" - One of: box, sum.
- `divide_by`: Number - When several items are summed into one parcel, their added dimensions are divided by this to estimate it.
- `box`: Object[] - Box sizes the business ships in.
  - `height`: Number
  - `length`: Number
  - `width`: Number
  - `_id`: ObjectId
- `email_delivery`: Boolean, default false - Econt emails the customer about the delivery.
- `sms_delivery`: Boolean, default false - Econt texts the customer about the delivery.
- `free_delivery_method`: String, one of cash | credit | voucher, default "cash" - One of: cash, credit, voucher.
- `invoice_num`: String - Number of the business's agreement with Econt.
- `cdPayOptionsTemplate`: String - Econt's cash-on-delivery payout template used for the business's shipments.
- `owner_id`: ObjectId, required, → User - User.id.
- `connected_account_owner_id`: ObjectId, → User - User.id.
- `product_default_dimensions.height`: Number
- `product_default_dimensions.width`: Number
- `product_default_dimensions.length`: Number
- `product_default_dimensions.weight`: Number
- `_id`: ObjectId

### Event

A ticketed event at a venue.

- `name`: String, required - Name of the event.
- `venue`: ObjectId, required, → Venue - Venue.id.
- `description`: String, required - About the event.
- `medias`: Object[] - The event's pictures.
  - `media`: ObjectId, → Media
  - `gcs_url`: String
  - `gcs_480_30_url`: String
  - `gcs_720_30_url`: String
  - `gcs_1080_30_url`: String
  - `duration`: Number
  - `vimeo_uri`: String
  - `vimeo_picture`: String
  - `vimeo_url`: String
  - `youtube_url`: String
  - `youtube_picture`: String
  - `thumbnail`: String
  - `_id`: ObjectId
- `dates`: Object[] - When it takes place, one entry per date.
  - `date`: Date, required
  - `seating_plan.id`: ObjectId, required, → SeatingPlan
  - `seating_plan.sections`: Object[], required
    - `subsections`: Object[], required
      - `rows`: Object[], required
      - `edit`: Boolean, required
      - `widest_column`: Number, required
      - `justify`: String, required
      - `left`: Number
      - `top`: Number
    - `section_type`: String, required
    - `name`: String, required
    - `top`: Number
    - `left`: Number
    - `color`: String
    - `premium_color`: String
    - `rotation`: Number
    - `tier`: Number, default 0
    - `max_seats`: Number
    - `tickets`: ObjectId[], → Ticket
  - `_id`: ObjectId
- `tier_1.name`: String
- `tier_1.price`: Number
- `tier_2.name`: String
- `tier_2.price`: Number
- `tier_3.name`: String
- `tier_3.price`: Number
- `tier_4.name`: String
- `tier_4.price`: Number
- `tier_5.name`: String
- `tier_5.price`: Number
- `tier_6.name`: String
- `tier_6.price`: Number
- `tier_7.name`: String
- `tier_7.price`: Number
- `tier_8.name`: String
- `tier_8.price`: Number
- `tier_9.name`: String
- `tier_9.price`: Number
- `tier_10.name`: String
- `tier_10.price`: Number
- `tier_11.name`: String
- `tier_11.price`: Number
- `tier_12.name`: String
- `tier_12.price`: Number
- `tier_13.name`: String
- `tier_13.price`: Number
- `tier_14.name`: String
- `tier_14.price`: Number
- `tier_15.name`: String
- `tier_15.price`: Number
- `owner_id`: ObjectId, required, → User - User.id.
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### Inventory

- `product`: ObjectId, → Product - Product.id.
- `option`: String - The product option this stock line is for ("Red / L").
- `quantity`: Number, default 0 - How many of this product option are in stock: the number the store sells from and orders take away. Only counted, and shown in the admin, when track is on.
- `sku`: String - Stock keeping unit code.
- `track`: Boolean, default false - Stock is counted and goes down with orders.
- `trackSku`: Boolean, default false - Stock is counted per SKU.
- `name`: Mixed - The product's name, per language.
- `media`: Mixed - The product's picture.
- `category`: Mixed - The product's category.
- `price`: Mixed - The product's price.
- `status`: Mixed - Stock state (in stock, low, out).
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### InvoiceSettings

The business details, numbering and taxes the site's invoices are issued with.

- `number`: Number - Invoice starting number.
- `price_quote_number`: String - Price quote starting number.
- `bic`: String - Bic of bank account.
- `swift`: String - Swift of bank account.
- `tax_id`: String - The business's tax identification number.
- `vat_id`: String - The business's VAT number.
- `logo`: ObjectId - Id of media used as logo on invoices.
- `business_name`: String - Name of bussines.
- `business_name_translated`: String - Name of bussines.
- `responsible_official`: String - Responsible official.
- `responsible_official_translated`: String - Responsible official.
- `business_email`: String - Email of bussines.
- `company_id`: String - Id of company.
- `business_address`: String - Address of business.
- `business_address_translated`: String - Address of business.
- `business_phone_number`: String - Phone number of business.
- `business_country`: String - Country of business.
- `business_country_translated`: String - Country of business.
- `footer`: String - Footer text placed at bottom of invoice.
- `footer_translated`: String - Footer text placed at bottom of invoice.
- `foreign_tax`: Number, default 0 - Tax which is applied to foreign to business countries customers.
- `home_tax`: Number, default 0 - Tax which is applied to the home country customers.
- `currency_symbol`: String - Currency symbol printed on invoices.
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### Lead

- `seq`: Number, default 0 - Running number of the customer.
- `organization_name`: String - Customer's company name.
- `firstname`: String, required - Customer's first name.
- `lastname`: String, required - Customer's last name.
- `email`: String, required - Customer's email.
- `phone_number`: String, required - Customer's phone number.
- `address`: String, required - Customer's address.
- `city`: String, required - Customer's city.
- `state`: String - Customer's state or region.
- `country`: String, required - Customer's country.
- `zip_code`: String, required - Customer's postal code.
- `tax_identification_number`: String - Customer's tax number.
- `vat_id`: String - Customer's VAT number.
- `notes`: String - Notes kept on the customer.
- `products`: String[] - Product ids the customer bought.
- `products_obj`: Object[] - The products bought, as they were when ordered.
  - `product_id`: ObjectId, → Product
  - `name`: String
  - `options`: String
  - `price`: Number
  - `quantity`: Number
  - `_id`: ObjectId
- `programs`: String[] - Program ids the customer bought.
- `programs_obj`: Object[] - The programs bought, as they were when ordered.
  - `program_id`: ObjectId, → Program
  - `title`: String
  - `price`: Number
  - `_id`: ObjectId
- `tickets`: ObjectId[], → Ticket - Ticket ids.
- `donations`: ObjectId[], → Donation - Donation ids.
- `donations_obj`: Object[] - The donations made.
  - `donation_id`: ObjectId, → Donation
  - `name`: String
  - `options`: String
  - `price`: Number
  - `quantity`: Number
  - `_id`: ObjectId
- `lifetime_value`: Number, default 0 - Everything the customer has spent.
- `last_order_value`: Number - Value of the customer's last order.
- `services`: ObjectId[], → Service - Service ids.
- `stripe_id`: String - The customer's id in Stripe.
- `delivery_method`: String - The customer's last delivery method.
- `shipping_option`: String, one of address | office, default "address" - One of: address, office.
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### MyContact

The site's name and contact details.

- `zip_code`: String, required - Postal/ZIP code.
- `city`: String, required - The city where the business is located.
- `address`: String, required - The street address.
- `contact`: String - Html format.
- `email`: String, required - The public contact email address.
- `google_app`: String - Link to the business's app on Google Play.
- `workhours`: String - Opening hours as text.
- `logo`: ObjectId - Media.id.
- `site_name`: String, required - The business/site name shown publicly.
- `domain`: String, required - The site's own domain.
- `stock_domain`: String - The platform subdomain the site always answers on.
- `isMarket`: Boolean, required, default false - The site is a marketplace.
- `forbidden_collections`: Object[] - Array of {collection_id}.
  - `collection_id`: ObjectId, → Collection
  - `_id`: ObjectId
- `isInit`: Boolean, default false - The site was set up from a template.
- `template`: String, default "0000" - The template the site was made from.
- `lang`: String - 2-letter language code (e.g. "en", "fr", "de").
- `allowedComponents.services`: Boolean, default true
- `allowedComponents.products`: Boolean, default true
- `allowedComponents.blogposts`: Boolean, default true
- `allowedComponents.programs`: Boolean, default true
- `favicon`: ObjectId - Media.id of the browser tab icon.
- `cacheEnabled`: Boolean - Pages are cached for faster loading.
- `has_completed_startup_prompt`: Boolean, default true - The owner went through the first AI prompt.
- `gmb_location`: String - The Google Business Profile location linked to the site.
- `ga_property`: String - The Google Analytics property linked to the site.
- `site_generated_at`: Date - When the AI builder first built this site (a plan that made the homepage). Written once (runPlan); starts the admin's 15-minute launch offer.
- `admin_first_opened_at`: Date - When the owner first opened the admin; with admin_last_opened_at it tells "never opened it" from "opened it and left".
- `admin_last_opened_at`: Date - When the owner last opened the admin.
- `admin_in_app_browser`: Boolean - The owner last opened the admin inside an app's browser.
- `domain_suggestions`: Mixed - Domain names suggested to the owner, kept so they are not suggested again.
- `_id`: ObjectId

### Order

A completed purchase.

- `organization_name`: String - Customer's company name.
- `firstname`: String, required - Customer's first name.
- `lastname`: String, required - Customer's last name.
- `email`: String, required - Customer's email.
- `phone_number`: String, required - Customer's phone number.
- `address`: String, required - Delivery address.
- `city`: String, required - Delivery city.
- `state`: String - Delivery state or region.
- `country`: String, required - Delivery country.
- `zip_code`: String, required - Delivery postal code.
- `tax_identification_number`: String - Customer's tax number, for an invoice.
- `notes`: String - What the customer wrote with the order.
- `products`: String[] - Product ids ordered.
- `products_obj`: Object[] - The products ordered, as they were then: options, quantity and price.
  - `product_id`: ObjectId, → Product
  - `name`: String
  - `options`: String
  - `price`: Number
  - `quantity`: Number
  - `_id`: ObjectId
- `programs`: String[] - Program ids ordered.
- `programs_obj`: Object[] - The programs ordered, as they were then.
  - `program_id`: ObjectId, → Program
  - `title`: String
  - `price`: Number
  - `_id`: ObjectId
- `tickets`: ObjectId[], → Ticket - Ticket ids.
- `donations`: ObjectId[], → Donation - Donation ids.
- `donations_obj`: Object[] - The donations made with the order.
  - `donation_id`: ObjectId, → Donation
  - `name`: String
  - `options`: String
  - `price`: Number
  - `quantity`: Number
  - `_id`: ObjectId
- `value`: Number - Total of the order.
- `finalized`: Boolean, default false - Checkout was completed.
- `fulfilled`: Boolean, default false - The order was sent or handed over.
- `paid`: Boolean, default false - The order is paid.
- `delivery_method`: String - How it is delivered (courier, office, pickup...).
- `payment_method`: String - How it is paid (card, cash, invoice, PayPal).
- `shipping_cost`: Number - What delivery costs.
- `coupon_code`: String - The coupon used.
- `owner_id`: ObjectId, → User - User.id.
- `reference_id`: String - The order's id at the payment provider.
- `rating_mail_sent`: Boolean, default false - The email asking for a rating was sent.
- `shipping_label`: String - The courier's shipment label.
- `shipping_option`: String, one of address | office, default "address" - One of: address, office.
- `shipping_message`: String - The courier's last status message.
- `shipping_office`: String - The courier office it is delivered to.
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### OriginAddress

An address deliveries and venues start from - a shop, warehouse or office.

- `title`: String, required - Name of the address ("Warehouse").
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### PaymentMethod

- `has_cash`: Boolean, default false - Cash on delivery is offered.
- `cash_locale`: String, default "Pay by cash" - Label of the cash option.
- `cash_instructions`: String - Instructions shown for cash payment.
- `cash_increase`: Number, default 0 - Extra charged for cash payment.
- `has_card`: Boolean, default false - Card payment is offered.
- `card_locale`: String, default "Pay with credit card" - Label of the card option.
- `email`: String - The business's email for payments.
- `country`: String - The business's country for payments.
- `has_invoicing`: Boolean, default false - Payment by invoice is offered.
- `invoice_locale`: String, default "Pay via invoice" - Label of the invoice option.
- `invoicing_instructions`: String - Instructions shown for paying by invoice.
- `currency`: String, required - Currency prices are in.
- `agreedToTerms`: Boolean, default false - The owner accepted the payment terms.
- `agreedToTermsAt`: String - When the owner accepted them.
- `merchant_id`: String - The business's merchant id at the card processor.
- `has_paypal`: Boolean, default false - PayPal is offered.
- `paypal_increase`: Number, default 0 - Extra charged for PayPal.
- `paypal_id`: String - The business's PayPal id.
- `lock_currency`: Boolean, default false - Visitors cannot switch the currency.
- `commission_percentage`: Number, default 4.4 - The platform's commission on payments.
- `two_currencies`: Boolean, default false - Prices are shown in a second currency too.
- `second_currency`: String - The second currency.
- `calculate_rate`: Boolean, default false - The second price is converted at the current rate.
- `currency_rate`: Number - Fixed rate for the second currency, when not calculated.
- `_id`: ObjectId

### Post

- `posted_by`: ObjectId, required, → User - User.id.
- `repost_of`: ObjectId, → Post - Post.id.
- `connected_account_posted_by`: ObjectId, → User - User.id.
- `text`: String - The post's text.
- `title`: String - The post's title.
- `likes`: ObjectId[], → User - User ids.
- `shares`: Object[] - Who shared it, and when.
  - `from`: ObjectId, → User
  - `to`: ObjectId, → User
  - `_id`: ObjectId
- `views`: ObjectId[], → User - User ids.
- `comments`: ObjectId[], → Comment - Comment ids.
- `medias`: Object[] - Pictures and videos of the post.
  - `media`: ObjectId, → Media
  - `vimeo_uri`: String
  - `vimeo_picture`: String
  - `vimeo_url`: String
  - `youtube_url`: String
  - `youtube_picture`: String
  - `gcs_url`: String
  - `gcs_480_30_url`: String
  - `gcs_720_30_url`: String
  - `gcs_1080_30_url`: String
  - `duration`: Number
  - `transcode_status`: String, default "not_started"
  - `_id`: ObjectId
- `thumbnail.media`: ObjectId, → Media
- `keywords`: String[] - Words it is found by.
- `emotion`: String - Positive, neutral, negative.
- `political_spectrum`: String - Far left, left, far right, right, middle.
- `explicit`: String - Yes, no, middle.
- `harmful`: String - Yes, no, maybe.
- `propaganda`: String - Yes, no, middle.
- `advertisement`: String - Yes, no, maybe.
- `engaging`: String - Yes, no, maybe.
- `language`: String - Language of the post.
- `interests`: String[] - From Google Segments.
- `app_category`: String[] - From Google Segments.
- `user_profile`: String[] - Profiles the post is shown to.
- `user_economics`: String - Low, middle, high.
- `user_education`: String - Low, middle, high.
- `marital_status`: String - Single, married.
- `age`: String - 0-18, 18-25, 25-30, 30-35, 35-45, 45-60.
- `sex`: String - Male - female.
- `attractiveness`: String - Low, medium, high,.
- `isAdvertisment`: Boolean, default false - A paid ad.
- `saves`: ObjectId[], → User - User ids.
- `expirable`: Boolean, default false - Disappears after a while.
- `exclusive`: Boolean, default false - Only for subscribers.
- `price_plans`: ObjectId[], → PricePlan - PricePlan ids.
- `targeting.keywords`: String[]
- `targeting.language`: String[]
- `targeting.interests`: String[]
- `targeting.app_category`: String[]
- `targeting.user_economics`: String[]
- `targeting.user_education`: String[]
- `targeting.marital_status`: String[]
- `targeting.age`: String[]
- `targeting.sex`: String[]
- `targeting.isCpc`: Boolean, default false
- `targeting.cost_per_click`: Number, default 0
- `targeting.cost_per_mile`: Number, default 0
- `targeting.daily_budget`: Number, default 0
- `targeting.duration`: Number, default 0
- `targeting.outer_link.text`: String
- `targeting.outer_link.url`: String
- `targeting.locations`: Object[]
  - `type`: String, one of Point
  - `coordinates`: Number[]
  - `_id`: ObjectId
- `targeting.total`: Number, default 0
- `targeting.created_on`: Date
- `targeting.inner_link.text`: String
- `targeting.inner_link.profile_segment`: String
- `targeting.total_clicks`: Number, default 0
- `targeting.unique_clicks`: ObjectId[], → User
- `targeting.campaign_type`: String
- `targeting.related_videos`: ObjectId[], → Post
- `mentions`: ObjectId[], → User - User ids.
- `total_views`: Number, default 0 - How many times it was opened.
- `times_showed`: Number, default 0 - How many times it was shown in a feed.
- `attached_to`: ObjectId, → Post - Post.id.
- `attached_to_cta_text`: String - Text of the post's call-to-action button.
- `poll.question`: String
- `poll.answers`: Object[]
  - `text`: String
  - `users`: ObjectId[], → User
  - `_id`: ObjectId
- `isBlacklist`: Boolean, default false - Contains blacklisted words.
- `isReviewed`: Boolean, default false - A moderator reviewed it.
- `custom_link.heading`: String
- `custom_link.url`: String
- `embeded_link.og:image`: String
- `embeded_link.og:site_name`: String
- `embeded_link.og:title`: String
- `embeded_link.og:url`: String
- `posted_in`: ObjectId, → Group - Group.id.
- `attached_to_service`: ObjectId, → Service - Service.id.
- `attached_to_product`: ObjectId, → Product - Product.id.
- `attached_to_blogpost`: ObjectId, → BlogPost - BlogPost.id.
- `attached_to_program`: ObjectId, → Program - Program.id.
- `attached_to_priceplans`: Boolean, default false - Only subscribers of the attached price plans see it.
- `isWhitelisted`: Boolean, default false - Allowed past moderation.
- `attached_to_group`: ObjectId, → Group - Group.id.
- `reach`: ObjectId[], → User - User ids.
- `showAds`: Boolean, default true - The author allows ads next to it.
- `adminShowAds`: Boolean, default true - The admin allows ads next to it.
- `isAddReviewed`: Boolean, default false - The ad was reviewed.
- `reposts`: ObjectId[], → Post - Post ids.
- `original_post`: ObjectId, → Post - The first reposted post.
- `isHidden`: Boolean, default false - Hidden by a moderator.
- `dislikes`: ObjectId[], → User - User ids.
- `frames`: Object[] - The frames of a story.
  - `media`: ObjectId, → Media
  - `timestamp`: Number
  - `_id`: ObjectId
- `privacy`: String, required, one of everyone | followers | private, default "everyone" - One of: everyone, followers, private.
- `isPinned`: Boolean, default false - Pinned to the top of the author's profile.
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### PriceQuote

- `customer_name`: String - Name of customer.
- `customer_address`: String - Address of customer.
- `customer_postal_code`: String - Postal code of customer.
- `customer_city`: String - City of customer.
- `customer_country`: String - Country of customer.
- `customer_phone`: String - Phone of customer.
- `customer_email`: String - Email of customer.
- `customer_tax_id`: String, required - Tax id of customer.
- `customer_vat_id`: String - Customer's VAT number.
- `customer_responsible_official`: String, required - Person responsible on the customer's side.
- `customer_organization_name`: String - Customer's company name.
- `billing_customer_address`: String - Address of billed customer.
- `billing_customer_postal_code`: String - Postal code billed of customer.
- `billing_customer_city`: String - City of billed customer.
- `billing_customer_country`: String - Country of billed customer.
- `billing_customer_phone`: String - Phone of billed customer.
- `subtotal`: Number - Invoice subtotal.
- `amount`: Number - Invoice amount.
- `day_of_issue`: String - Day of issue of invoice.
- `number`: Number - The quote's number.
- `foreign`: Boolean - Flag which shows if invoice is from foreign to company country.
- `home_tax`: Number, default 0 - Home country tax amount.
- `foreign_tax`: Number, default 0 - Foreign country tax amount.
- `items`: Object[] - Array of sold products which contains their name, cost, quantity and discount.
  - `id`: String
  - `name`: String
  - `qty`: Number
  - `unit_price`: Number
  - `discount`: Number
  - `amount`: Number
  - `_id`: ObjectId
- `grounds_for_transaction`: String - Legal grounds for the transaction.
- `description_of_transaction`: String - What it is for.
- `place_of_transaction`: String - Where it takes place.
- `payment`: String - How it would be paid.
- `dateDue`: String - Date the quote is valid until.
- `invoice_id`: ObjectId, → invoice - Id of invoice created from this price quote.
- `invoice_settings.number`: Number
- `invoice_settings.price_quote_number`: String
- `invoice_settings.bic`: String
- `invoice_settings.swift`: String
- `invoice_settings.tax_id`: String
- `invoice_settings.vat_id`: String
- `invoice_settings.logo`: ObjectId
- `invoice_settings.business_name`: String
- `invoice_settings.business_name_translated`: String
- `invoice_settings.responsible_official`: String
- `invoice_settings.responsible_official_translated`: String
- `invoice_settings.business_email`: String
- `invoice_settings.company_id`: String
- `invoice_settings.business_address`: String
- `invoice_settings.business_address_translated`: String
- `invoice_settings.business_phone_number`: String
- `invoice_settings.business_country`: String
- `invoice_settings.business_country_translated`: String
- `invoice_settings.footer`: String
- `invoice_settings.footer_translated`: String
- `invoice_settings.foreign_tax`: Number, default 0
- `invoice_settings.home_tax`: Number, default 0
- `invoice_settings.currency_symbol`: String
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### Product

An item the store sells, with its price, images, options and delivery details.

- `name`: String, required - Name of product.
- `url`: String, required - Generated from name, no need to set it manually.
- `static_url`: String - A fixed address kept when the url changes, so old links keep working.
- `ribbon`: String - Short label shown on the product's card, e.g. "New" or "-20%".
- `striked`: String - The old price, shown crossed out next to price: for a sale ("was 12, now 9") set price to 9 and striked to "12". Empty for no sale.
- `price`: Number, required - Price of the product in the site's currency.
- `description`: String - Description of product in html format.
- `product_informations`: Object[] - Extra details listed on the product page, each { name, description } ("Material": "Soy wax").
  - `name`: String, required
  - `description`: String, required
  - `_id`: ObjectId
- `product_options`: Object[] - The choices a buyer makes (Size, Colour): each { name, options: [{ option }] }. An option's text may carry a price change in brackets, "Large (+5)", added to price. Changing the options rebuilds the product's stock lines.
  - `name`: String, required
  - `options`: Object[]
    - `option`: String, required
    - `match_to_collection`: ObjectId, → Collection
    - `quantity`: Number
    - `badge`: String
    - `option_specific_media`: ObjectId, → Media
    - `_id`: ObjectId
  - `informations`: Object[]
    - `name`: String
    - `description`: String
    - `_id`: ObjectId
  - `_id`: ObjectId
- `published`: Boolean, default true - Shown on the site. False hides it from the store and lists without deleting it.
- `available_for_purchase`: Boolean, default true - The whole product can be bought; false stops every option of it. One option sold out ("the white mug ran out") is that option's stock line: quantity 0, tracked.
- `medias`: Object[] - Array of {media}.
  - `media`: ObjectId, → Media
  - `gcs_url`: String
  - `gcs_480_30_url`: String
  - `gcs_720_30_url`: String
  - `gcs_1080_30_url`: String
  - `duration`: Number
  - `vimeo_uri`: String
  - `vimeo_picture`: String
  - `vimeo_url`: String
  - `youtube_url`: String
  - `youtube_picture`: String
  - `thumbnail`: String
  - `_id`: ObjectId
- `collection_id`: ObjectId, → Collection - Collection.id.
- `grouping`: Object[] - The grouping/ filters it appears under inside its category: each { collection_id }.
  - `collection_id`: ObjectId, → Collection
  - `_id`: ObjectId
- `owner_id`: ObjectId, required, → User - User.id.
- `connected_account_owner_id`: ObjectId, → User - User.id.
- `qty`: Number, default 1 - Not the stock: nothing reads it as stock. Stock is kept per option in stock lines (Inventory): read GET /inventory/:product_id/:option, set it with PATCH /inventory/:id {quantity}.
- `origin_address`: String - Name of the address, taken from OriginAdress model, used for filtering.
- `selected`: Boolean, default false - Featured: the home page's highlighted products block shows these first.
- `custom_1`: String - Custom defined field 1.
- `custom_2`: String - Custom defined field 2.
- `custom_3`: String - Custom defined field 3.
- `about_page`: ObjectId, → AboutPage - Reference to AboutPage model, shown in product page.
- `is_digital`: Boolean, default false - Delivered as a download, not shipped.
- `digital_contents`: Object[] - The files a buyer gets.
  - `content`: ObjectId, → DigitalContent
  - `option`: String
  - `_id`: ObjectId
- `suitability_price_plans`: ObjectId[], → PricePlan - PricePlan ids: a signed-in user with one of them sees the product as suitable (isSuitable).
- `isSuitable`: Boolean - Set per request, not stored: whether the signed-in user's price plans match the product's suitability plans.
- `brand`: String - Name of the product brand.
- `brand_logo`: ObjectId, → Media - Logo of the brand, reference to Media model.
- `weight`: Number, default 0 - Weight of the product in kg, for delivery.
- `height`: Number, default 0 - Height of the product in cm, for delivery.
- `length`: Number, default 0 - Length of the product in cm, for delivery.
- `width`: Number, default 0 - Width of the product in cm, for delivery.
- `delivery_type`: String, default "parcel" - Used for delivery, default is parcel, allowed values are books, bulk, letter, parcel or parcel_letter.
- `reference_id`: String - Id of the record it was made from (an import or a clone).
- `secondary_cta.show`: Boolean, default false
- `secondary_cta.title`: String
- `secondary_cta.webUrl`: String
- `secondary_cta.appUrl`: String
- `wildcard_url`: Mixed - The wildcard route the product answers on, when it has one.
- `sku`: Mixed - Stock keeping unit code, when the product has one.
- `reviewed`: Boolean - A moderator reviewed it (marketplace).
- `approved`: Boolean - Approved to be listed (marketplace).
- `expired`: Boolean, default false - Past expires_on and no longer listed.
- `expires_on`: Date - When the listing expires.
- `expire_reminder_sent`: Boolean, default false - The owner was reminded it expires.
- `likes`: ObjectId[], → User - User ids.
- `views`: ObjectId[], → User - User ids.
- `total_views`: Number, default 0 - How many times it was opened.
- `saves`: ObjectId[], → User - User ids.
- `times_showed`: Number, default 0 - How many times it was shown in a list.
- `requiresLogin`: Boolean, default false - Only signed-in users can see it.
- `requiresSubscription`: Boolean, default false - Only subscribers can see it.
- `price_plan_ids`: String[] - Reference to PricePlan ids.
- `linked_products`: Object[] - List of products that are shown for quick add to cart in the product page.
  - `product`: ObjectId, → Product
  - `option`: String
  - `_id`: ObjectId
- `attached_priceplans.name`: String
- `attached_priceplans.priceplans`: ObjectId[], → PricePlan
- `about_section`: ObjectId, → AboutPage - Reference to AboutPage model, shown below the add to cart button.
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### Program

An online course: weeks of days, each day a list of steps.

- `title`: String - Name of the program, required.
- `url`: String, required - Generated from title, no need to set it manually.
- `static_url`: String - A fixed address kept when the url changes.
- `header`: String - Short tagline or subtitle shown in listings, optional.
- `body`: String - Full program description in HTML format, optional.
- `medias`: Object[] - The program's pictures.
  - `media`: ObjectId, → Media
  - `gcs_url`: String
  - `gcs_480_30_url`: String
  - `gcs_720_30_url`: String
  - `gcs_1080_30_url`: String
  - `duration`: Number
  - `vimeo_uri`: String
  - `vimeo_picture`: String
  - `vimeo_url`: String
  - `youtube_url`: String
  - `youtube_picture`: String
  - `thumbnail`: String
  - `_id`: ObjectId
- `video`: ObjectId, → Video - Video.id.
- `about_page`: ObjectId, → AboutPage - AboutPage.id.
- `weeks`: Object[] - A list of week objects, required.
  - `isCompleted`: Mixed
  - `progress`: Mixed
  - `title`: String
  - `days`: Object[]
    - `isCompleted`: Mixed
    - `progress`: Mixed
    - `title`: String
    - `steps`: Object[]
      - `title`: String, required
      - `body`: String, required
      - `video`: ObjectId, → Video
      - `medias`: Object[]
      - `about_page`: ObjectId, → AboutPage
      - `timer`: Number, default 0
      - `_id`: ObjectId
    - `_id`: ObjectId
  - `_id`: ObjectId
- `suitability_price_plans`: ObjectId[], → PricePlan - A list of PricePlan ids, marks program as suitable for users with those plans.
- `isSuitable`: Boolean - Set per request, not stored: whether the signed-in user's price plans match the program's suitability plans.
- `popup.title`: String
- `popup.points`: String[]
- `price`: Number, default 0 - Price in the user's currency, default 0.
- `collection_id`: ObjectId, → Collection - Reference to a Collection with name starting with 'program-category/', required.
- `topics`: Object[] - Topics it covers.
  - `collection_id`: ObjectId, → Collection
  - `_id`: ObjectId
- `owner_id`: ObjectId, required, → User - User.id.
- `connected_account_owner_id`: ObjectId, → User - User.id.
- `ribbon`: String - Short badge text shown on the card (e.g. "New", "Best seller"), optional.
- `striked`: String - Original price shown as strikethrough next to the real price, optional.
- `isConsistent`: Boolean, default false - Every week has the same structure.
- `isAcademic`: Boolean, default true - Free-order course, not weeks and days: progress is not tied to a week and day.
- `wildcard_url`: Mixed - The wildcard route it answers on, when it has one.
- `reviewed`: Boolean - A moderator reviewed it.
- `approved`: Boolean - Approved to be listed.
- `likes`: ObjectId[], → User - User ids.
- `views`: ObjectId[], → User - User ids.
- `total_views`: Number, default 0 - How many times it was opened.
- `saves`: ObjectId[], → User - User ids.
- `requiresLogin`: Boolean, default false - Only signed-in users can see it.
- `requiresSubscription`: Boolean, default false - Only subscribers can see it.
- `price_plan_ids`: String[] - A list of price plan id strings that grant access to this program.
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### QrCode

- `ticket`: ObjectId, required, → Ticket - Ticket.id.
- `status`: String, one of used | not-used, default "not-used" - One of: used, not-used.
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### Rating

- `email`: String, required - Email of who rated.
- `text`: String - The review's text.
- `medias`: Object[] - Pictures added to the review.
  - `media`: ObjectId, → Media
  - `_id`: ObjectId
- `stars`: Number, required - Rating from 1 to 5.
- `product`: ObjectId, → Product - Product.id.
- `service`: ObjectId, → Service - Service.id.
- `program`: ObjectId, → Program - Program.id.
- `price_plan`: ObjectId, → PricePlan - PricePlan.id.
- `name`: String - Name of who rated.
- `miniapp`: ObjectId, → MiniApp - MiniApp.id.
- `staff_member`: ObjectId, → User - User.id.
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### RatingSettings

Whether and when customers are asked to rate products, services and programs.

- `type`: String, required - Product,service, program, priceplan.
- `send`: Boolean, default false - Rating emails are sent after orders and bookings.
- `days`: Number, required - Days after the order or booking the rating email is sent.
- `title`: String, required - Heading of the rating email.
- `text1`: String, required - Main text of the rating email.
- `text2`: String - Extra text of the rating email.
- `useCustomLink`: Boolean, default false - The email links to customLinkUrl (e.g. a Google review page) instead of the site's form.
- `customLinkUrl`: String - Where the email's link leads when useCustomLink is set.
- `linkText`: String - Text of the email's link.
- `startDate`: Date, required - Orders and bookings from this date on get the email.
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### ReceiptAdjustment

- `about_page`: ObjectId, → AboutPage - AboutPage.id.
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### Shipping

- `region`: String, required - The region this delivery setting is for.
- `has_store_pickup`: Boolean, default false - Customers can pick the order up at the pickup point instead of having it delivered.
- `pickup_title`: String - Name of the pickup point.
- `pickup_address`: String - Address of the pickup point.
- `pickup_available`: String - When pickup is possible.
- `pickup_instructions`: String - What customers should know about pickup.
- `delivery`: Object[] - The delivery options offered in this region, each { name, estimated_delivery_time, fixed_rate (its price), has_free_delivery, free_delivery_requirement }. Free delivery over an amount: has_free_delivery true and free_delivery_requirement the minimum order total (threshold) above which it costs nothing. Send the whole list: it replaces the old one.
  - `name`: String
  - `estimated_delivery_time`: String
  - `fixed_rate`: Number
  - `rate_per_total`: Number
  - `rate_per_unit`: Number
  - `has_free_delivery`: Boolean, default false
  - `free_delivery_requirement`: Number, default 0
  - `delivery_days`: Number, default 3
  - `hasIntegration`: Boolean, default true
  - `has_time_window`: Boolean, default false
  - `available_from`: String
  - `available_to`: String
  - `timezone`: String
  - `_id`: ObjectId
- `owner_id`: ObjectId, required, → User - User.id.
- `connected_account_owner_id`: ObjectId, → User - User.id.
- `min_order_value`: Number, default 0 - Smallest order delivery is offered for.
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### SocialModeSettings

The switches for the site's social app features: feed, posts, groups, chat, marketplace.

- `social_mode`: Boolean, default false - The site runs as a social network (feed, profiles).
- `allow_products`: Boolean, default false - Users can sell products.
- `allow_services`: Boolean, default false - Users can offer services.
- `allow_services_stp`: Boolean, default false - Users can take service payments themselves.
- `allow_blogposts`: Boolean, default false - Users can write blog posts.
- `allow_programs`: Boolean, default false - Users can sell programs.
- `allow_programs_stp`: Boolean, default false - Users can take program payments themselves.
- `allow_posts`: Boolean, default false - Users can post to the feed.
- `allow_ai`: Boolean, default false - AI features are on for users.
- `allow_bites`: Boolean, default false - Short videos are on.
- `allow_long_videos`: Boolean, default false - Long videos are on.
- `allow_explore`: Boolean, default false - The explore page is on.
- `allow_online_payments`: Boolean, default false - Users can take online payments.
- `allow_price_plans`: Boolean, default false - Users can sell subscriptions.
- `allow_boosting_posts`: Boolean, default false - Users can pay to boost posts.
- `allow_single_ai`: Boolean, default false - Users get the single-chat AI.
- `merchant_agreement`: ObjectId, → AboutPage - AboutPage.id.
- `verification_popup`: ObjectId, → AboutPage - AboutPage.id.
- `commission`: Number - Platform commission on users' sales, in percent.
- `home_page`: String, default "home" - What opens first (feed, store, about page...).
- `navigation_pages.bites`: Boolean, default true
- `navigation_pages.long_videos`: Boolean, default true
- `navigation_pages.vouchers`: Boolean, default true
- `navigation_pages.store`: Boolean, default true
- `navigation_pages.programs`: Boolean, default true
- `navigation_pages.services`: Boolean, default true
- `navigation_pages.blogposts`: Boolean, default true
- `navigation_pages.subscription`: Boolean, default true
- `navigation_pages.playlists`: Boolean, default true
- `navigation_pages.partners`: Boolean, default true
- `navigation_pages.contacts`: Boolean, default true
- `navigation_pages.tracker`: Boolean, default true
- `navigation_pages.more`: Boolean, default true
- `navigation_pages.claims`: Boolean, default true
- `navigation_pages.miniapps`: Boolean, default false
- `navigation_pages.events`: Boolean, default false
- `navigation_pages.professional_pages`: Boolean, default false
- `allow_google_login`: Boolean, default true - Sign in with Google is on.
- `use_cdn_for_medias`: Boolean, default false - Pictures and videos load from cdn_for_medias.
- `cdn_for_medias`: String - CDN address for media.
- `use_cdn_for_microservices`: Boolean, default false - Microservices are called through cdn_for_microservices.
- `cdn_for_microservices`: String - CDN address for microservices.
- `cdn_for_sockets`: String - Address of the socket server.
- `paywall.store.has_paywall`: Boolean, default false
- `paywall.store.priceplans`: ObjectId[], → PricePlan
- `paywall.programs.has_paywall`: Boolean, default false
- `paywall.programs.priceplans`: ObjectId[], → PricePlan
- `paywall.services.has_paywall`: Boolean, default false
- `paywall.services.priceplans`: ObjectId[], → PricePlan
- `paywall.blogposts.has_paywall`: Boolean, default false
- `paywall.blogposts.priceplans`: ObjectId[], → PricePlan
- `paywall.subscription.has_paywall`: Boolean, default false
- `paywall.subscription.priceplans`: ObjectId[], → PricePlan
- `paywall.post.has_paywall`: Boolean, default false
- `paywall.post.priceplans`: ObjectId[], → PricePlan
- `paywall.groups.has_paywall`: Boolean, default false
- `paywall.groups.priceplans`: ObjectId[], → PricePlan
- `paywall.professional_pages.has_paywall`: Boolean, default false
- `paywall.professional_pages.priceplans`: ObjectId[], → PricePlan
- `allow_chat`: Boolean, default true - Users can message each other.
- `allow_in_app_notifications`: Boolean, default true - In-app notifications are on.
- `dashboard_pages.following`: Boolean, default true
- `dashboard_pages.recent`: Boolean, default true
- `dashboard_pages.threads`: Boolean, default true
- `dashboard_pages.long_videos`: Boolean, default true
- `dashboard_pages.groups`: Boolean, default true
- `dashboard_pages.about_pages`: Boolean, default true
- `dashboard_pages.mini_apps`: Boolean, default true
- `dashboard_pages.blogposts`: Boolean, default true
- `dashboard_pages.products`: Boolean, default true
- `dashboard_pages.services`: Boolean, default true
- `dashboard_pages.price_plans`: Boolean, default true
- `dashboard_pages.programs`: Boolean, default true
- `dashboard_pages.claims`: Boolean, default true
- `dashboard_pages.bites`: Boolean, default true
- `dashboard_pages.playlists`: Boolean, default true
- `dashboard_pages.partners`: Boolean, default true
- `dashboard_pages.contacts`: Boolean, default true
- `dashboard_pages.tracker`: Boolean, default true
- `dashboard_pages.vouchers`: Boolean, default true
- `dashboard_pages.explore`: Boolean, default true
- `feed_menus`: String, default "grid" - Grid, row.
- `allow_miniapps`: Boolean, default false - Mini apps are on.
- `about_pages.groups`: ObjectId, → AboutPage
- `user_groups`: Boolean, default true - Users can create groups.
- `allow_professional_pages`: Boolean, default false - Professional accounts get their own pages.
- `allow_professional_account_registration`: Boolean, default false - Users can apply for a professional account.
- `locations_map.enabled`: Boolean, default false
- `use_companion_bookings`: Boolean, default false - Bookings are handled by the companion app.
- `confirm_bookings_call`: Boolean, default false - The AI phone agent calls to confirm bookings.
- `require_professional_account.services`: Boolean, default false
- `require_professional_account.products`: Boolean, default false
- `require_professional_account.programs`: Boolean, default false
- `require_professional_account.blogposts`: Boolean, default false
- `require_professional_account.subscriptions`: Boolean, default false
- `hide_feed_menus`: Boolean, default false - Feed menus are hidden.
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### SpeedySettings

- `shipping`: ObjectId, → Shipping - Shipping.id.
- `create_label`: Boolean, default false - Shipments are created at Speedy automatically when an order is placed.
- `username`: String - Speedy account username.
- `account_id`: String - The Speedy client contract shipments are sent under.
- `owner_id`: ObjectId, required, → User - User.id.
- `connected_account_owner_id`: ObjectId, → User - User.id.
- `from_office`: Boolean, default false - Shipments leave from a Speedy office; false: picked up from the sender's door.
- `address.countryId`: Number
- `address.country`: String
- `address.stateId`: String
- `address.siteId`: String
- `address.postCode`: String
- `address.streetName`: String
- `address.streetNo`: String
- `address.blockNo`: String
- `address.entranceNo`: String
- `address.floorNo`: String
- `address.apartmentNo`: String
- `address.complexName`: String
- `address.fullAddressString`: String
- `office.code`: String
- `office.name`: String
- `contactName`: String - Sender's name on shipments.
- `services.abroad`: String
- `services.local`: String
- `multiple_items`: String, one of box | sum, default "sum" - One of: box, sum.
- `divide_by`: Number - When several items are summed into one parcel, their added dimensions are divided by this to estimate it.
- `box`: Object[] - Box sizes the business ships in.
  - `height`: Number
  - `length`: Number
  - `width`: Number
  - `_id`: ObjectId
- `payAfterAccept`: Boolean, default false - Customers may inspect the parcel before paying.
- `returnShipmentServiceId`: String - Speedy service used for returns.
- `returnShipmentPayer`: String, one of SENDER | RECIPIENT | THIRD_PARTY - One of: SENDER, RECIPIENT, THIRD_PARTY.
- `bank_transfer_payment`: Boolean, default false - Cash on delivery is paid to the business by bank transfer.
- `senderBankAccount.accountHolder`: String
- `product_default_dimensions.height`: Number
- `product_default_dimensions.width`: Number
- `product_default_dimensions.length`: Number
- `product_default_dimensions.weight`: Number
- `cash_receipt`: Boolean, default false - Speedy issues the fiscal receipt for cash on delivery.
- `cash_vat_group`: String - VAT group printed on those receipts.
- `_id`: ObjectId

### Tax

- `country`: String, required - Country to apply the tax rate.
- `tax_rate`: Number, required - Tax rate.
- `apply_to_shipping`: Boolean, default false - Tax rate.
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### Theme

The site's colours, fonts and app tabs.

- `primary`: String, default "#3880ff" - Primary color.
- `primary_darkmode`: String, default "#3880ff" - Primary colour in dark mode.
- `secondary`: String, default "#0cd1e8" - Secondary color.
- `tertiary`: String, default "#7044ff" - Tertiary color.
- `success`: String, default "#10dc60" - Success color.
- `warning`: String, default "#ffce00" - Warning color.
- `danger`: String, default "#f04141" - Danger color.
- `dark`: String, default "#222428" - Dark color.
- `dark_darkmode`: String, default "#222428" - Dark colour in dark mode.
- `medium`: String, default "#989aa2" - Medium color.
- `light`: String, default "#f4f5f8" - Light color.
- `light_darkmode`: String, default "#f4f5f8" - Light colour in dark mode.
- `lightContrast`: String, default "#000000" - Text colour on light backgrounds.
- `lightContrast_darkmode`: String, default "#f4f5f8" - The same in dark mode.
- `headerA`: String, default "#f4f5f8" - Header A color.
- `headerB`: String, default "#f4f5f8" - Header B color.
- `headerA_darkmode`: String, default "#f4f5f8" - Header gradient start in dark mode.
- `headerB_darkmode`: String, default "#f4f5f8" - Header gradient end in dark mode.
- `headerText`: String - Header text colour.
- `headerText_darkmode`: String - Header text colour in dark mode.
- `headerGradientDeg`: Number, default 0 - Angle of the header gradient, in degrees.
- `footerA`: String, default "#222428" - Footer A color.
- `footerB`: String, default "#222428" - Footer B color.
- `footerA_darkmode`: String, default "#222428" - Footer gradient start in dark mode.
- `footerB_darkmode`: String, default "#222428" - Footer gradient end in dark mode.
- `footerGradientDeg`: Number, default 0 - Angle of the footer gradient, in degrees.
- `footerText`: String - Footer text colour.
- `footerText_darkmode`: String - Footer text colour in dark mode.
- `headingFontFamily`: String, default "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif" - Heading Font-Family.
- `headingFontLink`: String, default "" - Stylesheet URL that loads the heading font; empty when the font needs no webfont.
- `headingFontWeight`: String, default "400" - Weight of heading text.
- `headingFontStyle`: String, default "normal" - Style of heading text (normal, italic).
- `bodyFontFamily`: String, default "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif" - Body Font-Family.
- `bodyFontStyle`: String, default "normal" - Style of body text.
- `bodyFontLink`: String, default "" - Stylesheet URL that loads the body font; empty when the font needs no webfont.
- `primary_contrast`: String, default "#3880ff" - Primary contrast color.
- `primary_contrast_darkmode`: String, default "#3880ff" - Text colour on the primary colour in dark mode.
- `headerMinHeight`: String, default "5rem" - Header min-height.
- `product.title`: String, default "right"
- `product.gallery`: String, default "left"
- `product.galleryType`: String, default "gallery"
- `product.options`: String, default "right"
- `product.infos`: String, default "right"
- `product.infosShow`: Boolean, default false
- `product.description`: String, default "left"
- `product.cartBtn`: String, default "default"
- `product.comments`: Boolean, default true
- `product.sku`: Boolean, default true
- `product.brand`: Boolean, default false
- `product.cardDesign`: String, default "item-card-design-1"
- `product.likes`: Boolean, default true
- `product.rating`: Boolean, default false
- `product.titleColor`: String
- `product.priceColor`: String
- `product.descriptionColor`: String
- `product.borderRadius`: String
- `product.titleFontSize`: String
- `product.descriptionFontSize`: String
- `product.priceFontSize`: String
- `product.titleFontWeight`: String
- `product.descriptionFontWeight`: String
- `product.priceFontWeight`: String
- `product.cardBorderRadius`: String
- `product.cardBorderWidth`: String
- `product.cardBorderColor`: String
- `product.cardBackgroundColor`: String
- `product.imageAspectRatio`: String
- `product.ratingList`: Boolean, default false
- `product.customCss`: String
- `product.scroll_next`: Boolean, default false
- `product.ratingBackgroundColor`: String
- `product.quantity_counter`: Object[]
  - `enabled`: Boolean, default false
  - `max_value`: Number
  - `min_value`: Number
  - `linked_inventory`: Boolean
  - `current_value`: Number
  - `product`: ObjectId, → Product
  - `last_updated`: Date
  - `_id`: ObjectId
- `product.view_counter`: Boolean, default false
- `product.contactInfo`: Boolean, default true
- `product.cartBanner`: Boolean, default false
- `product.navigation`: Boolean, default true
- `product.price`: String, default "top"
- `product.optionsColor`: String
- `product.optionsBackground`: String
- `product.optionsFontSize`: String
- `product.optionsFontWeight`: String
- `product.optionsColorSelected`: String
- `product.optionsBackgroundSelected`: String
- `product.viewMultiplier`: Number, default 1
- `product.cartColor`: String
- `product.cartBackground`: String
- `product.cartFontSize`: String
- `product.cartFontWeight`: String
- `product.ctaColor`: String
- `product.ctaBorderColor`: String
- `product.ctaFontSize`: String
- `product.ctaFontWeight`: String
- `product.selectOption`: Boolean, default false
- `product.skin`: String
- `product.mode`: String
- `product.accentColor`: String
- `product.fieldBackground`: String
- `product.imageRadius`: Number
- `product.titleFontFamily`: String
- `product.titleTransform`: String
- `product.priceFontFamily`: String
- `product.priceFontStyle`: String
- `product.buttonRadius`: Number
- `product.hairlineWidth`: Number
- `product.hairlineColor`: String
- `product.boxShadowColor`: String
- `product.boxShadowOffsetX`: Number
- `product.boxShadowOffsetY`: Number
- `product.boxShadowBlurRadius`: Number
- `product.boxShadowSpreadRadius`: Number
- `product.chipBackground`: String
- `product.chipBorderColor`: String
- `product.chipTextColor`: String
- `service.title`: String, default "left"
- `service.gallery`: String, default "left"
- `service.galleryType`: String, default "gallery"
- `service.options`: String, default "right"
- `service.infos`: String, default "right"
- `service.description`: String, default "left"
- `service.comments`: Boolean, default true
- `service.cardDesign`: String, default "item-card-design-1"
- `service.likes`: Boolean, default true
- `service.rating`: Boolean, default false
- `service.titleColor`: String
- `service.priceColor`: String
- `service.descriptionColor`: String
- `service.borderRadius`: String
- `service.titleFontSize`: String
- `service.descriptionFontSize`: String
- `service.priceFontSize`: String
- `service.titleFontWeight`: String
- `service.descriptionFontWeight`: String
- `service.priceFontWeight`: String
- `service.cardBorderRadius`: String
- `service.cardBorderWidth`: String
- `service.cardBorderColor`: String
- `service.cardBackgroundColor`: String
- `service.imageAspectRatio`: String
- `service.ratingList`: Boolean, default false
- `service.customCss`: String
- `service.calendarColor`: String
- `service.dateBackground`: String
- `service.dateTextColor`: String
- `service.skin`: String
- `service.mode`: String
- `service.accentColor`: String
- `service.fieldBackground`: String
- `service.imageRadius`: Number
- `service.buttonRadius`: Number
- `service.titleFontFamily`: String
- `service.titleTransform`: String
- `service.priceFontFamily`: String
- `service.priceFontStyle`: String
- `service.hairlineWidth`: Number
- `service.hairlineColor`: String
- `service.boxShadowColor`: String
- `service.boxShadowOffsetX`: Number
- `service.boxShadowOffsetY`: Number
- `service.boxShadowBlurRadius`: Number
- `service.boxShadowSpreadRadius`: Number
- `service.chipBackground`: String
- `service.chipBorderColor`: String
- `service.chipTextColor`: String
- `service.hideContactInfo`: Boolean
- `blogpost.title`: String, default "right"
- `blogpost.gallery`: String, default "left"
- `blogpost.galleryType`: String, default "gallery"
- `blogpost.description`: String, default "right"
- `blogpost.comments`: Boolean, default true
- `blogpost.cardDesign`: String, default "item-card-design-1"
- `blogpost.likes`: Boolean, default true
- `blogpost.titleColor`: String
- `blogpost.descriptionColor`: String
- `blogpost.borderRadius`: String
- `blogpost.titleFontSize`: String
- `blogpost.descriptionFontSize`: String
- `blogpost.titleFontWeight`: String
- `blogpost.descriptionFontWeight`: String
- `blogpost.cardBorderRadius`: String
- `blogpost.cardBorderWidth`: String
- `blogpost.cardBorderColor`: String
- `blogpost.cardBackgroundColor`: String
- `blogpost.imageAspectRatio`: String
- `blogpost.customCss`: String
- `blogpost.scroll_next`: Boolean, default false
- `blogpost.galleryPosition`: String, default "bottom"
- `blogpost.contactInfo`: Boolean, default true
- `blogpost.bodyFontSize`: String
- `blogpost.bodyFontWeight`: String
- `blogpost.bodyColor`: String
- `blogpost.skin`: String
- `blogpost.mode`: String
- `blogpost.accentColor`: String
- `blogpost.fieldBackground`: String
- `blogpost.imageRadius`: Number
- `blogpost.buttonRadius`: Number
- `blogpost.titleFontFamily`: String
- `blogpost.titleTransform`: String
- `blogpost.hairlineWidth`: Number
- `blogpost.hairlineColor`: String
- `blogpost.boxShadowColor`: String
- `blogpost.boxShadowOffsetX`: Number
- `blogpost.boxShadowOffsetY`: Number
- `blogpost.boxShadowBlurRadius`: Number
- `blogpost.boxShadowSpreadRadius`: Number
- `blogpost.chipBackground`: String
- `blogpost.chipBorderColor`: String
- `blogpost.chipTextColor`: String
- `blogpost.showDate`: Boolean, default false
- `blogpost.dateColor`: String
- `blogpost.dateFontSize`: Number
- `blogpost.dateFontWeight`: String
- `blogpost.dateFontFamily`: String
- `blogpost.dateFontStyle`: String
- `products.gridStyle`: String, default "column"
- `products.align`: String, default "left"
- `products.title`: String, default "bottom"
- `products.image`: String, default "right"
- `products.filters`: String, default "left"
- `products.description`: Boolean, default false
- `products.transparent`: Boolean, default false
- `products.price`: Boolean, default true
- `products.showFilters`: Boolean, default true
- `products.showBanner`: Boolean, default true
- `products.animation`: String, default "none"
- `products.animationDuration`: Number, default 0
- `products.animationDelay`: Number, default 0
- `products.titleColor`: String
- `products.priceColor`: String
- `products.descriptionColor`: String
- `products.borderRadius`: String
- `products.titleFontSize`: String
- `products.descriptionFontSize`: String
- `products.priceFontSize`: String
- `products.titleFontWeight`: String
- `products.descriptionFontWeight`: String
- `products.priceFontWeight`: String
- `products.cardBorderRadius`: String
- `products.cardBorderWidth`: String
- `products.cardBorderColor`: String
- `products.cardBackgroundColor`: String
- `products.imageAspectRatio`: String
- `products.customCss`: String
- `products.filtersBackgroundColor`: String
- `products.filtersTextColor`: String
- `products.filtersBorderRadius`: String
- `products.filtersCardDesign`: String, default "default"
- `products.boxShadowColor`: String
- `products.boxShadowOffsetX`: Number, default 0
- `products.boxShadowOffsetY`: Number, default 0
- `products.boxShadowBlurRadius`: String
- `products.boxShadowSpreadRadius`: String
- `products.hideOriginAddress`: Boolean, default false
- `products.categories.layout`: String, one of list | columns, default "list"
- `products.categories.showHeading`: Boolean, default true
- `products.categories.showSubtitle`: Boolean, default true
- `products.categories.showImage`: Boolean, default false
- `products.categories.imageSize`: String, default "50px"
- `products.categories.imageRadius`: String
- `products.categories.imageAspectRatio`: String, default "1/1"
- `products.categories.imageFit`: String, one of cover | contain, default "cover"
- `products.categories.imagePadding`: Number, default 0
- `products.categories.fallback`: String, one of initial | color | none, default "initial"
- `products.categories.showChevron`: Boolean, default true
- `products.categories.titleColor`: String
- `products.categories.titleFontSize`: String
- `products.categories.titleFontWeight`: String
- `products.categories.cardBackgroundColor`: String
- `products.categories.cardBorderRadius`: String
- `products.categories.cardBorderWidth`: String
- `products.categories.cardBorderColor`: String
- `products.categories.customCss`: String
- `products.categories.site.showImage`: Boolean, default true
- `products.categories.site.imageSize`: String
- `products.categories.site.imageAspectRatio`: String
- `products.categories.site.titleColor`: String
- `products.categories.site.titleFontSize`: String
- `products.categories.site.titleFontWeight`: String
- `products.categories.site.cardBackgroundColor`: String
- `products.categories.site.cardBorderRadius`: String
- `products.categories.site.cardBorderWidth`: String
- `products.categories.site.cardBorderColor`: String
- `products.categories.site.cardPadding`: String
- `products.categories.site.gap`: String
- `products.categories.site.align`: String, one of left | center | right
- `products.categories.site.titleTransform`: String, one of uppercase | lowercase | capitalize
- `products.hideRibbon`: Boolean, default false
- `products.hideCustomFields`: Boolean, default false
- `products.showLink`: Boolean, default false
- `products.linkLabel`: String
- `products.imageObjectFit`: String
- `products.imageRadius`: Number
- `products.cardPaddingX`: Number
- `products.cardPaddingY`: Number
- `products.titleTransform`: String
- `products.priceFontStyle`: String
- `products.fieldBackground`: String
- `products.showRating`: Boolean
- `products.gap`: Number
- `products.titleFontFamily`: String
- `products.priceFontFamily`: String
- `products.mode`: String
- `products.hairlineWidth`: Number
- `products.hairlineColor`: String
- `products.scrimGradient`: String
- `products.skin`: String
- `products.columns`: Number
- `products.columnsMobile`: Number
- `products.accentColor`: String
- `products.filtersSkin`: String
- `products.filtersAccentColor`: String
- `products.filtersHeadingFontFamily`: String
- `products.filtersHeadingTransform`: String
- `products.filtersBorderWidth`: Number
- `products.filtersBorderColor`: String
- `products.filtersPanelBackground`: String
- `products.filtersBoxShadowColor`: String
- `products.filtersBoxShadowOffsetX`: Number
- `products.filtersBoxShadowOffsetY`: Number
- `products.filtersBoxShadowBlurRadius`: Number
- `products.filtersBoxShadowSpreadRadius`: Number
- `products.showViews`: Boolean, default false
- `products.viewsColor`: String
- `services.gridStyle`: String, default "column"
- `services.align`: String, default "left"
- `services.title`: String, default "bottom"
- `services.image`: String, default "right"
- `services.filters`: String, default "left"
- `services.description`: Boolean, default false
- `services.transparent`: Boolean, default false
- `services.price`: Boolean, default true
- `services.showFilters`: Boolean, default true
- `services.showCategoryFilters`: Boolean, default true
- `services.showBanner`: Boolean, default true
- `services.animation`: String, default "none"
- `services.animationDuration`: Number, default 0
- `services.animationDelay`: Number, default 0
- `services.rating`: Boolean, default false
- `services.titleColor`: String
- `services.priceColor`: String
- `services.descriptionColor`: String
- `services.borderRadius`: String
- `services.titleFontSize`: String
- `services.descriptionFontSize`: String
- `services.priceFontSize`: String
- `services.titleFontWeight`: String
- `services.descriptionFontWeight`: String
- `services.priceFontWeight`: String
- `services.cardBorderRadius`: String
- `services.cardBorderWidth`: String
- `services.cardBorderColor`: String
- `services.cardBackgroundColor`: String
- `services.imageAspectRatio`: String
- `services.customCss`: String
- `services.filtersBackgroundColor`: String
- `services.filtersTextColor`: String
- `services.filtersBorderRadius`: String
- `services.boxShadowColor`: String
- `services.boxShadowOffsetX`: Number, default 0
- `services.boxShadowOffsetY`: Number, default 0
- `services.boxShadowBlurRadius`: String
- `services.boxShadowSpreadRadius`: String
- `services.showBreadCrumbs`: Boolean, default true
- `services.imagePadding`: Number, default 0
- `services.categories.layout`: String, one of list | columns, default "list"
- `services.categories.showHeading`: Boolean, default true
- `services.categories.showSubtitle`: Boolean, default true
- `services.categories.showImage`: Boolean, default false
- `services.categories.imageSize`: String, default "50px"
- `services.categories.imageRadius`: String
- `services.categories.imageAspectRatio`: String, default "1/1"
- `services.categories.imageFit`: String, one of cover | contain, default "cover"
- `services.categories.imagePadding`: Number, default 0
- `services.categories.fallback`: String, one of initial | color | none, default "initial"
- `services.categories.showChevron`: Boolean, default true
- `services.categories.titleColor`: String
- `services.categories.titleFontSize`: String
- `services.categories.titleFontWeight`: String
- `services.categories.cardBackgroundColor`: String
- `services.categories.cardBorderRadius`: String
- `services.categories.cardBorderWidth`: String
- `services.categories.cardBorderColor`: String
- `services.categories.customCss`: String
- `services.categories.site.showImage`: Boolean, default true
- `services.categories.site.imageSize`: String
- `services.categories.site.imageAspectRatio`: String
- `services.categories.site.titleColor`: String
- `services.categories.site.titleFontSize`: String
- `services.categories.site.titleFontWeight`: String
- `services.categories.site.cardBackgroundColor`: String
- `services.categories.site.cardBorderRadius`: String
- `services.categories.site.cardBorderWidth`: String
- `services.categories.site.cardBorderColor`: String
- `services.categories.site.cardPadding`: String
- `services.categories.site.gap`: String
- `services.categories.site.align`: String, one of left | center | right
- `services.categories.site.titleTransform`: String, one of uppercase | lowercase | capitalize
- `services.titleTransform`: String
- `services.priceFontStyle`: String
- `services.cardPaddingX`: Number
- `services.cardPaddingY`: Number
- `services.fieldBackground`: String
- `services.imageObjectFit`: String
- `services.imageRadius`: Number
- `services.accentColor`: String
- `services.gap`: Number
- `services.hideCustomFields`: Boolean, default false
- `services.showDuration`: Boolean, default false
- `services.durationLabel`: String
- `services.showLink`: Boolean, default false
- `services.linkLabel`: String
- `services.titleFontFamily`: String
- `services.priceFontFamily`: String
- `services.columns`: Number
- `services.columnsMobile`: Number
- `services.skin`: String
- `services.mode`: String
- `services.hairlineWidth`: Number
- `services.hairlineColor`: String
- `services.scrimGradient`: String
- `services.filtersSkin`: String
- `services.filtersAccentColor`: String
- `services.filtersHeadingFontFamily`: String
- `services.filtersHeadingTransform`: String
- `services.filtersBorderWidth`: Number
- `services.filtersBorderColor`: String
- `services.filtersPanelBackground`: String
- `services.filtersBoxShadowColor`: String
- `services.filtersBoxShadowOffsetX`: Number
- `services.filtersBoxShadowOffsetY`: Number
- `services.filtersBoxShadowBlurRadius`: Number
- `services.filtersBoxShadowSpreadRadius`: Number
- `services.hideCalendarDuration`: Boolean, default false
- `services.calendar`: Boolean
- `services.rowRuleWidth`: Number
- `services.rowRuleColor`: String
- `services.maxWidth`: Number
- `services.showViews`: Boolean, default false
- `services.viewsColor`: String
- `blogposts.gridStyle`: String, default "row"
- `blogposts.align`: String, default "left"
- `blogposts.title`: String, default "bottom"
- `blogposts.image`: String, default "right"
- `blogposts.filters`: String, default "left"
- `blogposts.description`: Boolean, default false
- `blogposts.showFilters`: Boolean, default true
- `blogposts.header`: Boolean, default true
- `blogposts.showBanner`: Boolean, default true
- `blogposts.animation`: String, default "none"
- `blogposts.animationDuration`: Number, default 0
- `blogposts.animationDelay`: Number, default 0
- `blogposts.titleColor`: String
- `blogposts.descriptionColor`: String
- `blogposts.borderRadius`: String
- `blogposts.titleFontSize`: String
- `blogposts.descriptionFontSize`: String
- `blogposts.titleFontWeight`: String
- `blogposts.descriptionFontWeight`: String
- `blogposts.cardBorderRadius`: String
- `blogposts.cardBorderWidth`: String
- `blogposts.cardBorderColor`: String
- `blogposts.cardBackgroundColor`: String
- `blogposts.imageAspectRatio`: String
- `blogposts.customCss`: String
- `blogposts.sort`: Number, default -1
- `blogposts.showBreadCrumbs`: Boolean, default true
- `blogposts.filtersBackgroundColor`: String
- `blogposts.filtersTextColor`: String
- `blogposts.filtersBorderRadius`: String
- `blogposts.boxShadowColor`: String
- `blogposts.boxShadowOffsetX`: Number, default 0
- `blogposts.boxShadowOffsetY`: Number, default 0
- `blogposts.boxShadowBlurRadius`: String
- `blogposts.boxShadowSpreadRadius`: String
- `blogposts.imagePadding`: Number, default 0
- `blogposts.categories.layout`: String, one of list | columns, default "list"
- `blogposts.categories.showHeading`: Boolean, default true
- `blogposts.categories.showSubtitle`: Boolean, default true
- `blogposts.categories.showImage`: Boolean, default false
- `blogposts.categories.imageSize`: String, default "50px"
- `blogposts.categories.imageRadius`: String
- `blogposts.categories.imageAspectRatio`: String, default "1/1"
- `blogposts.categories.imageFit`: String, one of cover | contain, default "cover"
- `blogposts.categories.imagePadding`: Number, default 0
- `blogposts.categories.fallback`: String, one of initial | color | none, default "initial"
- `blogposts.categories.showChevron`: Boolean, default true
- `blogposts.categories.titleColor`: String
- `blogposts.categories.titleFontSize`: String
- `blogposts.categories.titleFontWeight`: String
- `blogposts.categories.cardBackgroundColor`: String
- `blogposts.categories.cardBorderRadius`: String
- `blogposts.categories.cardBorderWidth`: String
- `blogposts.categories.cardBorderColor`: String
- `blogposts.categories.customCss`: String
- `blogposts.categories.site.showImage`: Boolean, default true
- `blogposts.categories.site.imageSize`: String
- `blogposts.categories.site.imageAspectRatio`: String
- `blogposts.categories.site.titleColor`: String
- `blogposts.categories.site.titleFontSize`: String
- `blogposts.categories.site.titleFontWeight`: String
- `blogposts.categories.site.cardBackgroundColor`: String
- `blogposts.categories.site.cardBorderRadius`: String
- `blogposts.categories.site.cardBorderWidth`: String
- `blogposts.categories.site.cardBorderColor`: String
- `blogposts.categories.site.cardPadding`: String
- `blogposts.categories.site.gap`: String
- `blogposts.categories.site.align`: String, one of left | center | right
- `blogposts.categories.site.titleTransform`: String, one of uppercase | lowercase | capitalize
- `blogposts.titleTransform`: String
- `blogposts.cardPaddingX`: Number
- `blogposts.cardPaddingY`: Number
- `blogposts.fieldBackground`: String
- `blogposts.imageObjectFit`: String
- `blogposts.imageRadius`: Number
- `blogposts.accentColor`: String
- `blogposts.gap`: Number
- `blogposts.hideCustomFields`: Boolean, default false
- `blogposts.hideImage`: Boolean, default false
- `blogposts.showDate`: Boolean, default false
- `blogposts.dateColor`: String
- `blogposts.dateFontSize`: String
- `blogposts.dateFontWeight`: String
- `blogposts.dateFontFamily`: String
- `blogposts.dateFontStyle`: String
- `blogposts.hideLink`: Boolean, default false
- `blogposts.linkLabel`: String
- `blogposts.titleFontFamily`: String
- `blogposts.columns`: Number
- `blogposts.columnsMobile`: Number
- `blogposts.skin`: String
- `blogposts.mode`: String
- `blogposts.hairlineWidth`: Number
- `blogposts.hairlineColor`: String
- `blogposts.scrimGradient`: String
- `blogposts.filtersSkin`: String
- `blogposts.filtersAccentColor`: String
- `blogposts.filtersHeadingFontFamily`: String
- `blogposts.filtersHeadingTransform`: String
- `blogposts.filtersBorderWidth`: Number
- `blogposts.filtersBorderColor`: String
- `blogposts.filtersPanelBackground`: String
- `blogposts.filtersBoxShadowColor`: String
- `blogposts.filtersBoxShadowOffsetX`: Number
- `blogposts.filtersBoxShadowOffsetY`: Number
- `blogposts.filtersBoxShadowBlurRadius`: Number
- `blogposts.filtersBoxShadowSpreadRadius`: Number
- `blogposts.rowRuleWidth`: Number
- `blogposts.rowRuleColor`: String
- `blogposts.maxWidth`: Number
- `blogposts.hideCategory`: Boolean, default false
- `blogposts.showViews`: Boolean, default false
- `blogposts.viewsColor`: String
- `videos.gridStyle`: String, default "column"
- `videos.align`: String, default "center"
- `videos.title`: String, default "bottom"
- `videos.video`: String, default "right"
- `videos.filters`: String, default "left"
- `videos.showTitle`: Boolean, default true
- `videos.showFilters`: Boolean, default true
- `videos.showBanner`: Boolean, default true
- `videos.animation`: String, default "none"
- `videos.animationDuration`: Number, default 0
- `videos.animationDelay`: Number, default 0
- `videos.showBreadCrumbs`: Boolean, default true
- `program.cardDesign`: String, default "item-card-design-1"
- `program.comments`: Boolean, default true
- `program.likes`: Boolean, default true
- `program.rating`: Boolean, default false
- `program.titleColor`: String
- `program.descriptionColor`: String
- `program.borderRadius`: String
- `program.titleFontSize`: String
- `program.descriptionFontSize`: String
- `program.titleFontWeight`: String
- `program.descriptionFontWeight`: String
- `program.cardBorderRadius`: String
- `program.cardBorderWidth`: String
- `program.cardBorderColor`: String
- `program.cardBackgroundColor`: String
- `program.imageAspectRatio`: String
- `program.ratingList`: Boolean, default false
- `program.customCss`: String
- `program.showBreadCrumbs`: Boolean, default true
- `professional_account.cardDesign`: String, default "professional-account-design-1"
- `professional_account.likes`: Boolean, default true
- `professional_account.titleColor`: String
- `professional_account.priceColor`: String
- `professional_account.descriptionColor`: String
- `professional_account.borderRadius`: String
- `professional_account.titleFontSize`: String
- `professional_account.descriptionFontSize`: String
- `professional_account.priceFontSize`: String
- `professional_account.titleFontWeight`: String
- `professional_account.descriptionFontWeight`: String
- `professional_account.priceFontWeight`: String
- `professional_account.cardBorderRadius`: String
- `professional_account.cardBorderWidth`: String
- `professional_account.cardBorderColor`: String
- `professional_account.cardBackgroundColor`: String
- `professional_account.imageAspectRatio`: String
- `professional_account.ratingList`: Boolean, default false
- `professional_account.customCss`: String
- `personal_account.cardDesign`: String, default "account-design-1"
- `footer.columns`: Object[]
  - `type`: String, default "contacts"
  - `title`: String, default "Give us a call"
  - `title_href`: String, default "contacts"
  - `custom_text`: String, default "<p><a href=\"tel: +359 123321321\">tel: +359 123321321</a></p>"
  - `social_medias`: Mixed[]
  - `medias`: Object[]
    - `media`: String
    - `vimeo_uri`: String
    - `vimeo_picture`: String
    - `vimeo_url`: String
    - `youtube_url`: String
    - `_id`: ObjectId
  - `_id`: ObjectId
- `footer.about_page`: ObjectId, → AboutPage
- `footer.customCss`: String
- `header.twoRows`: Boolean, default false
- `header.sidenav`: Boolean, default false
- `header.sticky`: Boolean, default true
- `header.justifyLinks`: String, default "end"
- `header.justifyLinksMobile`: String
- `header.linkFontSize`: String, default "1.0rem"
- `header.linkFontWeight`: String, default "400"
- `header.linkFontFamily`: String
- `header.linkTextTransform`: String
- `header.linkLetterSpacing`: String
- `header.barBorderWidth`: Number
- `header.barBorderColor`: String
- `header.barFloating`: Boolean, default false
- `header.barBorderRadius`: Number
- `header.barShadow`: String
- `header.logoSize`: String, default "140px"
- `header.logoSizeMobile`: String
- `header.row1Height`: String
- `header.row2Height`: String
- `header.bannerHeight`: String
- `header.contentMaxWidth`: String
- `header.justifyLogo`: String, default "start"
- `header.userAndCartPosition`: String, default "top"
- `header.linkMargin`: String, default "0px"
- `header.about_page`: ObjectId, → AboutPage
- `header.about_page_position`: String
- `header.showSearch`: Boolean, default true
- `header.smartSearch.enabled`: Boolean, default false
- `header.smartSearch.placeholder`: String, default ""
- `header.smartSearch.kinds`: String[]
- `header.smartSearch.collections`: String[]
- `header.smartSearch.items`: Object[]
  - `kind`: String
  - `ref_id`: String
  - `title`: String
- `header.smartSearch.showKindFilter`: Boolean, default true
- `header.smartSearch.showPriceFilter`: Boolean, default false
- `header.smartSearch.showDateFilter`: Boolean, default false
- `header.smartSearch.showSort`: Boolean, default true
- `header.smartSearch.dateMode`: String, one of created | updated | availability, default "created"
- `header.smartSearch.layout`: String, one of grid | list, default "grid"
- `header.smartSearch.columns`: Number, default 3
- `header.smartSearch.perPage`: Number, default 12
- `header.smartSearch.instant`: Boolean, default true
- `header.smartSearch.showImages`: Boolean, default true
- `header.smartSearch.showPrices`: Boolean, default true
- `header.smartSearch.showInitial`: Boolean, default false
- `header.smartSearch.showAnswer`: Boolean, default false
- `header.showLogIn`: Boolean, default true
- `header.showActionButton`: Boolean, default false
- `header.actionButton.title`: String
- `header.actionButton.url`: String
- `header.actionButton.fill`: String
- `header.actionButton.color`: String
- `header.actionButton.class`: String, default "btn btn-primary"
- `header.actionButton.customColor`: String
- `header.actionButton.textColor`: String
- `header.actionButton.fontSize`: Number
- `header.actionButton.borderRadius`: String
- `header.actionButton.position`: String
- `header.showCart`: Boolean, default true
- `header.cart_position`: String
- `header.login_position`: String
- `header.search_position`: String
- `header.login_icon`: Boolean, default false
- `header.login_icon_only`: Boolean, default false
- `header.login_icon_class`: String
- `header.login_in_app`: Boolean, default false
- `header.cart_row`: String
- `header.login_row`: String
- `header.search_row`: String
- `header.pinned_links`: Object[]
  - `title`: String, required
  - `link`: String, required
  - `icon`: String, required
  - `_id`: ObjectId
- `header.customCss`: String
- `header.logoPosition`: String, default "top"
- `header.firstrow_links`: Object[]
  - `title`: String
  - `link`: String
  - `icon`: String
  - `_id`: ObjectId
- `header.firstrow_links_justify`: String, default "start"
- `header.firstrow_links_spread`: String
- `header.showBanner`: Boolean, default false
- `header.banner.items`: Object[]
  - `title`: String
  - `link`: String
  - `icon`: String
  - `img`: ObjectId, → Media
  - `_id`: ObjectId
- `header.banner.fontSize`: String, default "1.0rem"
- `header.banner.fontWeight`: String, default "400"
- `header.banner.textColor`: String
- `header.banner.backgroundColor`: String
- `header.banner.justifyContent`: String, default "start"
- `header.banner.motion`: String, one of  | scroll | rotate, default ""
- `header.banner.speed`: String, one of  | slow | fast, default ""
- `header.banner.speedLevel`: Number
- `header.banner.animation`: String, one of  | flip | zoom | spring, default ""
- `header.banner.direction`: String, one of  | right, default ""
- `header.banner.repeat`: Boolean, default false
- `header.banner.iconGap`: Number
- `header.banner.itemGap`: Number
- `header.isFullWidth`: Boolean, default true
- `header.app_user_position`: String, one of top | bottom, default "bottom"
- `header.logoMediaMobile`: ObjectId, → Media
- `header.sidenavIconBorderRadius`: String
- `header.sidenavIconBorderWidth`: String
- `header.sidenavIconColor`: String
- `header.sidenavIcon`: String
- `header.sidenavIconSize`: String
- `header.sidenavIconMedia`: ObjectId, → Media
- `header.menuIconPosition`: String
- `header.logoPositionMobile`: String
- `header.search_position_mobile`: String
- `header.login_position_mobile`: String
- `header.cart_position_mobile`: String
- `header.button_position_mobile`: String
- `header.sidenavIconAnimation`: String
- `header.sidenavIconClose`: String
- `header.sidenavIconMediaClose`: ObjectId, → Media
- `header.elements_order.logo.value`: Number
- `header.elements_order.logo.mobile_value`: Number
- `header.elements_order.nav.value`: Number
- `header.elements_order.nav.mobile_value`: Number
- `header.elements_order.firstrow.value`: Number
- `header.elements_order.firstrow.mobile_value`: Number
- `header.elements_order.search.value`: Number
- `header.elements_order.search.mobile_value`: Number
- `header.elements_order.login.value`: Number
- `header.elements_order.login.mobile_value`: Number
- `header.elements_order.cart.value`: Number
- `header.elements_order.cart.mobile_value`: Number
- `header.elements_order.button.value`: Number
- `header.elements_order.button.mobile_value`: Number
- `header.elements_order.menuicon.value`: Number
- `header.elements_order.menuicon.mobile_value`: Number
- `header.elements_style.nav.background`: String
- `header.elements_style.nav.color`: String
- `header.elements_style.nav.border_color`: String
- `header.elements_style.nav.border_width`: Number
- `header.elements_style.nav.border_radius`: Number
- `header.elements_style.nav.font_size`: Number
- `header.elements_style.nav.border_top_width`: Number
- `header.elements_style.nav.border_right_width`: Number
- `header.elements_style.nav.border_bottom_width`: Number
- `header.elements_style.nav.border_left_width`: Number
- `header.elements_style.nav_active.background`: String
- `header.elements_style.nav_active.color`: String
- `header.elements_style.nav_active.border_color`: String
- `header.elements_style.nav_active.border_width`: Number
- `header.elements_style.nav_active.border_radius`: Number
- `header.elements_style.nav_active.font_size`: Number
- `header.elements_style.nav_active.border_top_width`: Number
- `header.elements_style.nav_active.border_right_width`: Number
- `header.elements_style.nav_active.border_bottom_width`: Number
- `header.elements_style.nav_active.border_left_width`: Number
- `header.elements_style.firstrow.background`: String
- `header.elements_style.firstrow.color`: String
- `header.elements_style.firstrow.border_color`: String
- `header.elements_style.firstrow.border_width`: Number
- `header.elements_style.firstrow.border_radius`: Number
- `header.elements_style.firstrow.font_size`: Number
- `header.elements_style.firstrow.border_top_width`: Number
- `header.elements_style.firstrow.border_right_width`: Number
- `header.elements_style.firstrow.border_bottom_width`: Number
- `header.elements_style.firstrow.border_left_width`: Number
- `header.elements_style.search.background`: String
- `header.elements_style.search.color`: String
- `header.elements_style.search.border_color`: String
- `header.elements_style.search.border_width`: Number
- `header.elements_style.search.border_radius`: Number
- `header.elements_style.search.font_size`: Number
- `header.elements_style.search.border_top_width`: Number
- `header.elements_style.search.border_right_width`: Number
- `header.elements_style.search.border_bottom_width`: Number
- `header.elements_style.search.border_left_width`: Number
- `header.elements_style.login.background`: String
- `header.elements_style.login.color`: String
- `header.elements_style.login.border_color`: String
- `header.elements_style.login.border_width`: Number
- `header.elements_style.login.border_radius`: Number
- `header.elements_style.login.font_size`: Number
- `header.elements_style.login.border_top_width`: Number
- `header.elements_style.login.border_right_width`: Number
- `header.elements_style.login.border_bottom_width`: Number
- `header.elements_style.login.border_left_width`: Number
- `header.elements_style.cart.background`: String
- `header.elements_style.cart.color`: String
- `header.elements_style.cart.border_color`: String
- `header.elements_style.cart.border_width`: Number
- `header.elements_style.cart.border_radius`: Number
- `header.elements_style.cart.font_size`: Number
- `header.elements_style.cart.border_top_width`: Number
- `header.elements_style.cart.border_right_width`: Number
- `header.elements_style.cart.border_bottom_width`: Number
- `header.elements_style.cart.border_left_width`: Number
- `header.elements_spacing.logo.margin_top`: Number
- `header.elements_spacing.logo.margin_top_unit`: String
- `header.elements_spacing.logo.mobile_margin_top`: Number
- `header.elements_spacing.logo.mobile_margin_top_unit`: String
- `header.elements_spacing.logo.margin_right`: Number
- `header.elements_spacing.logo.margin_right_unit`: String
- `header.elements_spacing.logo.mobile_margin_right`: Number
- `header.elements_spacing.logo.mobile_margin_right_unit`: String
- `header.elements_spacing.logo.margin_bottom`: Number
- `header.elements_spacing.logo.margin_bottom_unit`: String
- `header.elements_spacing.logo.mobile_margin_bottom`: Number
- `header.elements_spacing.logo.mobile_margin_bottom_unit`: String
- `header.elements_spacing.logo.margin_left`: Number
- `header.elements_spacing.logo.margin_left_unit`: String
- `header.elements_spacing.logo.mobile_margin_left`: Number
- `header.elements_spacing.logo.mobile_margin_left_unit`: String
- `header.elements_spacing.nav.margin_top`: Number
- `header.elements_spacing.nav.margin_top_unit`: String
- `header.elements_spacing.nav.mobile_margin_top`: Number
- `header.elements_spacing.nav.mobile_margin_top_unit`: String
- `header.elements_spacing.nav.padding_top`: Number
- `header.elements_spacing.nav.padding_top_unit`: String
- `header.elements_spacing.nav.mobile_padding_top`: Number
- `header.elements_spacing.nav.mobile_padding_top_unit`: String
- `header.elements_spacing.nav.margin_right`: Number
- `header.elements_spacing.nav.margin_right_unit`: String
- `header.elements_spacing.nav.mobile_margin_right`: Number
- `header.elements_spacing.nav.mobile_margin_right_unit`: String
- `header.elements_spacing.nav.padding_right`: Number
- `header.elements_spacing.nav.padding_right_unit`: String
- `header.elements_spacing.nav.mobile_padding_right`: Number
- `header.elements_spacing.nav.mobile_padding_right_unit`: String
- `header.elements_spacing.nav.margin_bottom`: Number
- `header.elements_spacing.nav.margin_bottom_unit`: String
- `header.elements_spacing.nav.mobile_margin_bottom`: Number
- `header.elements_spacing.nav.mobile_margin_bottom_unit`: String
- `header.elements_spacing.nav.padding_bottom`: Number
- `header.elements_spacing.nav.padding_bottom_unit`: String
- `header.elements_spacing.nav.mobile_padding_bottom`: Number
- `header.elements_spacing.nav.mobile_padding_bottom_unit`: String
- `header.elements_spacing.nav.margin_left`: Number
- `header.elements_spacing.nav.margin_left_unit`: String
- `header.elements_spacing.nav.mobile_margin_left`: Number
- `header.elements_spacing.nav.mobile_margin_left_unit`: String
- `header.elements_spacing.nav.padding_left`: Number
- `header.elements_spacing.nav.padding_left_unit`: String
- `header.elements_spacing.nav.mobile_padding_left`: Number
- `header.elements_spacing.nav.mobile_padding_left_unit`: String
- `header.elements_spacing.firstrow.margin_top`: Number
- `header.elements_spacing.firstrow.margin_top_unit`: String
- `header.elements_spacing.firstrow.mobile_margin_top`: Number
- `header.elements_spacing.firstrow.mobile_margin_top_unit`: String
- `header.elements_spacing.firstrow.padding_top`: Number
- `header.elements_spacing.firstrow.padding_top_unit`: String
- `header.elements_spacing.firstrow.mobile_padding_top`: Number
- `header.elements_spacing.firstrow.mobile_padding_top_unit`: String
- `header.elements_spacing.firstrow.margin_right`: Number
- `header.elements_spacing.firstrow.margin_right_unit`: String
- `header.elements_spacing.firstrow.mobile_margin_right`: Number
- `header.elements_spacing.firstrow.mobile_margin_right_unit`: String
- `header.elements_spacing.firstrow.padding_right`: Number
- `header.elements_spacing.firstrow.padding_right_unit`: String
- `header.elements_spacing.firstrow.mobile_padding_right`: Number
- `header.elements_spacing.firstrow.mobile_padding_right_unit`: String
- `header.elements_spacing.firstrow.margin_bottom`: Number
- `header.elements_spacing.firstrow.margin_bottom_unit`: String
- `header.elements_spacing.firstrow.mobile_margin_bottom`: Number
- `header.elements_spacing.firstrow.mobile_margin_bottom_unit`: String
- `header.elements_spacing.firstrow.padding_bottom`: Number
- `header.elements_spacing.firstrow.padding_bottom_unit`: String
- `header.elements_spacing.firstrow.mobile_padding_bottom`: Number
- `header.elements_spacing.firstrow.mobile_padding_bottom_unit`: String
- `header.elements_spacing.firstrow.margin_left`: Number
- `header.elements_spacing.firstrow.margin_left_unit`: String
- `header.elements_spacing.firstrow.mobile_margin_left`: Number
- `header.elements_spacing.firstrow.mobile_margin_left_unit`: String
- `header.elements_spacing.firstrow.padding_left`: Number
- `header.elements_spacing.firstrow.padding_left_unit`: String
- `header.elements_spacing.firstrow.mobile_padding_left`: Number
- `header.elements_spacing.firstrow.mobile_padding_left_unit`: String
- `header.elements_spacing.search.margin_top`: Number
- `header.elements_spacing.search.margin_top_unit`: String
- `header.elements_spacing.search.mobile_margin_top`: Number
- `header.elements_spacing.search.mobile_margin_top_unit`: String
- `header.elements_spacing.search.padding_top`: Number
- `header.elements_spacing.search.padding_top_unit`: String
- `header.elements_spacing.search.mobile_padding_top`: Number
- `header.elements_spacing.search.mobile_padding_top_unit`: String
- `header.elements_spacing.search.margin_right`: Number
- `header.elements_spacing.search.margin_right_unit`: String
- `header.elements_spacing.search.mobile_margin_right`: Number
- `header.elements_spacing.search.mobile_margin_right_unit`: String
- `header.elements_spacing.search.padding_right`: Number
- `header.elements_spacing.search.padding_right_unit`: String
- `header.elements_spacing.search.mobile_padding_right`: Number
- `header.elements_spacing.search.mobile_padding_right_unit`: String
- `header.elements_spacing.search.margin_bottom`: Number
- `header.elements_spacing.search.margin_bottom_unit`: String
- `header.elements_spacing.search.mobile_margin_bottom`: Number
- `header.elements_spacing.search.mobile_margin_bottom_unit`: String
- `header.elements_spacing.search.padding_bottom`: Number
- `header.elements_spacing.search.padding_bottom_unit`: String
- `header.elements_spacing.search.mobile_padding_bottom`: Number
- `header.elements_spacing.search.mobile_padding_bottom_unit`: String
- `header.elements_spacing.search.margin_left`: Number
- `header.elements_spacing.search.margin_left_unit`: String
- `header.elements_spacing.search.mobile_margin_left`: Number
- `header.elements_spacing.search.mobile_margin_left_unit`: String
- `header.elements_spacing.search.padding_left`: Number
- `header.elements_spacing.search.padding_left_unit`: String
- `header.elements_spacing.search.mobile_padding_left`: Number
- `header.elements_spacing.search.mobile_padding_left_unit`: String
- `header.elements_spacing.login.margin_top`: Number
- `header.elements_spacing.login.margin_top_unit`: String
- `header.elements_spacing.login.mobile_margin_top`: Number
- `header.elements_spacing.login.mobile_margin_top_unit`: String
- `header.elements_spacing.login.padding_top`: Number
- `header.elements_spacing.login.padding_top_unit`: String
- `header.elements_spacing.login.mobile_padding_top`: Number
- `header.elements_spacing.login.mobile_padding_top_unit`: String
- `header.elements_spacing.login.margin_right`: Number
- `header.elements_spacing.login.margin_right_unit`: String
- `header.elements_spacing.login.mobile_margin_right`: Number
- `header.elements_spacing.login.mobile_margin_right_unit`: String
- `header.elements_spacing.login.padding_right`: Number
- `header.elements_spacing.login.padding_right_unit`: String
- `header.elements_spacing.login.mobile_padding_right`: Number
- `header.elements_spacing.login.mobile_padding_right_unit`: String
- `header.elements_spacing.login.margin_bottom`: Number
- `header.elements_spacing.login.margin_bottom_unit`: String
- `header.elements_spacing.login.mobile_margin_bottom`: Number
- `header.elements_spacing.login.mobile_margin_bottom_unit`: String
- `header.elements_spacing.login.padding_bottom`: Number
- `header.elements_spacing.login.padding_bottom_unit`: String
- `header.elements_spacing.login.mobile_padding_bottom`: Number
- `header.elements_spacing.login.mobile_padding_bottom_unit`: String
- `header.elements_spacing.login.margin_left`: Number
- `header.elements_spacing.login.margin_left_unit`: String
- `header.elements_spacing.login.mobile_margin_left`: Number
- `header.elements_spacing.login.mobile_margin_left_unit`: String
- `header.elements_spacing.login.padding_left`: Number
- `header.elements_spacing.login.padding_left_unit`: String
- `header.elements_spacing.login.mobile_padding_left`: Number
- `header.elements_spacing.login.mobile_padding_left_unit`: String
- `header.elements_spacing.cart.margin_top`: Number
- `header.elements_spacing.cart.margin_top_unit`: String
- `header.elements_spacing.cart.mobile_margin_top`: Number
- `header.elements_spacing.cart.mobile_margin_top_unit`: String
- `header.elements_spacing.cart.padding_top`: Number
- `header.elements_spacing.cart.padding_top_unit`: String
- `header.elements_spacing.cart.mobile_padding_top`: Number
- `header.elements_spacing.cart.mobile_padding_top_unit`: String
- `header.elements_spacing.cart.margin_right`: Number
- `header.elements_spacing.cart.margin_right_unit`: String
- `header.elements_spacing.cart.mobile_margin_right`: Number
- `header.elements_spacing.cart.mobile_margin_right_unit`: String
- `header.elements_spacing.cart.padding_right`: Number
- `header.elements_spacing.cart.padding_right_unit`: String
- `header.elements_spacing.cart.mobile_padding_right`: Number
- `header.elements_spacing.cart.mobile_padding_right_unit`: String
- `header.elements_spacing.cart.margin_bottom`: Number
- `header.elements_spacing.cart.margin_bottom_unit`: String
- `header.elements_spacing.cart.mobile_margin_bottom`: Number
- `header.elements_spacing.cart.mobile_margin_bottom_unit`: String
- `header.elements_spacing.cart.padding_bottom`: Number
- `header.elements_spacing.cart.padding_bottom_unit`: String
- `header.elements_spacing.cart.mobile_padding_bottom`: Number
- `header.elements_spacing.cart.mobile_padding_bottom_unit`: String
- `header.elements_spacing.cart.margin_left`: Number
- `header.elements_spacing.cart.margin_left_unit`: String
- `header.elements_spacing.cart.mobile_margin_left`: Number
- `header.elements_spacing.cart.mobile_margin_left_unit`: String
- `header.elements_spacing.cart.padding_left`: Number
- `header.elements_spacing.cart.padding_left_unit`: String
- `header.elements_spacing.cart.mobile_padding_left`: Number
- `header.elements_spacing.cart.mobile_padding_left_unit`: String
- `header.elements_spacing.button.margin_top`: Number
- `header.elements_spacing.button.margin_top_unit`: String
- `header.elements_spacing.button.mobile_margin_top`: Number
- `header.elements_spacing.button.mobile_margin_top_unit`: String
- `header.elements_spacing.button.padding_top`: Number
- `header.elements_spacing.button.padding_top_unit`: String
- `header.elements_spacing.button.mobile_padding_top`: Number
- `header.elements_spacing.button.mobile_padding_top_unit`: String
- `header.elements_spacing.button.margin_right`: Number
- `header.elements_spacing.button.margin_right_unit`: String
- `header.elements_spacing.button.mobile_margin_right`: Number
- `header.elements_spacing.button.mobile_margin_right_unit`: String
- `header.elements_spacing.button.padding_right`: Number
- `header.elements_spacing.button.padding_right_unit`: String
- `header.elements_spacing.button.mobile_padding_right`: Number
- `header.elements_spacing.button.mobile_padding_right_unit`: String
- `header.elements_spacing.button.margin_bottom`: Number
- `header.elements_spacing.button.margin_bottom_unit`: String
- `header.elements_spacing.button.mobile_margin_bottom`: Number
- `header.elements_spacing.button.mobile_margin_bottom_unit`: String
- `header.elements_spacing.button.padding_bottom`: Number
- `header.elements_spacing.button.padding_bottom_unit`: String
- `header.elements_spacing.button.mobile_padding_bottom`: Number
- `header.elements_spacing.button.mobile_padding_bottom_unit`: String
- `header.elements_spacing.button.margin_left`: Number
- `header.elements_spacing.button.margin_left_unit`: String
- `header.elements_spacing.button.mobile_margin_left`: Number
- `header.elements_spacing.button.mobile_margin_left_unit`: String
- `header.elements_spacing.button.padding_left`: Number
- `header.elements_spacing.button.padding_left_unit`: String
- `header.elements_spacing.button.mobile_padding_left`: Number
- `header.elements_spacing.button.mobile_padding_left_unit`: String
- `header.elements_spacing.menuicon.margin_top`: Number
- `header.elements_spacing.menuicon.margin_top_unit`: String
- `header.elements_spacing.menuicon.mobile_margin_top`: Number
- `header.elements_spacing.menuicon.mobile_margin_top_unit`: String
- `header.elements_spacing.menuicon.padding_top`: Number
- `header.elements_spacing.menuicon.padding_top_unit`: String
- `header.elements_spacing.menuicon.mobile_padding_top`: Number
- `header.elements_spacing.menuicon.mobile_padding_top_unit`: String
- `header.elements_spacing.menuicon.margin_right`: Number
- `header.elements_spacing.menuicon.margin_right_unit`: String
- `header.elements_spacing.menuicon.mobile_margin_right`: Number
- `header.elements_spacing.menuicon.mobile_margin_right_unit`: String
- `header.elements_spacing.menuicon.padding_right`: Number
- `header.elements_spacing.menuicon.padding_right_unit`: String
- `header.elements_spacing.menuicon.mobile_padding_right`: Number
- `header.elements_spacing.menuicon.mobile_padding_right_unit`: String
- `header.elements_spacing.menuicon.margin_bottom`: Number
- `header.elements_spacing.menuicon.margin_bottom_unit`: String
- `header.elements_spacing.menuicon.mobile_margin_bottom`: Number
- `header.elements_spacing.menuicon.mobile_margin_bottom_unit`: String
- `header.elements_spacing.menuicon.padding_bottom`: Number
- `header.elements_spacing.menuicon.padding_bottom_unit`: String
- `header.elements_spacing.menuicon.mobile_padding_bottom`: Number
- `header.elements_spacing.menuicon.mobile_padding_bottom_unit`: String
- `header.elements_spacing.menuicon.margin_left`: Number
- `header.elements_spacing.menuicon.margin_left_unit`: String
- `header.elements_spacing.menuicon.mobile_margin_left`: Number
- `header.elements_spacing.menuicon.mobile_margin_left_unit`: String
- `header.elements_spacing.menuicon.padding_left`: Number
- `header.elements_spacing.menuicon.padding_left_unit`: String
- `header.elements_spacing.menuicon.mobile_padding_left`: Number
- `header.elements_spacing.menuicon.mobile_padding_left_unit`: String
- `header.elements_spacing.row1.margin_top`: Number
- `header.elements_spacing.row1.margin_top_unit`: String
- `header.elements_spacing.row1.mobile_margin_top`: Number
- `header.elements_spacing.row1.mobile_margin_top_unit`: String
- `header.elements_spacing.row1.padding_top`: Number
- `header.elements_spacing.row1.padding_top_unit`: String
- `header.elements_spacing.row1.mobile_padding_top`: Number
- `header.elements_spacing.row1.mobile_padding_top_unit`: String
- `header.elements_spacing.row1.margin_right`: Number
- `header.elements_spacing.row1.margin_right_unit`: String
- `header.elements_spacing.row1.mobile_margin_right`: Number
- `header.elements_spacing.row1.mobile_margin_right_unit`: String
- `header.elements_spacing.row1.padding_right`: Number
- `header.elements_spacing.row1.padding_right_unit`: String
- `header.elements_spacing.row1.mobile_padding_right`: Number
- `header.elements_spacing.row1.mobile_padding_right_unit`: String
- `header.elements_spacing.row1.margin_bottom`: Number
- `header.elements_spacing.row1.margin_bottom_unit`: String
- `header.elements_spacing.row1.mobile_margin_bottom`: Number
- `header.elements_spacing.row1.mobile_margin_bottom_unit`: String
- `header.elements_spacing.row1.padding_bottom`: Number
- `header.elements_spacing.row1.padding_bottom_unit`: String
- `header.elements_spacing.row1.mobile_padding_bottom`: Number
- `header.elements_spacing.row1.mobile_padding_bottom_unit`: String
- `header.elements_spacing.row1.margin_left`: Number
- `header.elements_spacing.row1.margin_left_unit`: String
- `header.elements_spacing.row1.mobile_margin_left`: Number
- `header.elements_spacing.row1.mobile_margin_left_unit`: String
- `header.elements_spacing.row1.padding_left`: Number
- `header.elements_spacing.row1.padding_left_unit`: String
- `header.elements_spacing.row1.mobile_padding_left`: Number
- `header.elements_spacing.row1.mobile_padding_left_unit`: String
- `header.elements_spacing.row2.margin_top`: Number
- `header.elements_spacing.row2.margin_top_unit`: String
- `header.elements_spacing.row2.mobile_margin_top`: Number
- `header.elements_spacing.row2.mobile_margin_top_unit`: String
- `header.elements_spacing.row2.padding_top`: Number
- `header.elements_spacing.row2.padding_top_unit`: String
- `header.elements_spacing.row2.mobile_padding_top`: Number
- `header.elements_spacing.row2.mobile_padding_top_unit`: String
- `header.elements_spacing.row2.margin_right`: Number
- `header.elements_spacing.row2.margin_right_unit`: String
- `header.elements_spacing.row2.mobile_margin_right`: Number
- `header.elements_spacing.row2.mobile_margin_right_unit`: String
- `header.elements_spacing.row2.padding_right`: Number
- `header.elements_spacing.row2.padding_right_unit`: String
- `header.elements_spacing.row2.mobile_padding_right`: Number
- `header.elements_spacing.row2.mobile_padding_right_unit`: String
- `header.elements_spacing.row2.margin_bottom`: Number
- `header.elements_spacing.row2.margin_bottom_unit`: String
- `header.elements_spacing.row2.mobile_margin_bottom`: Number
- `header.elements_spacing.row2.mobile_margin_bottom_unit`: String
- `header.elements_spacing.row2.padding_bottom`: Number
- `header.elements_spacing.row2.padding_bottom_unit`: String
- `header.elements_spacing.row2.mobile_padding_bottom`: Number
- `header.elements_spacing.row2.mobile_padding_bottom_unit`: String
- `header.elements_spacing.row2.margin_left`: Number
- `header.elements_spacing.row2.margin_left_unit`: String
- `header.elements_spacing.row2.mobile_margin_left`: Number
- `header.elements_spacing.row2.mobile_margin_left_unit`: String
- `header.elements_spacing.row2.padding_left`: Number
- `header.elements_spacing.row2.padding_left_unit`: String
- `header.elements_spacing.row2.mobile_padding_left`: Number
- `header.elements_spacing.row2.mobile_padding_left_unit`: String
- `header.elements_spacing.banner.margin_top`: Number
- `header.elements_spacing.banner.margin_top_unit`: String
- `header.elements_spacing.banner.mobile_margin_top`: Number
- `header.elements_spacing.banner.mobile_margin_top_unit`: String
- `header.elements_spacing.banner.padding_top`: Number
- `header.elements_spacing.banner.padding_top_unit`: String
- `header.elements_spacing.banner.mobile_padding_top`: Number
- `header.elements_spacing.banner.mobile_padding_top_unit`: String
- `header.elements_spacing.banner.margin_right`: Number
- `header.elements_spacing.banner.margin_right_unit`: String
- `header.elements_spacing.banner.mobile_margin_right`: Number
- `header.elements_spacing.banner.mobile_margin_right_unit`: String
- `header.elements_spacing.banner.padding_right`: Number
- `header.elements_spacing.banner.padding_right_unit`: String
- `header.elements_spacing.banner.mobile_padding_right`: Number
- `header.elements_spacing.banner.mobile_padding_right_unit`: String
- `header.elements_spacing.banner.margin_bottom`: Number
- `header.elements_spacing.banner.margin_bottom_unit`: String
- `header.elements_spacing.banner.mobile_margin_bottom`: Number
- `header.elements_spacing.banner.mobile_margin_bottom_unit`: String
- `header.elements_spacing.banner.padding_bottom`: Number
- `header.elements_spacing.banner.padding_bottom_unit`: String
- `header.elements_spacing.banner.mobile_padding_bottom`: Number
- `header.elements_spacing.banner.mobile_padding_bottom_unit`: String
- `header.elements_spacing.banner.margin_left`: Number
- `header.elements_spacing.banner.margin_left_unit`: String
- `header.elements_spacing.banner.mobile_margin_left`: Number
- `header.elements_spacing.banner.mobile_margin_left_unit`: String
- `header.elements_spacing.banner.padding_left`: Number
- `header.elements_spacing.banner.padding_left_unit`: String
- `header.elements_spacing.banner.mobile_padding_left`: Number
- `header.elements_spacing.banner.mobile_padding_left_unit`: String
- `header.nav_links_spacing`: Object[]
  - `nav`: String
  - `margin_top`: Number
  - `margin_top_unit`: String
  - `mobile_margin_top`: Number
  - `mobile_margin_top_unit`: String
  - `padding_top`: Number
  - `padding_top_unit`: String
  - `mobile_padding_top`: Number
  - `mobile_padding_top_unit`: String
  - `margin_right`: Number
  - `margin_right_unit`: String
  - `mobile_margin_right`: Number
  - `mobile_margin_right_unit`: String
  - `padding_right`: Number
  - `padding_right_unit`: String
  - `mobile_padding_right`: Number
  - `mobile_padding_right_unit`: String
  - `margin_bottom`: Number
  - `margin_bottom_unit`: String
  - `mobile_margin_bottom`: Number
  - `mobile_margin_bottom_unit`: String
  - `padding_bottom`: Number
  - `padding_bottom_unit`: String
  - `mobile_padding_bottom`: Number
  - `mobile_padding_bottom_unit`: String
  - `margin_left`: Number
  - `margin_left_unit`: String
  - `mobile_margin_left`: Number
  - `mobile_margin_left_unit`: String
  - `padding_left`: Number
  - `padding_left_unit`: String
  - `mobile_padding_left`: Number
  - `mobile_padding_left_unit`: String
  - `_id`: ObjectId
- `header.searchInputColor`: String, default "#fff"
- `header.searchInputBackground`: String, default "#dcdcdc"
- `header.searchInputPosition`: String, default "bottom"
- `header.searchExpanded`: Boolean, default false
- `header.showCartTotal`: Boolean, default false
- `header.cartTotalPosition`: String, one of  | left, default ""
- `header.cartTotalGap`: Number
- `header.sidemenuBackground`: String
- `header.sidemenuText`: String
- `header.sidemenuPanelBackground`: String
- `header.sidemenuPanelText`: String
- `header.sidemenuFontSize`: Number
- `header.sidemenuFontWeight`: String
- `header.sidemenuRowGap`: Number
- `header.sidemenuIconGap`: Number
- `header.sidemenuGroupGap`: Number
- `header.sidemenuGroupFontFamily`: String
- `header.sidemenuGroupFontSize`: Number
- `header.sidemenuGroupTextTransform`: String
- `header.sidemenuGroupColor`: String
- `header.sidemenuGroupFontWeight`: String
- `header.dropdownRadius`: Number
- `header.dropdownFontFamily`: String
- `header.dropdownFontSize`: Number
- `header.dropdownItemGap`: Number
- `header.dropdownPaddingX`: Number
- `header.dropdownPaddingY`: Number
- `header.searchInputMaxWidth`: Number
- `header.searchInputBorderRadius`: String
- `header.bar_menus`: Object[]
  - `nav`: String
  - `position`: String
  - `value`: Number
  - `mobile_value`: Number
  - `hideIcon`: Boolean, default false
  - `hideTitle`: Boolean, default false
  - `font_size`: Number
  - `_id`: ObjectId
- `partners.gridStyle`: String, default "row"
- `partners.align`: String, default "left"
- `partners.name`: String, default "right"
- `partners.image`: String, default "left"
- `partners.description`: String, default "right"
- `partners.title`: String, default "bottom"
- `partners.showSearch`: Boolean, default true
- `partners.showCategories`: Boolean, default true
- `partners.showMap`: Boolean, default true
- `partners.perPage`: Number, default 9
- `partners.sort`: String, default "name:1"
- `contacts.map`: Boolean, default true
- `contacts.partners`: Boolean, default true
- `price_plan.title`: String, default "top"
- `price_plan.description`: String, default "top"
- `price_plan.plan_features_style`: String, default "0"
- `price_plan.rating`: Boolean, default false
- `price_plan.ratingList`: Boolean, default false
- `price_plan.image`: Boolean, default false
- `price_plan.about_page`: ObjectId, → AboutPage
- `price_plan.header`: ObjectId, → AboutPage
- `backgroundGradient.enabled`: Boolean, default false
- `backgroundGradient.degrees`: Number
- `backgroundGradient.colors`: Object[]
  - `color`: String
  - `percentage`: Number
  - `_id`: ObjectId
- `backgroundGradient.css`: String
- `backgroundImage`: String, default "" - Background picture.
- `backgroundVideo`: String, default "" - Background video.
- `backgroundAttachment`: String, default "fixed" - Whether the background scrolls or stays fixed.
- `backgroundOpacity`: Number, default 1 - Opacity of the background picture or video.
- `transparentCard`: Boolean, default false - Cards are see-through.
- `cardColor`: String - Opacity of cards, from 0 to 1.
- `cardColor_color`: String - Card colour.
- `cardColor_color_darkmode`: String - Card colour in dark mode.
- `showMorePages`: Boolean, default true - Shows the More pages menu.
- `allow_darkmode`: Boolean, default false - Allows site/app to switch between light and dark mode, default value is false.
- `use_darkmode_on_site`: Boolean, default false - Allows the site to switch between light and dark mode, default value is false.
- `programs.rating`: Boolean, default false
- `programs.titleColor`: String
- `programs.descriptionColor`: String
- `programs.borderRadius`: String
- `programs.titleFontSize`: String
- `programs.descriptionFontSize`: String
- `programs.titleFontWeight`: String
- `programs.descriptionFontWeight`: String
- `programs.cardBorderRadius`: String
- `programs.cardBorderWidth`: String
- `programs.cardBorderColor`: String
- `programs.cardBackgroundColor`: String
- `programs.imageAspectRatio`: String
- `programs.customCss`: String
- `programs.sort`: Number, default -1
- `programs.showBreadCrumbs`: Boolean, default true
- `programs.filtersBackgroundColor`: String
- `programs.filtersTextColor`: String
- `programs.filtersBorderRadius`: String
- `programs.boxShadowColor`: String
- `programs.boxShadowOffsetX`: Number, default 0
- `programs.boxShadowOffsetY`: Number, default 0
- `programs.boxShadowBlurRadius`: String
- `programs.boxShadowSpreadRadius`: String
- `programs.imagePadding`: Number, default 0
- `programs.categories.layout`: String, one of list | columns, default "list"
- `programs.categories.showHeading`: Boolean, default true
- `programs.categories.showSubtitle`: Boolean, default true
- `programs.categories.showImage`: Boolean, default false
- `programs.categories.imageSize`: String, default "50px"
- `programs.categories.imageRadius`: String
- `programs.categories.imageAspectRatio`: String, default "1/1"
- `programs.categories.imageFit`: String, one of cover | contain, default "cover"
- `programs.categories.imagePadding`: Number, default 0
- `programs.categories.fallback`: String, one of initial | color | none, default "initial"
- `programs.categories.showChevron`: Boolean, default true
- `programs.categories.titleColor`: String
- `programs.categories.titleFontSize`: String
- `programs.categories.titleFontWeight`: String
- `programs.categories.cardBackgroundColor`: String
- `programs.categories.cardBorderRadius`: String
- `programs.categories.cardBorderWidth`: String
- `programs.categories.cardBorderColor`: String
- `programs.categories.customCss`: String
- `programs.categories.site.showImage`: Boolean, default true
- `programs.categories.site.imageSize`: String
- `programs.categories.site.imageAspectRatio`: String
- `programs.categories.site.titleColor`: String
- `programs.categories.site.titleFontSize`: String
- `programs.categories.site.titleFontWeight`: String
- `programs.categories.site.cardBackgroundColor`: String
- `programs.categories.site.cardBorderRadius`: String
- `programs.categories.site.cardBorderWidth`: String
- `programs.categories.site.cardBorderColor`: String
- `programs.categories.site.cardPadding`: String
- `programs.categories.site.gap`: String
- `programs.categories.site.align`: String, one of left | center | right
- `programs.categories.site.titleTransform`: String, one of uppercase | lowercase | capitalize
- `programs.showViews`: Boolean, default false
- `programs.viewsColor`: String
- `headerA_secondary`: String, default "#f4f5f8" - Secondary header gradient start.
- `headerB_secondary`: String, default "#f4f5f8" - Secondary header gradient end.
- `headerA_secondary_darkmode`: String, default "#f4f5f8" - The same in dark mode.
- `headerB_secondary_darkmode`: String, default "#f4f5f8" - The same in dark mode.
- `headerText_secondary`: String - Secondary header text colour.
- `headerText_secondary_darkmode`: String - The same in dark mode.
- `tabs.allow_custom_tabs_color`: Boolean, default false
- `tabs.background`: String
- `tabs.background_checked`: String
- `tabs.color`: String
- `tabs.color_checked`: String
- `tabs.indicator_color`: String
- `tabs.hide_text`: Boolean, default false
- `tabs.hide_home`: Boolean, default false
- `tabs.button_spacing_vertical`: Number, default 0
- `tabs.button_spacing_horizontal`: Number, default 0
- `tabs.button_border_radius`: Number, default 0
- `tabs.navigations.home.icon`: String
- `tabs.navigations.home.img`: ObjectId, → Media
- `tabs.navigations.explore.icon`: String
- `tabs.navigations.explore.img`: ObjectId, → Media
- `tabs.navigations.bites.icon`: String
- `tabs.navigations.bites.img`: ObjectId, → Media
- `tabs.navigations.videos.icon`: String
- `tabs.navigations.videos.img`: ObjectId, → Media
- `tabs.navigations.groups.icon`: String
- `tabs.navigations.groups.img`: ObjectId, → Media
- `tabs.navigations.vouchers.icon`: String
- `tabs.navigations.vouchers.img`: ObjectId, → Media
- `tabs.navigations.store.icon`: String
- `tabs.navigations.store.img`: ObjectId, → Media
- `tabs.navigations.programs.icon`: String
- `tabs.navigations.programs.img`: ObjectId, → Media
- `tabs.navigations.services.icon`: String
- `tabs.navigations.services.img`: ObjectId, → Media
- `tabs.navigations.blogposts.icon`: String
- `tabs.navigations.blogposts.img`: ObjectId, → Media
- `tabs.navigations.subscriptions.icon`: String
- `tabs.navigations.subscriptions.img`: ObjectId, → Media
- `tabs.navigations.events.icon`: String
- `tabs.navigations.events.img`: ObjectId, → Media
- `tabs.navigations.playlists.icon`: String
- `tabs.navigations.playlists.img`: ObjectId, → Media
- `tabs.navigations.user.icon`: String
- `tabs.navigations.user.img`: ObjectId, → Media
- `tabs.navigations.partners.icon`: String
- `tabs.navigations.partners.img`: ObjectId, → Media
- `tabs.navigations.contacts.icon`: String
- `tabs.navigations.contacts.img`: ObjectId, → Media
- `tabs.navigations.tracker.icon`: String
- `tabs.navigations.tracker.img`: ObjectId, → Media
- `tabs.navigations.mini_apps.icon`: String
- `tabs.navigations.mini_apps.img`: ObjectId, → Media
- `tabs.navigations.more.icon`: String
- `tabs.navigations.more.img`: ObjectId, → Media
- `tabs.navigations.claims.icon`: String
- `tabs.navigations.claims.img`: ObjectId, → Media
- `tabs.navigations.professional_pages.icon`: String
- `tabs.navigations.professional_pages.img`: ObjectId, → Media
- `tabs.navigations.bookings.icon`: String
- `tabs.navigations.bookings.img`: ObjectId, → Media
- `customDropdown_background`: String, default "#fff" - Background of custom dropdown menus.
- `customDropdown_text`: String, default "#212529" - Text colour of custom dropdown menus.
- `products_partial.showCart`: Boolean, default false
- `products_partial.swiper.enabled`: Boolean, default false
- `products_partial.swiper.loop`: Boolean, default false
- `products_partial.swiper.showControls`: Boolean, default false
- `products_partial.brand`: Boolean, default true
- `breadCrumbs_backgroundColor`: String, default "#e8ebf0" - Breadcrumbs background.
- `breadCrumbs_textColor`: String, default "#97a0b0" - Breadcrumbs text colour.
- `breadCrumbs_darkmode_backgroundColor`: String, default "#e8ebf0" - Breadcrumbs background in dark mode.
- `breadCrumbs_darkmode_textColor`: String, default "#97a0b0" - Breadcrumbs text colour in dark mode.
- `cardColor_secondary`: String, default "#757c8d" - Secondary card colour.
- `cardColor_secondary_darkmode`: String, default "#757c8d" - Secondary card colour in dark mode.
- `show_inapp_message`: Boolean, default true - Shows the in-app message banner.
- `groups.participants`: Boolean, default true
- `groups.description`: Boolean, default false
- `service_categories.gridStyle`: String, default "row"
- `service_categories.titleFontSize`: String
- `service_categories.titleFontWeight`: String
- `service_categories.cardBorderRadius`: String
- `service_categories.cardBorderWidth`: String
- `service_categories.cardBorderColor`: String
- `service_categories.cardBackgroundColor`: String
- `service_categories.imageAspectRatio`: String
- `service_categories.customCss`: String
- `service_categories.cardPadding`: Number
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### Ticket

- `event`: ObjectId, required, → Event - Event.id.
- `date`: Number, required - Index of the event date.
- `section`: Number - Index of the section.
- `subsection`: Number - Index of the subsection.
- `row`: Number - Index of the row.
- `seat`: Number - Index of the seat.
- `row_index_formated`: Number - Row number as shown to the buyer.
- `seat_index_formated`: Number - Seat number as shown to the buyer.
- `lead_id`: ObjectId, → Lead - Lead.id.
- `socket_id`: String - The buyer's live connection, while the seat is held.
- `tier.name`: String
- `tier.price`: Number
- `status`: String, one of frozen | waiting-for-payment | paid | frozen-by-admin | bought-by-admin, default "frozen" - One of: frozen, waiting-for-payment, paid, frozen-by-admin, bought-by-admin.
- `expiration_time`: Date, required - When a held seat is released if not paid.
- `qr_code`: ObjectId, → QrCode - QrCode.id.
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### User

A person with an account on the site - customer, staff member or admin.

- `name`: String - Display name.
- `email`: String, required - Email, used to sign in.
- `avatar`: ObjectId - Media.id of the profile picture.
- `social_avatar`: String - Profile picture from a social sign-in.
- `isAdmin`: Boolean, default false - Can use the admin.
- `isStaff`: Boolean, default false - A staff member who can be booked.
- `owner_id`: ObjectId - User.id of the admin who added this user.
- `organization_name`: String - Company name.
- `firstname`: String - First name.
- `lastname`: String - Last name.
- `phone_number`: String - Phone number.
- `address`: String - Address.
- `city`: String - City.
- `state`: String - State or region.
- `country`: String - Country.
- `zip_code`: String - Postal code.
- `tax_identification_number`: String - Tax number.
- `notes`: String - Notes kept on the user.
- `isConfirmed`: Boolean, default false - The email was confirmed.
- `number_of_sales`: Number, default 0 - How many sales the user made (marketplace).
- `stripe_id`: String - The user's id in Stripe.
- `paypal_id`: String - The user's PayPal id.
- `access_level`: Number - Admin permission level; 0 is full access.
- `can_edit.site`: Boolean, default true
- `can_edit.crm`: Boolean, default true
- `can_edit.store`: Boolean, default true
- `can_edit.payments`: Boolean, default true
- `can_edit.staff`: Boolean, default true
- `validation_code`: String - Code sent to confirm the email.
- `price_plans`: ObjectId[], → PricePlan - PricePlan ids.
- `emotion`: String - Positive, neutral, negative.
- `political_spectrum`: String - Far left, left, far right, right, middle.
- `language`: Mixed - Multiple objects inside - key: value - example - "EN": 5 (5 being the weight);.
- `interests`: Mixed - Multiple objects inside - key: value - example - "hobby": 5 (5 being the weight);.
- `app_category`: Mixed - Multiple objects inside - key: value - example - "hobby": 5 (5 being the weight);.
- `user_profile`: Mixed - Multiple objects inside - key: value - example - "intelligent": 5 (5 being the weight);.
- `user_economics`: String - Low, middle, high.
- `user_education`: String - Low, middle, high.
- `marital_status`: String - Single, married.
- `age`: String - 0-18, 18-25, 25-30, 30-35, 35-45, 45-60.
- `sex`: String - Male - female.
- `attractiveness`: String - Low, medium, high.
- `following`: ObjectId[], → User - User ids.
- `followers`: ObjectId[], → User - User ids.
- `handle`: String - Unique @handle.
- `saved_posts`: ObjectId[], → Post - Post ids.
- `blocked_users`: ObjectId[], → User - User ids.
- `blocked_by`: ObjectId[], → User - User ids.
- `bio`: String - About the user.
- `wallet`: Number, default 0 - Balance in the user's wallet.
- `ip_location.city`: String
- `ip_location.continent_name`: String
- `ip_location.country_name`: String
- `ip_location.country_subdivision`: String
- `ip_location.location_latitude`: Number
- `ip_location.location_longitude`: Number
- `ip_location.last_updated`: Date
- `ip_location.ip_address`: String
- `ip_location.zip_code`: String
- `ip_location.dialing_code`: String
- `location`: Embedded - The user's chosen location.
  - `type`: String, one of Point
  - `coordinates`: Number[]
  - `_id`: ObjectId
- `checkout_recovery_at`: Date - When we last emailed them about a Premium checkout they left (utils/checkout-recovery).
- `search_history`: String[] - What the user searched for.
- `isRestricted`: Boolean, default false - Restricted by a moderator.
- `isMonetized`: Boolean, default false - Earns from their content.
- `monetization_request.isRequested`: Boolean, default false
- `monetization_request.requested_on`: Date
- `sentFollowersEmail`: Date - When the followers summary email was last sent.
- `isShadowbanned`: Boolean, default false - Their content is hidden from others without telling them.
- `custom_url`: Object[] - Custom addresses for their profile.
  - `heading`: String
  - `url`: String
  - `_id`: ObjectId
- `isWhitelisted`: Boolean, default false - Skips moderation.
- `isReviewedWhitelist`: Boolean, default false - The whitelist request was reviewed.
- `advertiser_id`: String - Id as an advertiser.
- `selected_events`: String[] - Events the user follows.
- `profile_feed_style`: String, default "list" - How their profile feed looks (grid, list).
- `hidden_users`: ObjectId[], → User - User ids whose posts are hidden from this user's feed.
- `isVerified`: Boolean, default false - Shows the verified badge.
- `saved_products`: ObjectId[], → Product - Product ids the user saved.
- `saved_programs`: ObjectId[], → Program - Program ids the user saved.
- `saved_blogposts`: ObjectId[], → Blogpots - BlogPost ids the user saved.
- `saved_services`: ObjectId[], → Service - Service ids the user saved.
- `last_used_miniapps`: ObjectId[], → MiniApp - MiniApp ids.
- `has_disabled_seen`: Boolean, default false - Read receipts are off.
- `other_address`: Object[] - Other saved addresses.
  - `firstname`: String
  - `lastname`: String
  - `email`: String
  - `phone_number`: String
  - `address`: String
  - `city`: String
  - `state`: String
  - `country`: String
  - `zip_code`: String
  - `_id`: ObjectId
- `is_disabled`: Boolean, default false - The account is disabled.
- `delete_date`: Date - When the account will be deleted.
- `trial_price_plans`: Object[] - Price plans the user is trying, and until when.
  - `end_date`: Date
  - `start_date`: Date
  - `price_plan`: ObjectId, → PricePlan
  - `_id`: ObjectId
- `lastActivity`: Date - When the user was last active.
- `attached_dynamic_models`: Object[] - Records of custom models attached to the user.
  - `model`: ObjectId, → DynamicModel
  - `document`: ObjectId
  - `_id`: ObjectId
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### UserInvoice

- `stripeNumber`: String - Invoice number we get from Stripe (foreign key).
- `is_credit_note`: Boolean, default false - This document is a credit note for an earlier invoice.
- `credit_note_invoice_number`: String - Number of the invoice the credit note corrects.
- `credit_note_invoice_date`: String - Date of that invoice.
- `is_debit_note`: Boolean, default false - This document is a debit note for an earlier invoice.
- `debit_note_invoice_number`: String - Number of the invoice the debit note adds to.
- `debit_note_invoice_date`: String - Date of that invoice.
- `number`: Number - Our invoice number.
- `stripeInvoiceId`: String - Id of invoice stripe gives us.
- `has_price_quote`: Boolean, default false - Flag which shows if we created invoice from price quote.
- `customer_name`: String - Name of customer.
- `customer_address`: String - Address of customer.
- `customer_postal_code`: String - Postal code of customer.
- `customer_city`: String - City of customer.
- `customer_country`: String - Country of customer.
- `customer_phone`: String - Phone of customer.
- `customer_email`: String - Email of customer.
- `customer_tax_id`: String - Tax id of customer.
- `customer_vat_id`: String - Customer's VAT number.
- `customer_responsible_official`: String - Person responsible on the customer's side.
- `customer_organization_name`: String - Customer's company name.
- `billing_customer_address`: String - Address of billed customer.
- `billing_customer_postal_code`: String - Postal code billed of customer.
- `billing_customer_city`: String - City of billed customer.
- `billing_customer_country`: String - Country of billed customer.
- `billing_customer_phone`: String - Phone of billed customer.
- `subtotal`: Number - Invoice subtotal.
- `amount`: Number - Invoice amount.
- `day_of_issue`: String - Day of issue of invoice.
- `foreign`: Boolean - Flag which shows if invoice is from foreign to company country.
- `home_tax`: Number, default 0 - Home country tax amount.
- `foreign_tax`: Number, default 0 - Foreign country tax amount.
- `items`: Object[] - Array of sold products which contains their name, cost, quantity and discount.
  - `id`: String
  - `name`: String
  - `qty`: Number
  - `unit_price`: Number
  - `discount`: Number
  - `amount`: Number
  - `_id`: ObjectId
- `grounds_for_transaction`: String - Legal grounds for the transaction.
- `description_of_transaction`: String - What it is for.
- `place_of_transaction`: String - Where it took place.
- `payment`: String - How it is paid.
- `dateDue`: String - Date it must be paid by.
- `owner_id`: ObjectId - User.id of the user who issued it.
- `_id`: ObjectId
- `updatedAt`: Date
- `createdAt`: Date

### UserPaymentSettings

- `has_card`: Boolean, default false - Card payment is offered.
- `card_locale`: String, default "Pay with credit card" - Label of the card option.
- `email`: String - Email for payments.
- `country`: String - Country for payments.
- `agreedToTerms`: Boolean, default false - The user accepted the payment terms.
- `agreedToTermsAt`: String - When they accepted them.
- `merchant_id`: String - Merchant id at the card processor.
- `has_paypal`: Boolean, default false - PayPal is offered.
- `paypal_increase`: Number, default 0 - Extra charged for PayPal.
- `paypal_id`: String - PayPal id.
- `owner_id`: ObjectId, required - User.id the settings belong to.
- `number`: Number - Next invoice number.
- `price_quote_number`: String - Next quote number.
- `bic`: String - BIC printed on invoices.
- `swift`: String - SWIFT printed on invoices.
- `tax_id`: String - Tax number.
- `vat_id`: String - VAT number.
- `logo`: ObjectId - Logo printed on invoices.
- `business_name`: String - Business name on invoices.
- `business_name_translated`: String - Business name in the second language.
- `responsible_official`: String - Responsible person on invoices.
- `responsible_official_translated`: String - The same in the second language.
- `business_email`: String - Business email on invoices.
- `company_id`: String - Company registration number.
- `business_address`: String - Business address on invoices.
- `business_address_translated`: String - The same in the second language.
- `business_phone_number`: String - Business phone on invoices.
- `business_country`: String - Business country on invoices.
- `business_country_translated`: String - The same in the second language.
- `footer`: String - Footer text of invoices.
- `footer_translated`: String - The same in the second language.
- `foreign_tax`: Number, default 0 - Tax rate for customers abroad, in percent.
- `home_tax`: Number, default 0 - Tax rate for home customers, in percent.
- `_id`: ObjectId
