> ## Documentation Index
> Fetch the complete documentation index at: https://docs.member.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Getting started in the admin

> Create an account, create your first hub, and open it from the Membership.io admin, with the matching API request for each step.

The **admin** is the web app at [app.member.dev](https://app.member.dev) where creators set up and run their hubs. This guide takes you from a new account to your first hub and its address. Each step shows what to do in the admin first, then the API request that does the same thing, so you can script it later.

A few terms first:

* A **creator** (also called a platform user) is someone who runs hubs: an owner, admin, or staff member.
* A **team** is the workspace that owns your hubs, media, and API keys. Signing up creates one for you. See [Tenancy](/concepts/tenancy).
* A **hub** is the branded destination your members visit. See [Mental model](/concepts/mental-model#hub).

The admin needs nothing but a browser. To follow the API steps, set the base URL:

```bash theme={null}
export MIO_BASE_URL="https://api.member.dev"
```

## 1. Create an account

**In the admin:** open [app.member.dev/register](https://app.member.dev/register). The **Create an account** page asks for:

| Field | Required | Notes |
| - | - | - |
| First name | No | Used in the welcome heading and in your team's name. |
| Last name | No | |
| Email | Yes | Must be a valid email address. |
| Password | Yes | At least 8 characters. |

Select **Create account**. The admin signs you in and opens the **Getting started** page.

Signing up also creates your first team and makes you its owner. The team is named after your first name (for example, "Sam's Team"), or "My Team" when you leave the first name blank.

Already have an account? Open [app.member.dev/login](https://app.member.dev/login), enter your email and password, and select **Sign in**. The admin opens the **Dashboard**, or the page you were trying to reach before it asked you to sign in.

**With the API:** register with a flat JSON body. Like the other platform sign-in endpoints, it returns a flat token body, not a JSON:API document.

```bash theme={null}
export MIO_ACCESS_TOKEN=$(
  curl -s -X POST "$MIO_BASE_URL/api/v1/auth/register" \
    -H "Content-Type: application/vnd.api+json" \
    -d '{
      "email": "you@example.com",
      "password": "a-long-password",
      "first_name": "Sam",
      "last_name": "Rivera"
    }' | jq -r '.access_token'
)
```

Success is `201`. An email address that already has an account returns `409`, and a password shorter than 8 characters returns `422`. To use an existing account instead, sign in with `POST /api/v1/auth/login`, as shown in [Sign in as a creator](/guides/platform-login).

Then look up your team id. Most admin requests include it in the path:

```bash theme={null}
export TEAM_ID=$(
  curl -s "$MIO_BASE_URL/api/v1/teams" \
    -H "Authorization: Bearer $MIO_ACCESS_TOKEN" \
    -H "Accept: application/vnd.api+json" | jq -r '.data[0].id'
)
```

A new account belongs to one team, so the first result is yours. If you belong to several teams, pick the right one by its `name`.

Reference: [Register](/api-reference/auth/register) · [Login](/api-reference/auth/login) · [List teams](/api-reference/teams/list-teams)

## 2. The Getting started page

After you sign up, the admin opens **Getting started**. Its heading is **Getting started**, above "Build your hub and add content. Developer tools are optional." It shows up to four cards, in this order:

| Card | Button | What it does |
| - | - | - |
| Create a hub | **Create hub** | Opens the **Create hub** dialog on the same page. See [step 3](#3-create-a-hub). |
| Add your content | **Go to library** | Opens the **Library**, where you upload videos, audio, and other files. |
| Connect with the API | **Create API key** | Opens the **API keys** page with its create dialog open. See [Manage API keys in the admin](/guides/platform-api-keys) and the [API keys reference](/reference/api-keys). |
| Read the docs | **Read the docs** | Opens these docs in a new tab when the admin has a docs URL configured. |

The page does not track which steps you have finished, so use the cards in any order. To come back to it later, open the account menu and select **Getting started** (see [step 5](#5-find-your-way-around)).

## 3. Create a hub

**In the admin:** select **Create hub** on **Getting started**. The **Create hub** dialog has four fields:

| Field | Required | Notes |
| - | - | - |
| Hub name | Yes | The hub's display name. The API calls this `title`. |
| Slug | Yes | The last part of the hub's address, `hub.member.dev/{slug}`. The admin fills it in from the name as you type, until you edit it yourself. |
| Description (optional) | No | A short description of the hub. |
| Private hub | No | A switch, on by default. See [Private and public hubs](#private-and-public-hubs). |

Select **Create hub**. The dialog closes, the admin confirms with `Created '<name>'.`, and the hub appears on the **Hubs** page.

You can also create a hub from the **Hubs** page. Select **New hub** at the top of the page (or **Create hub** when you have no hubs yet). That dialog, "What should this hub be called?", asks only for a **Hub name** and says your hub starts from the Starter template. Select **Create hub**. The admin derives the slug from the name and keeps the field hidden; it shows a **Slug** field only if the slug is taken or invalid, so you can pick another. The hub is always created private, with no description, and appears in the **Your hubs** list. You can change the slug, description and privacy afterwards in the hub's settings.

### Slug rules

A slug must:

* be 1 to 100 characters long;
* use only lowercase letters (`a`–`z`), digits (`0`–`9`), and hyphens;
* start and end with a letter or a digit.

As a pattern, that is `^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$`. For example, `member-academy` and `a` are valid, but `Member-Academy`, `-academy`, and `academy-` are not. When the admin fills in the slug from the name, it follows these rules for you: the name "Member Academy!" becomes `member-academy`.

Slugs are unique across every hub on the platform, not just your team's. If the slug you ask for is already taken, the hub is still created, with a hyphen and six random letters and digits added to the end. The admin tells you when this happens, for example `Created 'Member Academy' with slug 'member-academy-3f9c1a'; your requested slug was unavailable.` Use the slug the hub actually got.

### Private and public hubs

A new hub is **private** unless you switch **Private hub** off. A private hub is invite-only: people who are not signed in cannot see it, and members cannot sign themselves up. Keep the hub private while you build it. When you are ready for members, open the hub from the **Hubs** page, then select **Settings** in the hub sidebar. Switch off **Private hub** under **General settings** and select **Save settings**.

<Warning>
  Making a private hub public later does not change its registration setting. Where the MIO-4519 Admin release and starter scaffold are enabled, the `starter` template enables registration at creation, even while the hub is private; members can sign themselves up after you make it public. If Admin falls back to bare hub creation, only a hub created public gets registration enabled automatically. For a bare hub created private, turn registration on with the CLI or API before inviting members, as described in [What publishing does not turn on](/guides/creating-a-hub#what-publishing-does-not-turn-on).
</Warning>

**With the API:** send a JSON:API envelope. `is_private` defaults to `true` when you leave it out. Note the trailing slash on the collection path, `/hubs/`.

```bash theme={null}
curl -s -X POST "$MIO_BASE_URL/api/v1/teams/$TEAM_ID/hubs/" \
  -H "Authorization: Bearer $MIO_ACCESS_TOKEN" \
  -H "Content-Type: application/vnd.api+json" \
  -H "Accept: application/vnd.api+json" \
  -d '{
    "data": {
      "type": "hubs",
      "attributes": {
        "title": "Member Academy",
        "slug": "member-academy",
        "description": "Courses and community for our members.",
        "is_private": true
      }
    }
  }' | jq '.data | {id, slug: .attributes.slug, is_private: .attributes.is_private}'
```

Success is `201`. Read the slug back from the response, because it has a suffix when the one you asked for was taken:

```json theme={null}
{
  "id": "0197...",
  "slug": "member-academy",
  "is_private": true
}
```

A slug that breaks the rules above returns `422`.

Reference: [Admin create hub](/api-reference/hubs-admin/admin-create-hub)

## 4. Open or manage a hub

**In the admin:** select **Hubs** in the sidebar. The page, titled **All hubs**, lists your hubs under **Your hubs**. Each row shows the hub's name and slug. Under it are **Private** or **Public** with "Updated {date}", and the row actions:

* Select the row itself, or **Manage**, to open the hub workspace. It opens on the hub's **Home** page. The hub sidebar has the other areas, including **Pages**, **Members**, **Payments** and **Settings**. Pages remain listed in the admin, where you can create or delete them. To open a page on the member-facing hub, select its title or choose **View page** from its **More options** menu; supported destinations open in a new tab. Some page rows have no **View page** action. Hub owners can edit supported home, custom, and sales pages in the hub's inline editor: open the page while signed in to the hub as its owner and select the floating **Edit** button. Editing is not available in the platform admin. The editor is part of the mio-hub release, so its availability depends on the hub environment. The CLI and API remain options for authoring page trees.
* A new, unpublished page is not visible to public visitors or members. Its signed-in hub owner can open the draft in the hub editor; other visitors may see not found until the page is published.
* **Open hub** opens the member-facing hub in a new tab.
* In the hub sidebar, choose **Settings** to open **General settings**, where you can change its **Hub name**, **Slug**, **Description (optional)**, and **Private hub** setting, then select **Save settings**.

In the workspace sidebar, **View hub** opens the member-facing hub in a new tab. The hub row's **Open hub**, workspace **View hub**, and page **View page** links use the hub origin configured for the current admin environment. These external links are not shown when no origin is configured.

Opening a hub page does not sign you in as a hub contact. Public pages can be viewed without a hub session; a private hub or member-only page may require you to sign in through the hub's existing sign-in flow.

The row's **More options** menu has **Copy slug** and **Delete hub**. To delete, type the hub's exact name in the confirmation dialog; **Delete hub** stays disabled until it matches. You can also delete from **Settings** → **Danger zone**. See [Delete a hub](/guides/creating-a-hub#delete-a-hub).

If you have no hubs yet, the page shows **No hubs yet** with a **Create hub** button. If you have many hubs, select **Load more** at the bottom of the list to see the rest.

**With the API:** list your hubs. The API does not return a hub's public address, so build it from the slug:

```bash theme={null}
curl -s "$MIO_BASE_URL/api/v1/teams/$TEAM_ID/hubs/" \
  -H "Authorization: Bearer $MIO_ACCESS_TOKEN" \
  -H "Accept: application/vnd.api+json" \
  | jq -r '.data[] | "\(.attributes.title)  https://hub.member.dev/\(.attributes.slug)"'
```

The list is paginated. See [Pagination and filtering](/reference/pagination-filtering).

Reference: [Admin list hubs](/api-reference/hubs-admin/admin-list-hubs) · [Admin update hub](/api-reference/hubs-admin/admin-update-hub)

## 5. Find your way around

On a desktop, the sidebar on the left of every admin page has:

| Item | What it opens |
| - | - |
| **Dashboard** | An overview of the alerts that need you and your hubs. See [The admin Dashboard](/guides/admin-dashboard). |
| **Hubs** | Your team's hubs, as in [step 4](#4-open-or-manage-a-hub). |
| **Library** | Your team's media library: upload files, organize them in folders, and build playlists. |
| **Contacts** | Your team's contacts. |
| **Notifications** | The alerts open for your team. |
| **Docs** | These docs, in a new tab. |
| **Account** | Opens the account menu. Select **Account settings** for your profile and team settings, in five sections: team, profile & security, payment accounts, developer tools, and billing. Select **API keys** for your team's keys. See [The Account area](/guides/platform-account#the-account-area). |

The **Account** row at the bottom of the sidebar opens the **account menu**. It shows **Team: {name}**. If you belong to several teams, open that row to switch teams; with one team, the row simply shows its name. You can also pick a **Light**, **Dark**, or **System** theme, go back to **Getting started**, open **API keys**, open **Account settings**, or **Log out**. See [Your account and team](/guides/platform-account).

On a phone, the sidebar is hidden. Tap **Menu** in the bar at the bottom of the screen to open the same items, with the account menu at the bottom.

<Note>
  The admin is in alpha. Some hub sections are still unavailable and are hidden from the hub sidebar. The **API keys** page is available now, but only the team owner can manage keys. An API key cannot create another key.
</Note>

## Next steps

* [Create a hub](/guides/creating-a-hub): build out the hub's pages, branding, and content with the `mio` CLI, then publish it.
* [Hub settings in the admin](/guides/admin-hub-settings): change a hub's basics, sign-up rules, domain, email, policies, redirect origins, and footer.
* [Media workflow](/guides/media-workflow#the-folder-tree-and-library-pages): the Library's folder tree, playlists, and settings.
* [Manage API keys in the admin](/guides/platform-api-keys): create a team API key for your integration or the CLI. See the [API keys reference](/reference/api-keys) for the endpoint details.
* [Manage hub members in the admin](/guides/admin-members): see who belongs to a hub, change roles, and open a member's billing and history.
* [Manage contacts in the admin](/guides/admin-contacts): manage your team's contacts, tags, attributes, and segments.
* [Hub Home in the admin](/guides/admin-hub-home): the stats, alerts, and setup steps on a hub's first page.
* [Notifications in the admin](/guides/admin-notifications): the open alerts for your team and where to fix them.
* [Sign in as a creator](/guides/platform-login): the platform sign-in flow for your own tools.
* [Authentication](/concepts/authentication): when to use a platform JWT, a contact JWT, or a team API key.
* [Tenancy](/concepts/tenancy): how teams and hubs scope your data.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.