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

# Create Wallet

> This endpoint creates a wallet.

On Giro, there are two types of wallets: Primary and Secondary.

Primary wallets are designed specifically for your personal use. Secondary wallets, on the other hand, are created to assign to your users, customers, or yourself if needed. You can have up to five primary wallets at any time. However, secondary wallets have no current creation limit.

This gives you flexibility in managing both personal and customer transactions efficiently.

`POST {{baseurl}}/virtual-accounts`

<Tabs>
  <Tab title="Staging">`https://gw.stg.girostack.com/v1`</Tab>
  <Tab title="Production">`https://gw.prod.girostack.com/v1`</Tab>
</Tabs>

<Card title="Headers">
  <ParamField body="x-giro-key" type="string" required>
    Pass your account's secret key as the value.
  </ParamField>
</Card>

<Note>
  `emailAddress` and `mobile` are only required to create Secondary wallets.
</Note>

<Card title="Body Params">
  <ParamField body="accountName" type="string" required />

  <ParamField body="category" type="string" required>
    category can either be `primary` or `secondary`
  </ParamField>

  <ParamField body="currency" type="string" required>
    Value should be `NGN`
  </ParamField>

  <ParamField body="emailAddress" type="string" required>
    Value should be a valid email address
  </ParamField>

  <ParamField body="mobile" type="object" required>
    The mobile number of the customer

    ```
     {
            "phoneNumber": "08142351599",
            "isoCode": "NG"
    }
    ```
  </ParamField>
</Card>

<RequestExample>
  ```bash cURL theme={null}
  curl --location --request POST '{{API_BASE_URL}}/virtual-accounts' \
  --header 'x-giro-key: {{SECRET_KEY}}' \
  --header 'Content-Type: application/json' \
  --data '{
      "accountName": "John Doe",
      "category": "primary",
      "currency": "NGN"
  }'
  ```

  ```javascript Node.JS theme={null}
  const fetch = require("node-fetch");

  const url = "{{API_BASE_URL}}/virtual-accounts";
  const headers = {
    "x-giro-key": "{{SECRET_KEY}}",
    "Content-Type": "application/json",
  };
  const body = JSON.stringify({
    accountName: "John Doe",
    category: "primary",
    currency: "NGN",
  });

  fetch(url, {
    method: "POST",
    headers: headers,
    body: body,
  })
    .then((response) => response.json())
    .then((data) => console.log(data))
    .catch((error) => console.error("Error:", error));
  ```

  ```php PHP theme={null}
  <?php
  $curl = curl_init();

  curl_setopt_array($curl, array(
    CURLOPT_URL => '{{API_BASE_URL}}/virtual-accounts',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => array(
      'x-giro-key: {{SECRET_KEY}}',
      'Content-Type: application/json'
    ),
    CURLOPT_POSTFIELDS => json_encode(array(
      'accountName' => 'John Doe',
      'category' => 'primary',
      'currency' => 'NGN'
    ))
  ));

  $response = curl_exec($curl);
  $httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);

  if (curl_errno($curl)) {
    echo 'Error: ' . curl_error($curl);
  } else {
    echo "Response Code: $httpcode\n";
    echo $response;
  }

  curl_close($curl);
  ?>
  ```
</RequestExample>

<ResponseExample>
  ```json 201 OK theme={null}
  {
    "meta": {
      "statusCode": 201,
      "success": true,
      "message": "VirtualAccount successfully created"
    },
    "data": {
      "publicId": "vba-19aeceea-1bd6-4e85-89fa-2ca0b1c57d61",
      "auth": "65b12bbf512f9932b67f53d7",
      "account": "65b12bbf36e38c6bfbe35f95",
      "accountName": "John Doe",
      "accountNumber": "7481018744",
      "bankName": "Source MFB",
      "bankCode": "090641",
      "live": true,
      "isFavourite": true,
      "processor": "source",
      "category": "primary",
      "id": 1,
      "createdAt": "2024-04-20T19:50:16.880Z",
      "updatedAt": "2024-04-20T19:50:16.880Z",
      "balance": 0,
      "currency": "NGN",
      "lastUpdated": "2024-04-20T19:50:16.880Z"
    }
  }
  ```

  ```json 400 Bad Request theme={null}
  {
    "meta": {
      "statusCode": 400,
      "error": {
        "statusCode": 400,
        "message": "Virtual Account name already exist"
      }
    }
  }
  ```
</ResponseExample>
