---
title: Open an account
slug: tutorials/api/accounts/open-an-account
description: Walkthrough for POST core/v1/dda/accounts showing required fields and example responses.
docTags: 
createdAt: 2024-08-08T11:48:23.336Z
---

## What you will learn

✅ How to open a customer master account

CR provides a number of different types of accounts, including check and savings, Certificates of Deposit (CDs or time deposit accounts), and more.

To open any kind of account you must have a valid product ID for the type of account you want to open, and a customer ID (onboarded customer record ID) for the account holder. Note that the account holder must have at least one address and phone number in their customer record, and their OFAC status must be *Clear*. In addition, the classification of the customer must match the configured classification for the product. For example, only business customers can be added to a business product.

:::hint{type="info"}
If you are new to account management we recommend you read the [accounts](docId\:ZQyAf4oeI1rEzpBOI78MJ) documentation before starting this tutorial.

The tutorial assumes you have a knowledge of APIs and how they work. Refer to [API basics](docId\:pUTTCwQ5SKLzxYzIn5D1b) for more details.
:::

The tutorial uses this API endpoint:

| API                                                         | Description                            |
| ----------------------------------------------------------- | -------------------------------------- |
| [POST /core/v1/dda/accounts](docId\:abKDIZOKHXLSswzwrbBJ1)  | Opens a deposit account for a customer |

## Before you begin

Make sure you have:

- [API credentials](docId\:wmg-1Fqwq3bj-D3c3HFfs)&#x20;
- Partner ID
- Customer ID (only available once the customer is [onboarded](docId\:iXWQHkcTI4dw4d_LoutGh))
- [Product ID](docId\:A4xk-yBQUtIA6tNQ5oJKf) (defines the type of account being opened)
- [Registered](docId\:BN5XtgkJogBe-CtwomCbS) the following webhook event:

| Webhook               | Description              |
| --------------------- | ------------------------ |
| `Core.Account.Opened` | A new account was opened |

:::hint{type="warning"}
**IMPORTANT**
We highly recommend you include an idempotency key in your request header to provide duplicate protection in the event of a failure. Read more about [idempotency keys](docId\:xQC2lRsG0xVv_9NMkqxKk).
:::

## Register the relevant webhook events

To receive the webhook events for this tutorial both partner accounts need to [register](docId\:BN5XtgkJogBe-CtwomCbS) each specific webhook event type. Once you are registered, the event objects are sent to the registered URLs.

The event object contains a list of resource identifiers used to download details on each event.

## Open an account

This tutorial shows you how to create a deposit account. In this scenario, you'll open an account for Jerry Penn, a customer who you successfully onboarded.

:::hint{type="info"}
Closed accounts can only be re-opened by the CR Ops teams. To re-open an account please open a [support ticket.](https://crossriver.service-now.com/csm?id=cos_sandbox_request_form\&sys_id=713de878c300b5105d3eafdc7a013184\&sysparm_category=df09f2623310c2906b697d934d5c7b4a)
:::

**To open an account**

:::::WorkflowBlock
::::WorkflowBlockItem
Call `POST /v1/dda/accounts`. For this call, some [attributes](docId\:abKDIZOKHXLSswzwrbBJ1) are required.&#x20;

:::CodeblockTabs
POST /core/v1/dda/accounts request

```curl
curl --location 'https://sandbox.crbcos.com/core/v1/dda/accounts' \
--header 'Idempotency-key: 025aaf3e-87e5-46e6-ba60-2071c3a69be8' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <token>' \
--data '{
  "customerId": "53c34cf0-4cd2-4768-937b-b30000dffdca",
  "productId": "83bed086-8182-4151-a1e3-af5b01362783",
  "title": "Jerry Penn",
  "statementAddress": {
    "street1": "12 Main St",
    "city": "New York",
    "state": "NY",
    "postalCode": "10001",
    "countryCode": "US"
  }
}
```
:::
::::

::::WorkflowBlockItem
A successful API call returns a JSON response with the details of the new account.

:::CodeblockTabs
POST /core/v1/dda/accounts response

```json
{
    "accountNumber": "2819503463",
    "status": "Active",
    "accountType": "Deposit",
    "ledgerType": "Passthrough",
    "classification": "Personal",
    "productType": "Checking",
    "productId": "83bed086-8182-4151-a1e3-af5b01362783",
    "title": "Jerry Penn",
    "currentBalance": 0,
    "holdAmount": 0,
    "transactionCount": 0,
    "availableBalance": 0,
    "creditLimit": 0,
    "overdraftFundingEnabled": false,
    "overdraftFundingThreshold": 0,
    "currency": "usd",
    "customerId": "53c34cf0-4cd2-4768-937b-b30000dffdca",
    "statementAddress": {
        "street1": "12 Main St",
        "city": "New York",
        "state": "NY",
        "postalCode": "10001",
        "countryCode": "US"
    },
    "openedAt": "2025-06-18T09:41:00.9073289-04:00",
    "lastMaintenanceAt": "2025-06-18T09:41:00.9073289-04:00",
    "partnerId": "cd9c12f4-7691-424a-b38b-af5b0134c611",
    "lastModifiedAt": "2025-06-18T09:41:00.9073289-04:00"
}
```
:::
::::

:::WorkflowBlockItem
The `accountNumber` field provides the account number for the new account.
:::

:::WorkflowBlockItem
In the response example, the account is classified as `Personal` because the user configured the product classification as **Personal**. The account classification always matches the configured product classification.
:::

::::WorkflowBlockItem
The account status is automatically updated to `Active`, and is immediately available for use. This triggers the `Core.Account.Opened` event.

:::CodeblockTabs
Core.Account.Opened Event Details

```json
{
  "id": "259cdbca-6a89-4af8-a50e-ada3010fb13f",
  "eventName": "Core.Account.Opened",
  "status": "Pending",
  "partnerId": "cd9c12f4-7691-424a-b38b-af5b0134c611",
  "createdAt": "2025-06-18T09:41:00.9073289-05:00",
  "resources": [
    "core/v1/dda/accounts/2819503463"
  ],
  "details": []
}
```
:::
::::
:::::

