Used to access information on financial reporting. For more info on how to use the Steamworks Web API please see the
Web API Overview.
IPartnerFinancialsService is unique when compared to other Steamworks API's; it requires a special group (called a "Financial API Group") with its own Web API key. A Financial API Group has no users and no apps associated to it, it is solely dedicated to the API retrieval of all financial data for a partner account. There are also no app limitations or user limitations on the Financial API Key, it retrieves all data for all applications on a partner account, the call does not require a logged in user.
To provision a Financial Web API key, a Financial API Group must first be created on the
Manage Groups page of Steamworks. The Financial Web API Key will then be displayed on the newly created group's page.
For additional security, it is recommended that you use the "Manage WebAPI Key" section on the Financial API Group's page to add a set of Whitelisted IPs as trusted access points for your financial data. Additionally, we recommend keeping the key as safe as you would any other password (don't email it around!) as it provides access to large amount of information on the performance of your partner account on Steam.
A typical call pattern would be as follows:
Step 1: Call GetChangedDatesForPartner to find the set of dates that have new data. Your first call will use a highwatermark value of 0 and will return every date you have ever had sales or activations on Steam. Subsequent values should use the result_highwatermark from the prior call, and will only show the dates with new data since the prior call.
Step 2: For each date returned by GetChangedDatesForPartner, make a call to GetDetailedSales. Each new date should start with a highwatermark_id value of 0. Store off the result set locally, for instance via a database, so that you do not need to traverse old ranges of data more than necessary. Continue calling GetDetailedSales, using the returned max_id as the next call's highwatermark_id. When the returned max_id field is equal to the highwatermark_id field that was provided in the request it is a signal that there is no further data available for that date. Move on to the next date and continue the pattern described above.
Example Integration of IPartnerFinancialsService- Partner X calls GetChangedDatesForPartner on May 4th, 2025 with a highwatermark value of 0.
"response": {
"dates": [
"2025/05/03",
"2025/05/04"
],
"result_highwatermark": "120"
}
- Partner X would then perform GetDetailedSales calls for 2025/05/03 and 2025/05/04, storing off the results of each call locally for further analysis.
- With their GetDetailedSales querying completed, Partner X would then stores off the result_highwatermark value (120) from GetChangedDatesForPartner for future calls.
- The next day (May 5th, 2025), Partner X starts their workday by calling GetChangedDatesForPartner again (using a higwatermark value of 120, the stored value from the previous day's call).
"response": {
"dates": [
"2025/05/03",
"2025/05/04",
"2025/05/05"
],
"result_highwatermark": "163"
}
- Two of these dates already exist from Partner X's call the previous day! This is not an error in the API. Dates showing up in subsequent calls to GetChangedDatesForPartner mean that the summary values (eg. gross_sales_usd etc.) for a given date may have changed. This happens in the normal course of business due to things like late settlement of transactions.
- Partner X would then
remove their local entries for 2025/05/03 and 2025/05/04 and
replace these values with the results from new calls of GetDetailedSales. Partner X would also store off new values for dates they don't already have (2025/05/05)
- Finally, Partner X would then store off the result_highwatermark value (163) from GetChangedDatesForPartner until their next call.
GetChangedDatesForPartner
GET https://partner.steam-api.com/IPartnerFinancialsService/GetChangedDatesForPartner/v001/
Request values Name | Type | Required | Description |
key | string | ✔ | Steamworks Web API publisher authentication key |
highwatermark | uint64 | ✔ | A unique identifier, the point at which to query data forward from. Should be set to 0 on first run. |
include_view_grants | bool | | Include dates that are visible via view grants in the response |
Retrieves the set of dates for which financial data has changed since the given highwatermark. These dates can be passed to GetDetailedSales to retrieve financial data.
Each date value from GetChangedDatesForPartner should initially be provided to GetDetailedSales with a highwatermark_id value of 0 (looping as necessary with returned max_id values). GetChangedDatesForPartner indicates that at least one record on the returned date has changed for your partner account, you will need to re-query the entirety of that date to identify all additions, deletions, and updates that have occurred.
Return values Name | Type | Description |
dates | string | A repeating field of unique dates that have newly calculated or recalculated financial data. If this field is empty, no new data is available. Dates are reported for the Pacific Time Zone (PT) and should be fed directly into GetDetailedSales (ie. do not apply an offset, use the exact string value) |
result_highwatermark | string | A unique identifier, marks the maximum point that the financial data has been analyzed to for the provided partner. This value should be used as the "highwatermark" value for subsequent calls to GetChangedDatesForPartner to avoid doing unnecessary work. If the value is unchanged from the provided "highwatermark" value then there is no new financial data for the partnerid being called. |
Example response: "response": {
"dates": [
"2025/04/28",
"2025/05/04",
"2025/05/05",
"2025/05/06",
"2025/05/07",
"2025/05/08"
],
"result_highwatermark": "1841518117865"
}
GetDetailedSales
GET https://partner.steam-api.com/IPartnerFinancialsService/GetDetailedSales/v001/
Request values Name | Type | Required | Description |
key | string | ✔ | Steamworks Web API publisher authentication key |
date | string | ✔ | Date to retrieve the sales data for. The date should be formatted as YYYY-MM-DD, YYYY/MM/DD, or YYYYMMDD. Date values provided and returned will be for the Pacific Time Zone (PT) |
highwatermark_id | uint64 | ✔ | A per-date value (ie. should be set at 0 for each date being queried). Informs the number of new records to query for. |
include_view_grants | bool | | Include sales data that is visible via view grants in the response |
Retrieves the daily sales for a partner in batches.
Individual fields for CPartnerFinancials_SalesResult will only be filled for relevant line_item_type and package_sale_type values, demarcated below via the Package, MicroTxn, and CD-Key columns.
How to determine a CPartnerFinancials_SalesResult CategoryPackage: line_item_type = "Package" and package_sale_type = "Steam"
MicroTxn: line_item_type = "MicroTxn"
CD-Key: line_item_type = "Package" and package_sale_type = "Retail"
Identifying FieldsEach CPartnerFinancials_DetailedSalesResult entry has within it a set of identifying fields (eg. packageid, appid, country_code, etc.) in addition to aggregated values (eg. gross_units_sold, gross_units_returned, gross_sales_usd etc.)
Unique Identifying Fields (demarcated in the table below) can be combined to form a unique key for each CPartnerFinancials_DetailedSalesResult record. This key can make storage of your financial data much easier! For example, if you're using a database for storage of your GetDetailedSales results, you could include each of these Unique Identifying Fields as columns in a table's primary key. Alternatively, you could compute a hash of Unique Identifying Fields to store a single row identifier per CPartnerFinancials_DetailedSalesResult.
Return values Name | Type | Description |
results | CPartnerFinancials_DetailedSalesResult | A repeating field containing detailed sales information |
key_request_info | CPartnerFinancials_KeyRequestInfo | The key request details for this response |
package_info | CPartnerFinancials_PackageInfo | The package id values for the response and their respective names |
app_info | CPartnerFinancials_AppInfo | The app id values for the response and their respective names |
bundle_info | CPartnerFinancials_BundleInfo | The bundle id values for the response and their respective names |
discount_info | CPartnerFinancials_DiscountInfo | The discount details for the response |
combined_discount_info | CPartnerFinancials_CombinedDiscountInfo | The combined discount details for the response |
game_item_info | CPartnerFinancials_GameItemInfo | The app id and game item id values for the response and their respective descriptions and categories |
country_info | CPartnerFinancials_CountryInfo | The country codes, names, and regions from the response |
partner_info | CPartnerFinancials_PartnerInfo | The partner ids and names from the response |
max_id | int64 | The largest id returned from this result set. When equal to highwatermark_id this denotes that no further records are available for the date being queried |
CPartnerFinancials_DetailedSalesResult Unique Identifying Fields | Name | Type | Packages | MicroTxn | CD-Keys | Description |
✔ | partnerid | int32 | ✔ | ✔ | ✔ | The partnerid that this data was generated for. |
✔ | date | string | ✔ | ✔ | ✔ | The date the statistics were calculated for (aka. calculation date). Returned in the same format as provided in the request (YYYY-MM-DD, YYYY/MM/DD, or YYYYMMDD). Uses Pacific Time Zone (PT). Max size - 16 characters. |
✔ | line_item_type | string | ✔ | ✔ | ✔ | The type of sale: "Package" or "MicroTxn". Max size - 64 characters |
✔ | packageid | uint32 | ✔ | | ✔ | The package id that was sold or activated. |
✔ | bundleid | uint32 | ✔ | | | The bundle id the package was sold within, if applicable. |
✔ | appid | uint32 | | ✔ | | The appid for the item being sold. |
✔ | game_item_id | int32 | | ✔ | | The game item id of the item being sold. Equivalent to "ItemID" from the old CSV feed. |
✔ | package_sale_type | string | ✔ | | ✔ | The type of redemption, Steam sale or Retail key. Max size - 64 characters. |
✔ | key_request_id | uint32 | | | ✔ | The unique identifier for the key request that this activation was made from |
✔ | platform | string | ✔ | | ✔ | The platform that sales are attributed to. Max size - 64 characters |
✔ | country_code | string | ✔ | ✔ | ✔ | The ISO-2 country code where the item was purchased. Max size - 8 characters |
✔ | base_price | uint64 | ✔ | | | The base price, in local currency cents. |
✔ | sale_price | uint64 | ✔ | | | The final sale price, in local currency cents. |
✔ | currency | uint32 | ✔ | ✔ | | The currency of the transaction. |
✔ | combined_discount_id | int32 | ✔ | | | The ID associated with the unique set of discounts used, if applicable |
| gross_units_sold | int32 | ✔ | ✔ | | The number of units sold. |
| gross_units_returned | int32 | ✔ | ✔ | | The number of units returned. |
| gross_sales_usd | string | ✔ | ✔ | | The value of sales, in USD dollars to four decimal places. |
| gross_returns_usd | string | ✔ | ✔ | | The value of returns, in USD dollars to four decimal places. |
| net_tax_usd | string | ✔ | ✔ | | The net value of taxes, in USD dollars to four decimal places. |
| gross_units_activated | int32 | | | ✔ | The number of units activated. |
| view_grant_partnerid | int32 | ✔ | ✔ | ✔ | The partnerid that granted visibility, only filled for data that is visible via a view grant. |
| net_units_sold | int32 | ✔ | ✔ | | The number of units sold less the number of units returned. |
| net_sales_usd | string | ✔ | ✔ | | The value of sales less the value of returns and taxes, in USD dollars to four decimal places. |
| avg_sale_price_usd | string | | ✔ | | The average sale price of microtxn units sold, in USD dollars to four decimal places. |
| primary_appid | int32 | ✔ | ✔ | ✔ | The appid that this package associate to for purpose of additional revenue share accrual. The default value of 0 indicates the package does not have a primary app set in our backend, please file a support ticket to rectify this. NOTE: While this value may be included in CD-key responses for ease of package->app association, additional revenue share does not take into account cd-key activations. |
| additional_revenue_share_tier | ERevenueShareBonusTier | ✔ | ✔ | | What additional revenue share, if any, has this sale qualified for on the given date |
ERevenueShareBonusTier (int32) Value | Name | Description |
0 | k_ERevenueShareBonusTier_None | No additional revenue share |
1 | k_ERevenueShareBonusTier_5Percent | 5% additional revenue share |
2 | k_ERevenueShareBonusTier_10Percent | 10% additional revenue share |
CPartnerFinancials_DiscountInfo Name | Type | Description |
discountid | int32 | The unique id for the given discount |
discount_description | string | The discount description. Max size - 1024 characters |
discount_group | string | The discount group. Max size - 1024 characters. |
discount_percentage | int32 | The percentage discount off the items regular price |
CPartnerFinancials_CombinedDiscountInfo Name | Type | Description |
combined_discount_id | uint32 | A unique id |
combined_discount_name | string | The combined discount name |
total_discount_percentage | int32 | The total percentage discount via all component discounts |
discount_ids | int32 | A repeating field of all discount ids that make up this combined discount id |
CPartnerFinancials_KeyRequestInfo Name | Type | Description |
key_request_id | uint32 | The unique id for the given key request |
key_request_notes | string | The notes provided for the key request. Max size - 4000 characters |
game_code_id | int32 | The game code id associated with this key request |
game_code_description | string | The game code description. Max size - 1024 characters |
territory_code_id | int32 | The territory code id associated with this key request |
territory_code_description | string | The territory code description. Max size - 1024 characters |
Note: Some CPartnerFinancials_KeyRequestInfo return values may have a note of "Synthetic request". These serve as placeholder values for redemptions of key ranges that were made before the key request system was created (ie. prior to January, 2013)
CPartnerFinancials_PackageInfo Name | Type | Description |
packageid | uint32 | A unique id |
package_name | string | The package name |
CPartnerFinancials_AppInfo Name | Type | Description |
appid | uint32 | A unique id |
app_name | string | The app name |
CPartnerFinancials_BundleInfo Name | Type | Description |
bundleid | uint32 | A unique id |
bundle_name | string | The bundle name |
CPartnerFinancials_GameItemInfo Name | Type | Description |
game_item_description | string | The English language description of the in-game item sold. Max size - 128 characters |
game_item_category | string | The English language category of the in-game item sold. Max size - 128 characters |
CPartnerFinancials_CountryInfo Name | Type | Description |
country_code | string | The ISO-2 country code where the item was purchased. Max size - 8 characters |
country_name | string | The full name of the country_code field. Max size - 128 characters |
region | string | The region within which the country_code belongs. Max size - 128 characters |
CPartnerFinancials_PartnerInfo Name | Type | Description |
partnerid | uint32 | A unique id |
partner_name | string | The name of the partner. Max size - 128 characters |
Example response: "response": {
"results": [
{
"partnerid": "10500",
"date": "2025/05/01",
"line_item_type": "Package",
"packageid": 123,
"bundleid":777
"package_sale_type": "Steam",
"platform": "Windows",
"country_code": "AU",
"base_price": "3995",
"sale_price": "1995",
"currency": "AUD",
"gross_units_sold": 10,
"gross_units_returned": -2,
"gross_sales_usd": "311.7201",
"gross_returns_usd": "-25.5322",
"net_tax_usd": "26.0431",
"primary_appid": 999,
"additional_revenue_share_tier": 0,
"net_units_sold": 8,
"net_sales_usd": "260.1448",
"combined_discount_id": 8888,
"total_discount_percentage": 50
},
{
"partnerid": "10500",
"date": "2025/05/01",
"line_item_type": "Package",
"packageid": 456,
"package_sale_type": "Steam",
"platform": "Windows",
"country_code": "CA",
"base_price": "5999",
"sale_price": "5999",
"currency": "CAD",
"gross_units_sold": 100,
"gross_units_returned": 0,
"gross_sales_usd": "4309.0101",
"gross_returns_usd": "0.0000",
"net_tax_usd": "517.0812",
"primary_appid": 1099,
"additional_revenue_share_tier": 1,
"viw_grant_partnerid": "5200",
"net_units_sold": 100,
"net_sales_usd": "3791.9288",
},
{
"partnerid": "10500",
"date": "2025/05/01",
"line_item_type": "MicroTxn",
"appid": 1099,
"game_item_id": 1,
"country_code": "US",
"currency": "USD",
"gross_units_sold": 2,
"gross_units_returned": 0,
"gross_sales_usd": "9.9800",
"gross_returns_usd": "0.0000",
"net_tax_usd": "0.9980",
"primary_appid": 1099,
"additional_revenue_share_tier": 1,
"net_units_sold": 2,
"net_sales_usd": "8.9820",
"avg_sale_price_usd": "4.9900"
},
{
"partnerid": "10500",
"date": "2025/05/01",
"line_item_type": "Package",
"packageid": 123,
"package_sale_type": "Retail",
"platform": "Unknown",
"country_code": "AE",
"primary_appid": 999,
"key_request_id": 7100,
"gross_units_activated": 10
},
],
"key_request_info": [
{
"key_request_id": 7100,
"key_request_notes": "Keys for Key Markets",
"game_code_id": 842,
"game_code_description": "Retail Distribution - Middle East & North Africa",
"territory_code_id": 0,
"territory_code_description": "UNUSED"
}
],
"package_info": [
{
"packageid": 123,
"package_name": "Grate Expectations: Cheese Preparation Simulator - Deluxe Edition"
},
{
"packageid": 456,
"package_name": "Grate Expectations 2: Curd Your Loins - Launch Edition"
}
]
"app_info": [
{
"appid": 999,
"app_name": "Grate Expectations: Cheese Preparation Simulator
},
{
"appid": 1099,
"app_name": "Grate Expectations 2: Curd Your Loins"
}
],
"bundle_info": [
{
"bundleid": 777,
"bundle_name": "Grate Expectations Deluxe Bundle"
},
],
"combined_discount_info": [
{
"combined_discount_id": 8888,
"combined_discount_name": "Bundle Discount",
"total_discount_percentage": 50,
"discount_ids": [11111]
},
],
"game_item_info": [
{
"appid": 1099,
"game_item_id": 1,
"game_item_description": "500 Grams of Whey",
"game_item_category": "Essential Cheese Product"
}
],
"country_info": [
{
"country_code": "AE",
"country_name": "United Arab Emirates",
"region": "Middle East & North Africa"
},
{
"country_code": "AU",
"country_name": "Australia",
"region": "Oceania"
},
{
"country_code": "CA",
"country_name": "Canada",
"region": "North America"
},
{
"country_code": "US",
"country_name": "United States",
"region": "North America"
},
],
"max_id": "29481179373"