> For the complete documentation index, see [llms.txt](https://run.emailchaser.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://run.emailchaser.com/api-reference/reports.md).

# Reports

## Get the money-vs-outcomes report

> Puts spend against results for a window (since/until compare inclusively; both optional). Spend has two parts. (1) Settled credit debits from the workspace ledger, grouped by reason; in-flight reservations are excluded until they settle, credits used while Emailchaser had made the workspace's credits free are not spend and are excluded, and credits are valued at the current list price of one credit, the same per-credit price a top-up is quoted at before volume discounts, regardless of what was actually paid for them via bulk discounts or plan allowances. (2) Done-for-you order costs from each order's stored cost breakdown; orders are counted by creation time, and failed or canceled orders are excluded because their charges are unwound. Subscription (platform) fees are NOT included: the backend stores only the current subscription state, not per-window invoice history, so they cannot be attributed to a window honestly. Outcomes are sent emails, replied leads, positively-replied (interested) leads and leads marked meeting-booked in the window. costPerReply, costPerPositive and costPerMeeting divide total spend by each outcome count and are null when that count is zero. The optional campaignId narrows the OUTCOME side only - credit and order spend is workspace-level and cannot be attributed to one campaign - so per-campaign cost figures are partial attribution, not a true campaign cost.

```json
{"openapi":"3.1.1","info":{"title":"Emailchaser API","version":"1.0"},"servers":[{"url":"https://api.emailchaser.com/r"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","name":"Authorization","in":"header"}},"schemas":{"models.OutcomesReportResponse":{"type":"object","properties":{"campaignId":{"description":"CampaignID echoes the campaign filter when one was given. Only the\noutcome side is narrowed by it; spend stays workspace-level.","type":"integer"},"costPerMeeting":{"description":"CostPerMeeting is total spend divided by meetings, null when there are\nnone.","type":"number"},"costPerPositive":{"description":"CostPerPositive is total spend divided by positive replies, null when\nthere are none.","type":"number"},"costPerReply":{"description":"CostPerReply is total spend divided by replies, null when there are none.","type":"number"},"outcomes":{"$ref":"#/components/schemas/models.OutcomesReportOutcomes"},"since":{"description":"Since echoes the window start, or null when the window is open-ended.","type":"string"},"spend":{"$ref":"#/components/schemas/models.OutcomesReportSpend"},"until":{"description":"Until echoes the window end, or null when the window is open-ended.","type":"string"}}},"models.OutcomesReportOutcomes":{"type":"object","properties":{"meetings":{"description":"Meetings counts leads marked as having booked a meeting in the window.","type":"integer"},"positiveReplies":{"description":"PositiveReplies counts leads whose reply was categorized as interested.","type":"integer"},"replies":{"type":"integer"},"sent":{"type":"integer"}}},"models.OutcomesReportSpend":{"type":"object","properties":{"credits":{"description":"Credits is the total of settled credit debits in the window. In-flight\nreservations are excluded until they settle.","type":"integer"},"creditsByReason":{"type":"array","items":{"$ref":"#/components/schemas/models.OutcomesReportCreditReason"}},"creditsUsd":{"description":"CreditsUsd values the spent credits at the list price per credit.","type":"number"},"dfyOrders":{"description":"DfyOrders is how many done-for-you orders were placed in the window\n(failed and canceled orders are excluded).","type":"integer"},"dfyOrdersUsd":{"type":"number"},"totalUsd":{"type":"number"}}},"models.OutcomesReportCreditReason":{"type":"object","properties":{"credits":{"type":"integer"},"reason":{"type":"string"}}},"models.ErrorResponse":{"type":"object","properties":{"error":{"type":"string"}}},"models.ErrorUnauthorized":{"type":"object","properties":{"error":{"type":"string"}}}}},"paths":{"/reports/outcomes":{"get":{"description":"Puts spend against results for a window (since/until compare inclusively; both optional). Spend has two parts. (1) Settled credit debits from the workspace ledger, grouped by reason; in-flight reservations are excluded until they settle, credits used while Emailchaser had made the workspace's credits free are not spend and are excluded, and credits are valued at the current list price of one credit, the same per-credit price a top-up is quoted at before volume discounts, regardless of what was actually paid for them via bulk discounts or plan allowances. (2) Done-for-you order costs from each order's stored cost breakdown; orders are counted by creation time, and failed or canceled orders are excluded because their charges are unwound. Subscription (platform) fees are NOT included: the backend stores only the current subscription state, not per-window invoice history, so they cannot be attributed to a window honestly. Outcomes are sent emails, replied leads, positively-replied (interested) leads and leads marked meeting-booked in the window. costPerReply, costPerPositive and costPerMeeting divide total spend by each outcome count and are null when that count is zero. The optional campaignId narrows the OUTCOME side only - credit and order spend is workspace-level and cannot be attributed to one campaign - so per-campaign cost figures are partial attribution, not a true campaign cost.","tags":["Reports"],"summary":"Get the money-vs-outcomes report","parameters":[{"schema":{"type":"string"},"description":"Window start, RFC3339 or YYYY-MM-DD (inclusive)","name":"since","in":"query"},{"schema":{"type":"string"},"description":"Window end, RFC3339 or YYYY-MM-DD (inclusive; a bare date means midnight UTC at the start of that day)","name":"until","in":"query"},{"schema":{"type":"integer"},"description":"Narrow the outcome side to one campaign (partial attribution; spend stays workspace-level)","name":"campaignId","in":"query"}],"responses":{"200":{"description":"The report","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.OutcomesReportResponse"}}}},"400":{"description":"Invalid query parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}}},"401":{"description":"Unauthorized - invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorUnauthorized"}}}},"404":{"description":"Campaign not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}}},"500":{"description":"Failed to build the report","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}}}}}}}}
```
