# Sign Up to the Card Program

> Coming soon, upon request — this feature is turned on for your tenant by the Aurea team. [Contact us](https://www.aureahub.com/contact)

Register the signed-in user with the card program, after [Sign In](https://docs.aureahub.com/docs/cards-auth-challenge.md) answered `isExistingGnosisUser` `false`.

## Overview

- The account takes the email of the user's Aurea profile (a user with none gets a stand-in address). The body can be empty.
- The card program answers a full session, which replaces the one of Sign In; the answer is the card program's.
- **An account that already exists** answers `200` with `alreadyRegistered` `true` and the account in `userData`. When the session still cannot read it, the answer is `{ "alreadyRegistered": true, "requiresReAuth": true }`: sign in again.
- `403` `CARD_PROGRAM_SESSION_EXPIRED` without a session.
- **Illustrative example.** The card program's answer is passed through unchanged and may carry fields not listed here: the example shows only the fields Aurea or its own app reads. Ignore the fields you do not know.

## Endpoint

### `POST /v1/gnosis/auth/signup`

Authentication: bearer token required.

Registers the user with the card program.

**Request body**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `email` | string | no | Not used: the account takes the email of the user's Aurea profile |

**Responses**

`200` Registered (illustrative)

```json
{
  "token": "eyJhbGciOi…"
}
```

`200` Already Registered (illustrative)

```json
{
  "alreadyRegistered": true,
  "userData": { "kycStatus": "pending", "isSourceOfFundsAnswered": false, "isPhoneValidated": false }
}
```

**Example request**

```bash
curl -X POST https://api.aureahub.com/v1/gnosis/auth/signup \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}'
```

---

Web version: https://docs.aureahub.com/#cards-auth-signup
