# From signup to your first request

> The three steps between creating an account and getting your first job payload back, and what to do at each one.

Source: https://hyperjobs.io/help/first-request

Three things stand between you and a response: an account, a key, and a request.
This page covers the account part. The [quickstart](/docs/quickstart) covers the
request part in every language, and it's the page to have open once you have a
key.

<Steps>
  <Step title="Create an account">
    [Sign up](/register) with an email and password, or with Google. There's no
    credit card and no sales call — new accounts land on the **Free** plan with
    500 requests per calendar month.

    Use a real work address. Disposable-email domains are rejected at signup,
    and password resets and receipts go to whatever you register.
  </Step>

  <Step title="Create an API key">
    Open the [dashboard](/dashboard) and create a key. It looks like `hj_live_`
    followed by 48 hex characters.

    The full key is shown **once**, at creation. Copy it into your secret store
    before you close the dialog — we only keep a hash, so nobody can read it
    back to you later. See [managing API keys](/help/api-keys).
  </Step>

  <Step title="Make the call">
    Send the key as a bearer token:

    ```bash
    curl -H "Authorization: Bearer $HYPERJOBS_KEY" \
      "https://api.hyperjobs.io/v1/jobs?limit=1"
    ```

    A `200` with a `data` array means you're done. A `401` means the key is
    missing, malformed, unknown, or revoked — the response doesn't say which.

    The [quickstart](/docs/quickstart) has the same call in Node, Python, and Go,
    plus what the response fields mean.
  </Step>
</Steps>

## If the first call fails

Check `/v1/health` first — it needs no key, so it separates a network problem
from an auth problem:

```bash
curl https://api.hyperjobs.io/v1/health
```

If that returns `{ "ok": true, … }` and your authenticated call still `401`s,
the key is the problem, not the connection. [Authentication](/docs/authentication)
covers the failure modes, including the one that catches most people: calling
from browser JavaScript, where the `Authorization` header triggers a CORS
preflight that fails.

## Two things that will save you an afternoon

Both are documented properly elsewhere, but they cause enough confusion to
repeat here:

- **Descriptions are omitted by default.** The `description` key is *absent*
  unless you ask for it with `description_format=text` or `html`.
- **Comma-separated filters mean OR — except `skill`, which is AND.**
  `?skill=python,aws` returns jobs tagged both; every other multi-value filter
  matches any of its values. See [filtering](/docs/guides/filtering).

Validation is strict: an unknown parameter or a bad value returns a
[`400`](/docs/errors) that names the parameter, so a typo can't silently
masquerade as an empty result set.

## Next

<CardGroup cols={2}>
  <Card title="Quickstart" icon="Rocket" href="/docs/quickstart">
    The first request, in four languages.
  </Card>
  <Card title="Managing API keys" icon="KeyRound" href="/help/api-keys">
    Creating, naming, and revoking keys.
  </Card>
  <Card title="Your quota" icon="Gauge" href="/help/quotas">
    What the Free plan's 500 requests buy you.
  </Card>
  <Card title="Plans" icon="Receipt" href="/help/plans">
    When to move off Free, and what changes.
  </Card>
</CardGroup>
