{"openapi":"3.1.0","info":{"title":"POST /api/v1/contracts/invoices/reminders","version":"1.0.0","description":"Send payment reminders in bulk"},"servers":[{"url":"https://api.ondayzero.com","description":"Production"}],"paths":{"/api/v1/contracts/invoices/reminders":{"post":{"tags":["contracts"],"summary":"Send payment reminders in bulk","description":"Send payment-reminder emails for up to 100 contract invoices in one call. Applies the single-reminder rules per invoice (open/partially paid only, customer email required, 24h cooldown) and returns a per-invoice sent/skipped result instead of failing the whole batch.","operationId":"send_invoice_reminders_batch_api_v1_contracts_invoices_reminders_post","parameters":[{"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"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoiceReminderBatchRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessEnvelope_InvoiceReminderBatchResponse_"}}}},"401":{"description":"Unauthorized - Authentication required","content":{"application/json":{"example":{"detail":"Not authenticated"}}}},"403":{"description":"Forbidden - Insufficient permissions","content":{"application/json":{"example":{"detail":"Not enough permissions"}}}},"422":{"description":"Validation Error - Invalid data format","content":{"application/json":{"example":{"detail":[{"loc":["body","field"],"msg":"field required","type":"value_error.missing"}]}}}}}}}},"components":{"schemas":{"InvoiceReminderBatchRequest":{"properties":{"invoice_ids":{"items":{"type":"string"},"type":"array","maxItems":100,"minItems":1,"title":"Invoice Ids","description":"Contract-invoice IDs to remind (deduplicated per request)."}},"type":"object","required":["invoice_ids"],"title":"InvoiceReminderBatchRequest","description":"Request body for the bulk reminder endpoint."},"InvoiceReminderBatchResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/InvoiceReminderItemResult"},"type":"array","title":"Results"},"sent_count":{"type":"integer","title":"Sent Count"},"skipped_count":{"type":"integer","title":"Skipped Count"}},"type":"object","required":["results","sent_count","skipped_count"],"title":"InvoiceReminderBatchResponse","description":"Batch reminder outcome (per-invoice results plus counts)."},"InvoiceReminderItemResult":{"properties":{"invoice_id":{"type":"string","title":"Invoice Id"},"sent":{"type":"boolean","title":"Sent"},"sent_to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sent To"},"reminded_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Reminded At"},"skipped_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Skipped Reason"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail"}},"type":"object","required":["invoice_id","sent"],"title":"InvoiceReminderItemResult","description":"Per-invoice outcome inside a batch response.\n\n``sent`` invoices carry ``sent_to``/``reminded_at``; skipped ones carry a\nmachine-readable ``skipped_reason`` (``not_found``, ``invalid_status``,\n``no_customer_email``, ``reminded_recently``, ``send_failed``) plus the\nhuman-readable ``detail``."},"SuccessEnvelope_InvoiceReminderBatchResponse_":{"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/InvoiceReminderBatchResponse"},{"type":"null"}]}},"additionalProperties":true,"type":"object","title":"SuccessEnvelope[InvoiceReminderBatchResponse]"}},"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API Token","description":"API token authentication. Format: `Bearer dz_...`"}}},"security":[{"BearerAuth":[]}]}