# Frequently Asked Questions

## Concepts {#concepts}

### What is a headless CMS? {#what-is-a-headless-cms}

A headless CMS is a content management system that separates the place where content is managed from the screen where content is shown. Here, "headless" means that there is no fixed screen (UI) attached to it.

In the traditional approach, the place where content is managed and the website screen that shows it are bundled together. A headless CMS pulls these two apart. Content is managed in one place, and that content is delivered through an agreed channel (an API, a way of sending and receiving data by address according to set rules). This is why the same content can be picked up and used on many different screens, such as a website or a mobile app.

WEEGLOO is this kind of headless CMS. Once you create and publish content in the content studio, your website or app pulls that published version and shows it on screen. WEEGLOO's overall behavior is covered in [How It Works](/getting-started/core-concepts/common/how-it-works.md).

### How is content delivered? {#how-is-content-delivered}

WEEGLOO delivers content through a JSON-based (a text-based data format used for sending and receiving data) RESTful API. An API is a channel for sending and receiving data by address according to set rules.

There are several APIs, divided by purpose.

- The [CDA (Content Delivery API)](/api/reference/cda.md), which reads published content: used when a website or app pulls content to show it to visitors.
- The [CMA (Content Management API)](/api/reference/cma.md), which creates and manages content: used when you perform tasks done in the content studio, such as writing, editing, and publishing, from code instead.

Because reading and managing are split this way, you can pick only the channel you need in each environment and put your content to use. Which API to use in which situation is covered in the [API Reference](/api/reference/common.md).

### Can I use WEEGLOO in a mobile app? {#can-i-use-weegloo-in-a-mobile-app}

