---
title: "Provider earnings from usage records (+ payout history)"
method: GET
path: "/v1/orgs/{orgId}/provider/earnings"
tags: ["Provider"]
---

# Provider earnings from usage records (+ payout history)

`GET /v1/orgs/{orgId}/provider/earnings`

## Path parameters

- `orgId` string, required

## Response `200`

OK

- ProviderEarnings
  - `activeRentals` integer — Currently-running rentals on this provider's nodes (open usage records).
  - `availableForPayoutCents` integer, required
  - `billableGrossCents` integer — Total customer gross attributable to legacy revenue-share paid-funded hours. Omitted for fixed-only providers; mixed providers exclude fixed-contract customer economics.
  - `billableHours` number — Legacy revenue-share hours in customers' paid-funding band. Omitted for fixed-only providers.
  - `byGpuModel` EarningsBreakdownGpu[], required
    - `billableGrossCents` integer — Customer gross attributable to legacy revenue-share paid-funded hours. Omitted for fixed-only providers; mixed providers exclude fixed-contract customer economics.
    - `billableHours` number — Legacy revenue-share hours that fell in the paid band. Omitted for fixed-only providers.
    - `earningHours` number — Hours owed to the provider under fixed-hourly or legacy revenue-share terms.
    - `earningsCents` integer, required
    - `gpuModelId` string, required
    - `grossEarningsCents` integer — Customer sell gross for legacy revenue-share records. Omitted for fixed-only providers; mixed providers exclude fixed-contract customer economics.
    - `hours` number, required — Total hours hosted.
    - `name` string, required
  - `byNode` EarningsBreakdownNode[], required
    - `billableGrossCents` integer — Customer gross attributable to legacy revenue-share paid-funded hours. Omitted for fixed-only providers; mixed providers exclude fixed-contract customer economics.
    - `billableHours` number — Legacy revenue-share hours that fell in the customer's paid-funding band. Omitted for fixed-only providers.
    - `earningHours` number — Hours owed to the provider. Fixed-hourly contracts use eligible hosted hours; legacy revenue share uses paid-funded hours.
    - `earningsCents` integer, required
    - `gpuCount` integer — GPU count on this node for the utilization denominator: sellable catalog inventory (Σ NodeGpu.Quantity, excluding unrecognised hardware), falling back to raw detected accelerators (Σ DetectedGpusRaw.Count) when no sellable rows exist. 0 only for a genuine CPU-only node.
    - `grossEarningsCents` integer — Customer sell gross for legacy revenue-share records. Omitted for fixed-only providers; mixed providers exclude fixed-contract customer economics.
    - `hostname` string, required
    - `hours` number, required — Total hours hosted (paid + free-credit + unpaid).
    - `nodeId` string, required
    - `rentedGpuHoursMonth` number — GPU-hours rented on this node so far this calendar month (Σ over GPU records of month-clamped hours × the record's gpuCount). The utilizationPercent numerator. NOTE: usage records written before per-record gpuCount was stamped count as 1 GPU (a conservative floor).
    - `utilizationPercent` number, nullable — Month-to-date utilization: rentedGpuHoursMonth / (gpuCount × hours elapsed this month) × 100, clamped to [0,100]. Null when gpuCount is 0 (CPU node) or the month just started (no elapsed time to measure against). CAVEAT: the denominator uses the node's CURRENT gpuCount, so a node whose GPU inventory changed mid-month is exact only from the change onward (added GPUs understate; removed GPUs can saturate at 100).
  - `byStream` EarningsBreakdownStream[] — CPU vs GPU income streams.
    - `billableGrossCents` integer — Customer gross attributable to legacy revenue-share paid-funded hours in this stream. Omitted for fixed-only providers; mixed providers exclude fixed-contract customer economics.
    - `billableHours` number — Legacy revenue-share hours in this stream that fell in the paid band. Omitted for fixed-only providers.
    - `earningHours` number — Hours owed to the provider in this stream.
    - `earningsCents` integer, required — Provider earnings for this stream, calculated from the locked fixed-hourly rate or the legacy revenue share.
    - `grossEarningsCents` integer — Customer sell gross for legacy revenue-share records in this stream. Omitted for fixed-only providers; mixed providers exclude fixed-contract customer economics.
    - `hours` number, required — Total hours hosted in this stream.
    - `stream` string, required — Income stream: 'gpu' (GPU rentals) or 'cpu' (CPU-only rentals).
  - `commissionPercent` integer, required — Default legacy provider revenue-share percentage. Relevant to legacy records in revenue_share_legacy and mixed responses; fixed records use their locked hourly rate.
  - `compensationMode` 'revenue_share_legacy' | 'fixed_hourly' | 'mixed' — How provider earnings in this response were calculated. Optional for backward compatibility; absent means revenue_share_legacy. mixed indicates the selected history contains both fixed-hourly and legacy records.
  - `currentMonthEarningsCents` integer, required
  - `currentMonthHours` number, required
  - `daily` EarningsDailyPoint[] — Last-30-UTC-day earnings series, oldest first, one point per day (zero-filled). A record's band hours/earnings are prorated onto each day by its share of the record's hosted hours (band placement itself is whole-of-life, so a day's split is an attribution, not a re-run of the waterfall per day).
    - `billableGrossCents` integer — Customer gross attributable to legacy revenue-share paid-funded hours this day. Omitted for fixed-only providers; mixed providers exclude fixed-contract customer economics.
    - `billableHours` number, required — Legacy revenue-share hours in the customer's paid-funding band this day; zero for fixed-contract records.
    - `date` string, required — UTC day, YYYY-MM-DD.
    - `earningHours` number — Hours owed to the provider this day.
    - `earningsCents` integer, required — Provider earnings attributed to this day. Prorated across day boundaries for records spanning days.
    - `freeHours` number, required — Legacy revenue-share hours funded by customer free credits this day; zero for fixed-contract records.
    - `hostedHours` number, required — Total hours hosted this day (all bands).
    - `unpaidHours` number, required — Legacy revenue-share hours beyond the customer's free+paid funding this day; zero for fixed-contract records.
  - `earningHours` number — Hours owed to the provider. Fixed-hourly contracts accrue across eligible hosted utilization; legacy revenue share accrues only across paid-funded hours.
  - `freeCreditHours` number — Legacy revenue-share hours funded by customer free credits. Omitted for fixed-only providers and excludes fixed-contract hours in mixed responses.
  - `grossEarningsCents` integer — Total customer sell gross for legacy revenue-share records. Omitted for fixed-only providers; mixed providers exclude fixed-contract customer economics.
  - `pendingEarningsCents` integer, required
  - `recentPayouts` PayoutItem[], required
    - `amountCents` integer, required
    - `createdAt` string, required
    - `description` string, nullable
    - `id` string, required
    - `type` string, required
  - `totalEarningsCents` integer, required
  - `totalHours` number, required — Total hours hosted across all of this provider's usage.
  - `totalPaidOutCents` integer, required
  - `unpaidHours` number — Legacy revenue-share hours beyond customer free credit and paid balance. Omitted for fixed-only providers and excludes fixed-contract hours in mixed responses.

## Other responses

- `401` — Missing or invalid API key
- `403` — API key lacks the required scope

## Changes

- **2026-08-25** `5dd7f6dfe365` — 5 info
  - added the optional property `byGpuModel/items/earningHours` to the response with the `200` status
  - added the optional property `byNode/items/earningHours` to the response with the `200` status
  - added the optional property `byStream/items/earningHours` to the response with the `200` status
  - added the optional property `daily/items/earningHours` to the response with the `200` status
  - …1 more
- **2026-08-24** `5e47584c7501` — 1 info
  - added the optional property `compensationMode` to the response with the `200` status

[Change history](https://skmtc.dev/openrelay/apis/openrelay-api/changes/v1/orgs/:orgId/provider/earnings/get.md)

---

[API](https://skmtc.dev/openrelay/apis/openrelay-api.md) · [All operations](https://skmtc.dev/openrelay/apis/openrelay-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/openrelay/openrelay-api/revisions/cca00bd5b0b5/schema)
