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

# Quickstart: DualEntry Public API

> Get a DualEntry API key, make your first authenticated request to the Public API, and confirm the response, all in under five minutes.

Make your first authenticated call to the DualEntry Public API in under five minutes. By the end, you'll have a working API key and a successful response from a live endpoint.

## Get an API key

Ask your DualEntry administrator to generate an API key for you, or see [Give an integration access](./how-to-give-an-integration-access) if you're the administrator. Every request authenticates with this key in the `X-API-KEY` header. There's no OAuth flow or token exchange to set up.

## Make your first request

Request the invoices collection. Replace `your_api_key_here` with your real key.

<Tabs>
  <Tab title="cURL">
    ```bash theme={null}
    curl https://api.dualentry.com/public/v2/invoices \
      -H "X-API-KEY: your_api_key_here" \
      -H "Content-Type: application/json"
    ```
  </Tab>

  <Tab title="Python">
    ```python theme={null}
    import requests

    headers = {
        "X-API-KEY": "your_api_key_here",
        "Content-Type": "application/json"
    }

    response = requests.get("https://api.dualentry.com/public/v2/invoices", headers=headers)
    print(response.json())
    ```
  </Tab>

  <Tab title="JavaScript">
    ```javascript theme={null}
    fetch('https://api.dualentry.com/public/v2/invoices', {
      headers: {
        'X-API-KEY': 'your_api_key_here',
        'Content-Type': 'application/json'
      }
    })
    .then(response => response.json())
    .then(data => console.log(data));
    ```
  </Tab>
</Tabs>

A successful response returns a `200` status with a paginated list of invoices:

```json theme={null}
{
  "items": [
    { "id": 123, "number": "INV-1001", "amount": "..." }
  ],
  "cursor": null
}
```

<Warning>
  A `403` here almost always means the key is missing a role. See [Errors](./errors) for the full list of failure responses.
</Warning>

## What you can build

* **Financial transactions**: create and manage invoices, bills, payments, journal entries, and purchase orders.
* **Customer and vendor management**: maintain customer and vendor records with complete contact and payment term information.
* **Chart of Accounts**: configure and manage your accounting structure with accounts, items, and classifications.
* **Automation**: set up recurring transactions for subscriptions, rent, and other regular financial activities.
* **Bank Connections inbound**: push bank transactions from your own systems into DualEntry with `/public/v2/bank-connections/`. See [Bank Connections inbound](./bank-connections-inbound).

## Base URLs

The API is available in production and a separate development environment, each with its own base URL.

| Environment     | URL                             |
| --------------- | ------------------------------- |
| **Production**  | `https://api.dualentry.com`     |
| **Development** | `https://api-dev.dualentry.com` |

<Info>
  All API requests use HTTPS. The API accepts and returns JSON-formatted data.
</Info>

## Next steps

* **[Introduction](./introduction)**: API versioning, resource coverage, and what V2 adds over V1.
* **[Authentication](./authentication)**: key statuses, roles, and how authorization failures are reported.
* **[API Reference](/developers/api/resources-v2/invoices/list-invoice-records)**: every endpoint, request and response schema, and parameter.
