# **Hello, World**

Mountain Labs is a headless CMS with a GraphQL API, built for developers who want full control over their content without being locked into a proprietary data model or delivery layer.

By the end of this guide you'll have a page with content sections, queryable via the GraphQL API from any client.

If you don't have an account yet, start your 14-day free trial. No credit card required. Mountain Labs works with standard GraphQL clients like Apollo and Relay, and any OAuth 2.0-compatible auth library, so whatever your stack, you're covered.
## Create your first page

From the dashboard, click Pages in the left sidebar, then Add Page. You'll be asked to give the page a slug — this is the URL-safe identifier you'll use to reference it in the API. Use something like `hello-world`. The page's directory is automatically derived from the slug.

![1-add-page](https://media.mountain-labs.io/pro_S0bImc/images/1-add-page_clean.webp)

A page at `hello-world` lives in the root directory, while a slug like `docs/getting-started` would place it under the `docs/` directory alongside any other pages sharing that path. Once the page is created you'll land in the editor, ready to add content.
## Add content

In the editor, you'll see a default text section ready to go. Each section has two key parts:

* **Slug:** a short identifier in the top-left field (e.g. intro). This is how you'll reference the section directly in the API.

* **Content:** the body of the section, edited visually but stored as Markdown under the hood.

Go ahead and type something in the editor. Sections can be reordered, nested into groups, or queried individually. Your content stays structured regardless of how you present it. A flat list of sections gives you a simple linear document; nesting sections inside a `GroupSection` lets you model a hierarchy and traverse it as a tree.

![2-content-and-toolbar](https://media.mountain-labs.io/pro_S0bImc/images/2-content-and-toolbar_clean.webp)
## Query your page

Your GraphQL API endpoint is unique to your project. You can find it in Settings → Project details under GraphQL API Domain — it follows the pattern `https://graph.[username].mountain-labs.io`.

All requests are standard GraphQL POSTs:

```
POST https://graph.[username].mountain-labs.io
Content-Type: application/json
Authorization: Bearer <access_token>
```

For the full auth setup — registering an OAuth client and obtaining an access token — see the API docs.

With your page created and a section added, run this query to fetch it:

```graphql
query {
  page(ref: { slug: "hello-world" }) {
    id
    slug
    sections {
      slug
      ... on TextSection {
        markdown
      }
    }
  }
}
```

The sections array returns all sections flattened. To traverse nested content, query GroupSection children instead:

```graphql
query {
  page(ref: { slug: "hello-world" }) {
    sections {
      slug
      ... on GroupSection {
        children {
          slug
          ... on TextSection {
            markdown
          }
        }
      }
      ... on TextSection {
        markdown
      }
    }
  }
}
```
## Next steps

Now that you've created your first page and queried it, here's where to go next:

* [Page Editor](/docs/pages/editor): learn how to reorder sections, create groups, and use the full editor toolbar

* [Pages API](/docs/api/pages/pages): full reference for page queries, mutations, and permissions

* [Sections API](/docs/api/pages/sections): full reference for adding, editing, and nesting sections