Prerequisites
Confirm the following before connecting:- A Cubby Storage API key with permission to call the endpoints DualEntry uses: organizations search, facilities, units, customers, payments, access codes, ledgers, leases, notes, and the cash GL report (when running in cash-based mode).
- A DualEntry company assigned to the integration. The integration list filters on integrations that have a company set, so an integration without a company won’t surface in the UI.
- Your chart of accounts configured in DualEntry. After the initial sync, DualEntry creates account records derived from Cubby data that you map to your GL accounts.
- A decision on whether to use cash-based or accrual-based accounting before the first sync - the choice changes which Cubby endpoints DualEntry pulls.
Choose cash-based or accrual-based mode
Cubby exposes accounting activity in two distinct shapes, and DualEntry supports either but not both at once for the same integration. Pick the mode before connecting; switching later requires a resync and may produce duplicate or out-of-order journal entries until the historical data is reconciled.- Cash-based mode pulls Cubby’s general-ledger cash report. DualEntry creates journal entries that reflect cash movements only - payments received, refunds, transfers - and ignores accrual-side activity like charges and write-offs.
- Accrual-based mode pulls Cubby’s ledger entries. DualEntry creates journal entries for charges, payments, write-offs, and transfers, matching Cubby’s accrual ledger. Use this mode if you reconcile against Cubby’s accrual books rather than its cash report.
How to connect
The integration uses a Bearer token - the Cubby API key - for authentication. You provide the key in DualEntry; DualEntry stores it encrypted and sends it on every request to Cubby asAuthorization: Bearer <api_key>.
- In DualEntry, navigate to Settings → Integrations → Cubby Storage.
- Provide your Cubby Storage API key.
- Set a DualEntry company on the integration so it’s scoped to a single entity (required to complete setup - see Prerequisites).
- Choose Save. DualEntry queues the initial sync: authenticate, then pre-setup - discover the Cubby organization, sync facilities and companies, pull cash reports or ledger entries depending on the chosen mode, then sync the account records derived from that data.
- In the integration’s mapping screens, map every Cubby facility and Cubby company to its DualEntry counterpart, and map every account (including at least one payment-method account - the GL account where Cubby payments post, such as an Undeposited Funds or bank-clearing account).
- Choose Validate to confirm credentials and readiness. DualEntry checks that the integration is connected, every required mapping is filled in, and the integration has a company assigned. A successful validation returns a confirmation; an incomplete one tells you which mapping is still missing.
What syncs
Each sync run pulls the following Cubby data into DualEntry:
Cubby’s cash and ledger histories can extend years back. To bound the import window, configure the cash-report start date (cash-based mode) or the ledger-entry start date (accrual-based mode) so DualEntry only pulls data on or after that date.
How sync runs
Once setup is complete, sync runs continue automatically. A few behaviors to know about:- Sync only runs when the integration status is Connected. Disconnected or pending integrations are skipped.
- Listing the integration in the UI may enqueue a sync when appropriate (for example, a first-time backfill).
- Cubby provider calls retry up to three times on transient HTTP errors before surfacing the failure.
- If the API key returns multiple Cubby organizations, the integration uses the first result by default and logs a warning. If you need a specific organization, ensure it appears first in Cubby’s response, or contact DualEntry support to seed the correct organization ID on the integration.
Troubleshoot sync errors
When a record fails to sync or validation fails, the most common causes:FAQ
Does DualEntry write back to Cubby?
No. The integration is pull-only. Cubby remains the system of record for operational data; DualEntry only mirrors the accounting impact.Can I use both cash reports and ledger entries on the same integration?
No. The two modes are mutually exclusive - they describe the same activity from different viewpoints, so combining them would produce duplicate journal entries. The integration enforces this at setup and refuses to run if both are enabled.What if my Cubby account spans multiple organizations?
The integration uses the first organization returned by Cubby’s organization search and logs a warning if more than one exists. Multi-organization scoping isn’t currently a self-service setting; contact DualEntry support to seed a specific organization ID on the integration.For maintainers
The details below describe deployment and connector configuration, not user-facing features.- API host:
CUBBY_STORAGE_BASE_URL(production) orCUBBY_STORAGE_SANDBOX_BASE_URL(sandbox), selected by environment inprovider.py. - Mode setting key:
CUBBY_STORAGE_INTEGRATION_TYPE, with valuescash_basedoraccrual_based(CubbyIntegrationTypeenum incubby_sync_service.py). - Date-window setting keys:
CUBBY_STORAGE_CASH_REPORT_START_DATEandCUBBY_STORAGE_LEDGER_ENTRY_START_DATE. - Internal validate endpoint:
POST /api/integrations/cubby/{integration_id}/validate/invokesCubbyStorageSyncService.validate(). Returns200with a success message when valid;424when setup is incomplete or validation fails. - Sync lock: scheduled syncs run through
sync_with_lock, which short-circuits unless the integration status isCONNECTED. - Ledger entry processing dispatches by
LedgerEntryType-CHARGE,PAYMENT,WRITE_OFF,TRANSFER- each with its own handler incubby_sync_service.py.