Yes. As explained in [What is a headless CMS?](#what-is-a-headless-cms), WEEGLOO manages content separately from the screen that shows it. This is why the same content can be picked up and used on a website and in a mobile app alike. The way an app pulls published content is the same as on the web.

One thing is different when you attach member login to a mobile app (Android or iOS). The connection that returns the result to the app after login completes is different from the web, so there is a separate technical step you need. That step is covered in [Auth API](/api/reference/auth-api.md#native-app-callback).

For a finished example of a mobile app integrated with WEEGLOO, see the [Running Tracker Service](/getting-started/examples/running-tracker.md) from start to finish.

## Managing Content {#managing-content}

### How do I deliver content in multiple languages? {#how-do-i-deliver-content-in-multiple-languages}

To deliver a *Content* or *Media* in multiple languages, first add a language (*Locale*) to the *Space*.

1. In the left menu, go to the **Locale** management screen in the *Space* settings.
2. Press the **+ Add** button at the top right and choose the language you want from the dropdown.
3. (Optional) Set a **Fallback Locale**. This is the language shown instead when that language's value is empty.
4. Press **Save**.

After you add a *Locale*, you must turn on multiple languages for each *Field* that should hold a value per language. In the *Content Type* edit screen, open the **Configure Field** dialog for that *Field*, and on the **Settings** tab check that **Enable localization for this Field** is turned on.

For details, see [Managing Multiple Languages](/getting-started/core-concepts/content/localization.md).

### How do I validate Content? {#how-do-i-validate-content}

Validation is a feature that puts conditions on "the values allowed in a blank" for a *Field*. Values that do not meet a condition are not saved, which keeps incorrect *Content* from piling up.

The conditions you can set differ by *Field* kind. For example, a *Field* that connects a *Media* has conditions that limit the file types allowed for upload or limit the file size or image dimensions, and a number *Field* has conditions that set a value range.

To add validation to a *Field*, follow these steps.

1. Go to the *Content Type* edit screen and press the gear icon at the far right of the *Field* row you want to put a condition on.
2. In **Configure Field**, go to the **Validations** tab.
3. The conditions available for that *Field* kind appear. Choose and set the conditions you need.

For details, see [Validation](/getting-started/core-concepts/content/content-modeling.md#putting-rules-on-values-validation).

### How do I set the Content title? {#how-do-i-set-the-content-title}

The *Content* title is the name by which you recognize each item in the *Content* list. A *Field* that holds text, that is Short Text and Long Text, can be used as the title. This setting does not appear on a number *Field* or on a *Field* that links another *Content*.

To set a *Field* as the title, follow these steps.

1. In the *Content Type* edit screen, press the gear icon at the far right of the *Field* row you want to use as the title.
2. On the **Settings** tab of **Configure Field**, turn on **Use this Field as the Content title**.
3. Press **Save**.

![The Settings tab of Configure Field. Use this Field as the Content title is turned on](/_img/en-US/faq/images/faq-01-entry-title.webp)

A title can have only one *Field* per *Content Type*. If another *Field* is already set as the title, this item appears dimmed and cannot be turned on. Clear the title setting on that *Field* first, then set the new one. A *Field* set as the title is marked **Content title** in the *Field* list.

The flow for setting a *Field* as the title when you first create it is covered in [Content Modeling](/getting-started/core-concepts/content/content-modeling.md).

## Managing Organizations and Spaces {#managing-organizations-and-spaces}

### How do I invite a user? {#how-do-i-invite-a-user}

To bring a user into a *Space*, that user must first belong to the *Organization*. So collaboration starts with inviting them to the *Organization*.

Inviting a user to an *Organization* can be done by a user with the *Owner* or *Admin* role.

1. Go to the *Organization* settings screen.
2. In the left menu, press **Membership**.
3. Press the **Invite** button at the top right, and enter information such as the email and the role to give, then send the invitation.

The invited user becomes a member right away. There is no separate "accept" step, and an invitation email is sent to the invited address.

For details on invitations and roles, see [Organizations and Spaces](/getting-started/core-concepts/access-and-permissions/organization-and-space.md).

## API {#api}

### Is the sys.id value unique? {#is-the-sysid-value-unique}

Yes. `sys.id` is generated to be unique across the entire service. So its value never collides with a resource that belongs to a different *Organization* or *Space*.

The information held in `sys` is covered in [System Properties (sys)](/api/reference/common/system-properties.md).

### How do I look up the referenced resources of a Content? {#how-do-i-look-up-the-referenced-resources-of-a-content}

Using the `include` parameter, you can fetch a *Content* together with the referenced resources it points to in a single request.

```
GET /v1/spaces/{spaceId}/contents?include=1
```

The request above looks up a list of *Content* while also fetching the linked referenced data one level deep. Raising the value to 2 or 3 expands and fetches up to a deeper level.

`include` can be used the same way not only for *Content* but for looking up any resource. For details, see [Common Query Parameters](/api/reference/common/query-parameters.md#parameters).

### Do you support the OR operation in search conditions? {#do-you-support-the-or-operation-in-search-conditions}

The REST API does not directly support combining several conditions with OR (fetch if at least one matches). When you give several conditions in one request, only results that satisfy all of them (AND) are returned. If you need OR, send a separate request per condition and combine the results you receive.

How to narrow a list with conditions is covered in [Common Query Parameters](/api/reference/common/query-parameters.md#filter).

## Billing and Pricing {#billing-and-pricing}

### Can I change my plan? {#can-i-change-my-plan}

You can upgrade or downgrade your plan at any time. When you upgrade, the remaining billing period is prorated, and a downgrade applies from the next billing period.

The limits and prices per plan are covered in [Pricing](/pricing/pricing.md#plan-comparison).

### How is API usage calculated? {#how-is-api-usage-calculated}

Many content platforms count usage by the number of API calls (the request count). WEEGLOO calculates usage based on the amount of data actually exchanged (data transfer volume), not the number of calls. For the same number of requests, the more data is exchanged, the more usage is counted.

The Free, Basic, and Pro plans include a set amount of data transfer each month within the monthly fee. The plan table also shows this transfer volume converted into a call count so you can gauge it. Operations where a single search counts as several calls, such as Advanced Search, are also drawn from this transfer volume.

If you need more usage than the set transfer volume allows, you can use the Enterprise plan, which is billed for what you use. The data transfer limits per plan are covered in [Pricing](/pricing/pricing.md#plan-comparison).
