{"openapi":"3.1.0","info":{"title":"GET /api/v1/transactions/by-date-range/preview","version":"1.0.0","description":"Preview a delete-by-date-range"},"servers":[{"url":"https://api.ondayzero.com","description":"Production"}],"paths":{"/api/v1/transactions/by-date-range/preview":{"get":{"tags":["transactions"],"summary":"Preview a delete-by-date-range","description":"Read-only blast-radius preview for ``DELETE /transactions/by-date-range``: how many transactions and journal entries would be removed, how many are reconciled or linked to invoice/bill payments, amount totals, a per-ledger breakdown, and whether the range is blocked by a closed accounting period. Nothing is modified.","operationId":"preview_delete_transactions_by_date_range","parameters":[{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Inclusive start date (YYYY-MM-DD).","title":"Start Date"},"description":"Inclusive start date (YYYY-MM-DD)."},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Inclusive end date (YYYY-MM-DD).","title":"End Date"},"description":"Inclusive end date (YYYY-MM-DD)."},{"name":"ledger_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional ledger ID to restrict the preview to a single bank account.","title":"Ledger Id"},"description":"Optional ledger ID to restrict the preview to a single bank account."},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-business-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Business-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope_TransactionDateRangeDeletePreviewResponse_"}}}},"400":{"description":"Bad Request - Invalid input","content":{"application/json":{"example":{"error":"validation_error","message":"Validation failed: due_date: Input should be a valid date","errors":{"due_date":"Input should be a valid date"},"code":"GEN_002","request_id":"3f0e7c2a-9b4d-4e1a-8c6f-2d5b7a1e9c30"},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Missing/invalid token or no access to this business","content":{"application/json":{"example":{"error":"unauthorized","message":"Authentication required","code":"AUTH_001","request_id":"3f0e7c2a-9b4d-4e1a-8c6f-2d5b7a1e9c30"},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions","content":{"application/json":{"example":{"error":"forbidden","message":"You don't have permission to access this resource","code":"AUTH_002","request_id":"3f0e7c2a-9b4d-4e1a-8c6f-2d5b7a1e9c30"},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found - Resource does not exist","content":{"application/json":{"example":{"error":"not_found","message":"Resource not found","code":"NOT_FOUND_001","request_id":"3f0e7c2a-9b4d-4e1a-8c6f-2d5b7a1e9c30"},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":"validation_error","message":"Validation failed: amount: Input should be a valid integer","errors":{"amount":"Input should be a valid integer"},"code":"GEN_002","request_id":"3f0e7c2a-9b4d-4e1a-8c6f-2d5b7a1e9c30"}}}}},"x-fastapi-operation-id":"preview_delete_transactions_by_date_range_api_v1_transactions_by_date_range_preview_get"}}},"components":{"schemas":{"DateRangeDeleteLedgerImpact":{"properties":{"ledger_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ledger Id","description":"Ledger UUID (None if unassigned)."},"ledger_name":{"type":"string","title":"Ledger Name","description":"Ledger display name."},"transactions":{"type":"integer","title":"Transactions","description":"Transactions in this ledger that would be deleted.","default":0}},"type":"object","required":["ledger_name"],"title":"DateRangeDeleteLedgerImpact","description":"Per-ledger slice of a date-range delete preview."},"SuccessEnvelope_TransactionDateRangeDeletePreviewResponse_":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"data":{"anyOf":[{"$ref":"#/components/schemas/TransactionDateRangeDeletePreviewResponse"},{"type":"null"}]}},"additionalProperties":true,"type":"object","title":"SuccessEnvelope[TransactionDateRangeDeletePreviewResponse]"},"TransactionDateRangeDeletePreviewResponse":{"properties":{"start_date":{"type":"string","title":"Start Date","description":"Inclusive start date (YYYY-MM-DD)."},"end_date":{"type":"string","title":"End Date","description":"Inclusive end date (YYYY-MM-DD)."},"ledger_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Ledger Ids","description":"Ledger IDs the preview was restricted to, if any."},"transactions":{"type":"integer","title":"Transactions","description":"Transactions that would be permanently deleted.","default":0},"journal_entries":{"type":"integer","title":"Journal Entries","description":"Journal entries that would become orphaned and be deleted (manual entries excluded).","default":0},"manual_journal_entries_preserved":{"type":"integer","title":"Manual Journal Entries Preserved","description":"Orphaned manual journal entries that are kept (user-authored GL entries survive).","default":0},"reconciled_transactions":{"type":"integer","title":"Reconciled Transactions","description":"Transactions already marked reconciled that would be deleted.","default":0},"teal_transactions":{"type":"integer","title":"Teal Transactions","description":"Transactions that also exist in Teal and would be removed remotely.","default":0},"linked_invoice_payments":{"type":"integer","title":"Linked Invoice Payments","description":"Distinct invoices whose payment links would be severed.","default":0},"linked_bill_payments":{"type":"integer","title":"Linked Bill Payments","description":"Distinct bills whose payment links would be severed.","default":0},"inflow_total":{"type":"integer","title":"Inflow Total","description":"Sum of positive transaction amounts (cents).","default":0},"outflow_total":{"type":"integer","title":"Outflow Total","description":"Sum of negative transaction amounts, as a positive number (cents).","default":0},"earliest_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Earliest Date","description":"Earliest transaction date in range."},"latest_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Latest Date","description":"Latest transaction date in range."},"ledgers":{"items":{"$ref":"#/components/schemas/DateRangeDeleteLedgerImpact"},"type":"array","title":"Ledgers","description":"Per-ledger breakdown, largest first."},"closed_period_conflict":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Closed Period Conflict","description":"Set when the range overlaps a closed/locked accounting period. The delete endpoint will refuse the request until the period is reopened or the range narrowed."}},"additionalProperties":true,"type":"object","required":["start_date","end_date"],"title":"TransactionDateRangeDeletePreviewResponse","description":"Response for ``preview_delete_transactions_in_date_range``."},"ErrorResponse":{"title":"ErrorResponse","type":"object","description":"Envelope returned by every non-2xx response. Branch on `code` (stable) rather than `message` (human-readable, may change).","required":["error","message","code"],"properties":{"error":{"type":"string","description":"Error category: `validation_error`, `unauthorized`, `forbidden`, `not_found`, `conflict`, `rate_limited`, `server_error`, or `service_unavailable`."},"message":{"type":"string","description":"Human-readable explanation, safe to show to end users."},"code":{"type":"string","description":"Stable machine-readable code in `CATEGORY_NNN` form (e.g. `NOT_FOUND_006`, `AUTH_010`, `GEN_002`)."},"request_id":{"type":"string","description":"Correlation id for support requests. Echoes the `x-request-id` request header when one was supplied."},"errors":{"type":"object","additionalProperties":{"type":"string"},"description":"Field-level validation messages keyed by field name. Present on 400/422 validation failures only."}}}},"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API Token","description":"API token authentication. Format: `Bearer dz_...`"}}},"security":[{"BearerAuth":[]}]}