---
title: "Quickstart"
description: "Create an API key and make your first calls to the Sureshake API with curl."
---

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

# Quickstart

By the end of this page you will have an API key, you will have read your own organizations with it, and you will have searched the public directory.

You need a Sureshake account ([create one](/start/create-your-account/) if you don't have one), `curl`, and optionally `jq` to read the output.

1. **Create an API key**

   1. Sign in and open [Settings](https://sureshake.com/settings).
   2. Open the **Security** section.
   3. Under **API Keys**, select **Create API Key**.
   4. Enter a **Key Name**. Leave **Permissions** set to **Read**.
   5. Select **Create Key**, then copy the key.

   The key starts with `sk_`. Sureshake shows it once, so store it before you select **Done**.
2. **Put the key in your shell**

   ```sh
   export SURESHAKE_API_KEY="sk_..."
   ```

   Keep it out of source control and out of browser code.
3. **Read your organizations**

   ```sh
   curl -sS https://api.sureshake.com/v2/organizations/me \
     -H "X-API-Key: $SURESHAKE_API_KEY"
   ```

   A `200` response means your key works. `data` lists the organizations you are an active member of, and it is an empty array if you have none:

   ```json
   {
     "data": [
       {
         "id": "org-acme-holdings",
         "name": "Acme Holdings",
         "slug": "acme-holdings",
         "status": "active",
         "createdAt": "2026-11-03T18:00:00.000Z",
         "updatedAt": "2026-11-03T18:00:00.000Z",
         "myRole": "owner",
         "activeMemberCount": 3,
         "pendingMemberCount": 0
       }
     ],
     "meta": { "total": 1, "limit": 100, "offset": 0, "hasMore": false }
   }
   ```

   See [`GET /v2/organizations/me`](/reference/organization-list-my-organizations/) for every field.
4. **Search the directory**

   ```sh
   curl -sS "https://api.sureshake.com/v2/directory?query=acme&limit=5" \
     -H "X-API-Key: $SURESHAKE_API_KEY" \
     | jq '.data[] | {slug, name: .snapshot.identity.displayName}, .pagination'
   ```

   You get one object per published listing, then the paging details:

   ```json
   { "slug": "acme-saas-inc-6b81a75d", "name": "Acme SaaS Inc." }
   { "nextCursor": "eyJzIjoi...", "hasMore": true, "limit": 5 }
   ```

   To get the next page, pass `nextCursor` back as `cursor`. See [`GET /v2/directory`](/reference/directory/list/) for the filters.

## If a call fails

| Response                                           | What it means                                    | What to do                                                                                       |
| -------------------------------------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
| `401` with `Invalid or expired API key`            | The key is wrong, revoked or expired             | Check the value, or create a new key                                                             |
| `401` with `Authentication failed.`                | This route does not accept API keys              | See [which routes accept an API key](/developers/authentication/#which-routes-accept-an-api-key) |
| `403` with `API key scope 'read' is not permitted` | The route changes data and your key is read-only | Create a key with **Write** permission                                                           |
| `400` with `FST_ERR_VALIDATION`                    | A parameter or the body is invalid               | The `message` lists the problem fields                                                           |

> **The directory does not reject a bad key**
>
> Public directory routes also work without a credential, so an invalid key on
> `GET /v2/directory` still returns `200`, as an anonymous request. Use `GET
>   /v2/organizations/me` to check that a key is valid.

## Next

- Learn the [response formats, errors, pagination and rate limits](/developers/authentication/#response-formats).
- See [everything a key can reach](/developers/authentication/#which-routes-accept-an-api-key).
- Browse the [API reference](/reference/).

Source: https://docs.sureshake.com/developers/quickstart/index.mdx
