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

# Quick Start

> Create your first onramp or offramp and track the first deposit

## Prerequisites

<Steps>
  <Step title="Get API keys">
    Sign up at [dashboard.daya.co](https://dashboard.daya.co) and generate sandbox API keys.
  </Step>

  <Step title="Create or choose a customer">
    Funding accounts are created for existing customers. Create one with [`POST /v1/customers`](/api-reference/customers/create-customer) or use a customer you already have.
  </Step>

  <Step title="Verify connectivity">
    ```bash theme={null}
    curl https://api.sandbox.daya.co/health
    ```
  </Step>
</Steps>

***

Pick the receive flow you want to test:

<Tabs>
  <Tab title="Onramp">
    ## Create an onramp

    Create a temporary onramp to accept NGN and settle to your Daya balance. Daya returns bank account details your customer can pay into.

    <CodeGroup>
      ```bash cURL theme={null}
      curl --request POST \
        --url https://api.sandbox.daya.co/v1/funding-accounts \
        --header 'X-Api-Key: YOUR_SANDBOX_API_KEY' \
        --header 'X-Idempotency-Key: ngn-onramp-001' \
        --header 'Content-Type: application/json' \
        --data '{
          "type": "TEMPORARY",
          "rail": "NGN_VIRTUAL_ACCOUNT",
          "customer": {
            "customer_id": "650e8400-e29b-41d4-a716-446655440000"
          },
          "currency": "NGN",
          "amount": 50000,
          "settlement_destination": {
            "type": "INTERNAL_BALANCE"
          }
        }'
      ```

      ```javascript JavaScript theme={null}
      const fundingAccount = await fetch('https://api.sandbox.daya.co/v1/funding-accounts', {
        method: 'POST',
        headers: {
          'X-Api-Key': 'YOUR_SANDBOX_API_KEY',
          'X-Idempotency-Key': 'ngn-onramp-001',
          'Content-Type': 'application/json'
        },
        body: JSON.stringify({
          type: 'TEMPORARY',
          rail: 'NGN_VIRTUAL_ACCOUNT',
          customer: {
            customer_id: '650e8400-e29b-41d4-a716-446655440000'
          },
          currency: 'NGN',
          amount: 50000,
          settlement_destination: {
            type: 'INTERNAL_BALANCE'
          }
        })
      }).then((response) => response.json());
      ```
    </CodeGroup>

    Example response:

    ```json theme={null}
    {
      "object": "funding_account",
      "id": "750e8400-e29b-41d4-a716-446655440100",
      "type": "TEMPORARY",
      "status": "ACTIVE",
      "rail": "NGN_VIRTUAL_ACCOUNT",
      "customer_id": "650e8400-e29b-41d4-a716-446655440000",
      "currency": "NGN",
      "amount": 50000,
      "settlement_destination": {
        "type": "INTERNAL_BALANCE"
      },
      "instructions": [
        {
          "type": "NGN_VIRTUAL_ACCOUNT",
          "status": "ACTIVE",
          "bank_name": "Wema Bank",
          "bank_code": "035",
          "account_number": "0690000031",
          "account_name": "Daya - Customer",
          "currency": "NGN"
        }
      ],
      "expires_at": "2026-01-14T15:25:12Z"
    }
    ```

    Show the `instructions` bank details to your customer. When the customer pays, reconcile deposits with `/v1/deposits` and match rows by `funding_account_id`:

    ```bash theme={null}
    curl --request GET \
      --url 'https://api.sandbox.daya.co/v1/deposits' \
      --header 'X-Api-Key: YOUR_SANDBOX_API_KEY'
    ```
  </Tab>

  <Tab title="Offramp">
    ## Create an offramp

    First resolve the destination bank account:

    ```bash theme={null}
    curl --request POST \
      --url https://api.sandbox.daya.co/v1/banks/resolve \
      --header 'X-Api-Key: YOUR_SANDBOX_API_KEY' \
      --header 'Content-Type: application/json' \
      --data '{
        "account_number": "0690000031",
        "bank_code": "044"
      }'
    ```

    Then create a temporary offramp to accept stablecoins and settle as an NGN payout.

    <CodeGroup>
      ```bash cURL theme={null}
      curl --request POST \
        --url https://api.sandbox.daya.co/v1/funding-accounts \
        --header 'X-Api-Key: YOUR_SANDBOX_API_KEY' \
        --header 'X-Idempotency-Key: crypto-offramp-001' \
        --header 'Content-Type: application/json' \
        --data '{
          "type": "TEMPORARY",
          "rail": "CRYPTO_ADDRESS",
          "customer": {
            "customer_id": "650e8400-e29b-41d4-a716-446655440000"
          },
          "asset": "USDC",
          "chain": "BASE",
          "settlement_destination": {
            "type": "NGN_PAYOUT",
            "rate_id": "550e8400-e29b-41d4-a716-446655440000",
            "destination_bank": {
              "account_number": "0690000031",
              "bank_code": "044"
            }
          }
        }'
      ```

      ```javascript JavaScript theme={null}
      const fundingAccount = await fetch('https://api.sandbox.daya.co/v1/funding-accounts', {
        method: 'POST',
        headers: {
          'X-Api-Key': 'YOUR_SANDBOX_API_KEY',
          'X-Idempotency-Key': 'crypto-offramp-001',
          'Content-Type': 'application/json'
        },
        body: JSON.stringify({
          type: 'TEMPORARY',
          rail: 'CRYPTO_ADDRESS',
          customer: {
            customer_id: '650e8400-e29b-41d4-a716-446655440000'
          },
          asset: 'USDC',
          chain: 'BASE',
          settlement_destination: {
            type: 'NGN_PAYOUT',
            rate_id: '550e8400-e29b-41d4-a716-446655440000',
            destination_bank: {
              account_number: '0690000031',
              bank_code: '044'
            }
          }
        })
      }).then((response) => response.json());
      ```
    </CodeGroup>

    Example response:

    ```json theme={null}
    {
      "object": "funding_account",
      "id": "750e8400-e29b-41d4-a716-446655440200",
      "type": "TEMPORARY",
      "status": "ACTIVE",
      "rail": "CRYPTO_ADDRESS",
      "customer_id": "650e8400-e29b-41d4-a716-446655440000",
      "asset": "USDC",
      "chain": "BASE",
      "settlement_destination": {
        "type": "NGN_PAYOUT",
        "destination_currency": "NGN",
        "destination_bank": {
          "account_number": "0690000031",
          "bank_code": "044"
        }
      },
      "instructions": [
        {
          "type": "CRYPTO_ADDRESS",
          "status": "ACTIVE",
          "address": "0x742d35cc6634c0532925a3b844bc9e7595f2bd18",
          "chain": "BASE"
        }
      ]
    }
    ```

    Show the crypto address to your customer. When crypto lands, reconcile deposits with `/v1/deposits` and match rows by `funding_account_id`:

    ```bash theme={null}
    curl --request GET \
      --url 'https://api.sandbox.daya.co/v1/deposits' \
      --header 'X-Api-Key: YOUR_SANDBOX_API_KEY'
    ```
  </Tab>
</Tabs>

## Track with Webhooks

Subscribe to webhook events so your system updates without polling.

| Event                     | Use it for                                  |
| ------------------------- | ------------------------------------------- |
| `funding_account.active`  | Show payment details to the customer        |
| `funding_account.failed`  | Stop the flow and ask the customer to retry |
| `deposit.received`        | Mark incoming funds as detected             |
| `deposit.processing`      | Settlement has started                      |
| `deposit.completed`       | Settlement reached its destination          |
| `deposit.requires_review` | The deposit needs review before continuing  |
| `deposit.failed`          | The deposit failed                          |

## Next Steps

<CardGroup cols={3}>
  <Card title="Funding Accounts" icon="landmark" href="/concepts/funding-accounts">
    Learn the receive-money model.
  </Card>

  <Card title="Create Funding Account" icon="plus" href="/api-reference/funding-accounts/create-funding-account">
    See every request field.
  </Card>

  <Card title="Deposits API" icon="money-bill-transfer" href="/api-reference/deposits/list-deposits">
    Reconcile incoming money.
  </Card>
</CardGroup>
