Group usage by event properties: either to price each group separately, or to break it down on invoices and usage for visibility only.
A charge can group usage by the properties carried on your events. Lago offers two kinds of group keys, answering two different questions:
Pricing group keys answer “how much should each group cost?” Each group becomes its own fee with its own price.
Presentation group keys answer “how is this fee broken down?” The fee stays whole and priced once; Lago just shows how its units split across the groups, for visibility only.
You can use either on its own, or combine them on the same charge.
AI and infrastructure platforms often tailor pricing by geography, hosting provider, model type, or service tier. Pricing group keys let you reflect those real-world cost variations on a single charge, instead of duplicating products. Each group is metered and priced independently, and appears as its own fee on the invoice.You don’t predefine the values. Define the key on the charge, send events that carry it, and Lago routes each event to the right pricing group at runtime. Pricing group keys work with every charge model, and you can set more than one per charge.
Dashboard
API
On the charge, add a key in the Pricing group key field (e.g. region, cloud, instance_type), then send events that include that property.
Define a pricing group key
Pricing group keys live inside the charge properties:
Example. A Storage charge priced at $1 per GB (sum of gb) with pricing_group_keys: ["region"], receiving 10 GB in EU and 15 GB in US, produces two separate fees, each with its own units and amount:
Storage region = EU 10 units $10.00 region = US 15 units $15.00 ───────────────────────────────── Total $25.00
Sometimes you don’t want to charge differently for a dimension; you just want to see it. Finance teams need to attribute a line item back to a region, team, or project. Customers want to know where their usage came from before they pay for it. None of that should change the price.Presentation group keys give you exactly that: a breakdown of a fee’s units across one or two event properties, shown on the invoice and in usage responses, without affecting pricing, aggregation, or the number of fees. Group by, for display only. Doing the same thing with pricing keys would split one fee into many, re-price non-linear charge models (graduated, volume, package) per group, and bloat both the invoice and your usage queries.
Lago computes the fee exactly as it does today (pricing untouched), then runs one extra aggregation to split that fee’s units across the presentation keys and attaches the result as a units-only breakdown.Take the same Storage charge and events as the pricing example above ($1 per GB, EU = 10 GB, US = 15 GB), but with region as a presentation key instead of a pricing one:
Storage 25 units $25.00 └ region = EU 10 units └ region = US 15 units
One fee, priced once at $25.00. The same region split that pricing keys turned into two billable fees stays here as a units-only breakdown inside a single fee.
Good to know:
Up to 2 keys per charge.
A key can be both a pricing and a presentation key on the same charge; Lago de-duplicates them.
All aggregation types work. For additive aggregations (count, sum, weighted sum) the group units add up to the fee total. For non-additive ones (max, latest, count unique) they may not: each group is computed independently, so read the breakdown as what happened in each group, not how the total splits.
Groups can show negative units when their events net out negative (credits, reversals).
Events missing the property fall under a null group.
On the charge, open the Presentation group keys panel below the pricing model, add up to two keys (e.g. department, project), and choose per key whether it should show on the invoice. Then send events that carry those properties.
Presentation group keys live inside the charge properties, as objects with a value and optional options:
Set display_in_invoice to false to keep a key’s breakdown out of the invoice PDF while still returning it through the API. The breakdown also appears live in current, projected, and past usage.
The two compose cleanly: pricing keys decide how many fees there are and what they cost, presentation keys break down each of those fees. The hierarchy is always charge → pricing-group fee → presentation breakdown.A Storage charge at $1/unit with pricing_group_keys: ["instance_id"] and presentation_group_keys: [{ "value": "region" }] gives one fee per instance, each with its own region breakdown:
Storage Instance A 25 units $25.00 └ region = EU 10 units └ region = US 15 units Instance B 7 units $7.00 └ region = EU 4 units └ region = US 3 units
The amounts come entirely from the pricing keys; the region split is layered on for visibility. With two presentation keys, the breakdown is by the combination of values (e.g. region · city).
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Lago","description":"Developer documentation for Lago, the open-source billing platform for usage metering, subscriptions, invoicing, payments, and revenue operations.","colors":{"primary":"#006CFA","light":"#006CFA","dark":"#006CFA"},"logo":{"light":"https://mintcdn.com/lago-docs/zZSJbpe68PHhSs3x/logo/light.svg?fit=max\u0026auto=format\u0026n=zZSJbpe68PHhSs3x\u0026q=85\u0026s=b4af3001527c985b81858b9a0928534c","dark":"https://mintcdn.com/lago-docs/zZSJbpe68PHhSs3x/logo/dark.svg?fit=max\u0026auto=format\u0026n=zZSJbpe68PHhSs3x\u0026q=85\u0026s=1eb7aacac796b0cc6bf05be790a792b1"},"favicon":"https://mintcdn.com/lago-docs/8N-yOElNGe9jRGG5/favicon.svg?fit=max\u0026auto=format\u0026n=8N-yOElNGe9jRGG5\u0026q=85\u0026s=5c319e58dd9b5c5b8a31cf2ad8009a1c","api":{"openapi":"https://swagger.getlago.com/openapi.yaml","mdx":{"server":"https://api.getlago.com/api/v1"}},"background":{"color":{"light":"#F5F5EF","dark":"#131923"}},"navbar":{"links":[{"href":"https://getlago.com/book-a-demo","label":"Book a Demo"}],"primary":{"type":"button","label":"Get Started","href":"https://getlago.com/book-a-demo"}},"footer":{"socials":{"github":"https://github.com/getlago/lago","slack":"https://getlago.com/slack","x":"https://x.com/getlago","linkedin":"https://www.linkedin.com/company/getlago","youtube":"https://www.youtube.com/channel/UCp6ltp7n3SgDVsmerJ7O7ZA"},"links":[{"header":"Documentation","items":[{"label":"Get started","href":"https://getlago.com/docs/guide/introduction/welcome-to-lago"},{"label":"API reference","href":"https://getlago.com/docs/api-reference/intro"},{"label":"Integrations","href":"https://getlago.com/docs/integrations/introduction"},{"label":"Templates","href":"https://getlago.com/docs/templates/introduction"},{"label":"Changelog","href":"https://getlago.com/docs/changelog/product"},{"label":"FAQ","href":"https://getlago.com/docs/faq/about-lago"}]},{"header":"Developers","items":[{"label":"Developer hub","href":"https://getlago.com/docs/developers"},{"label":"Authentication","href":"https://getlago.com/docs/auth"},{"label":"Webhooks","href":"https://getlago.com/docs/guide/webhooks"},{"label":"SDKs","href":"https://getlago.com/docs/developers"},{"label":"OpenAPI spec","href":"https://swagger.getlago.com/"},{"label":"MCP server","href":"https://getlago.com/docs/guide/ai-agents/mcp-server"},{"label":"Self-hosted","href":"https://getlago.com/docs/guide/lago-self-hosted/overview"},{"label":"llms.txt","href":"https://getlago.com/docs/llms.txt"}]},{"header":"Platform","items":[{"label":"Usage metering","href":"https://getlago.com/platform/usage-metering"},{"label":"Billing \u0026 invoicing","href":"https://getlago.com/platform/billing-invoicing"},{"label":"Cash collection","href":"https://getlago.com/platform/cash-collection"},{"label":"Revenue analytics","href":"https://getlago.com/platform/revenue-analytics"},{"label":"Entitlements","href":"https://getlago.com/platform/entitlements"},{"label":"Lago AI","href":"https://getlago.com/platform/ai"},{"label":"Pricing","href":"https://getlago.com/pricing"}]},{"header":"Company","items":[{"label":"About Lago","href":"https://getlago.com/docs/about"},{"label":"Customers","href":"https://getlago.com/customers"},{"label":"Blog","href":"https://getlago.com/blog"},{"label":"Contact","href":"https://getlago.com/docs/contact"},{"label":"Trust center","href":"https://security.getlago.com"},{"label":"Status","href":"https://status.getlago.com"}]}]},"seo":{"metatags":{"canonical":"https://getlago.com/docs","description":"Developer documentation for Lago's API-first billing platform, including OpenAPI, SDKs, webhooks, MCP, authentication, and implementation guides.","keywords":"Lago API, billing API, usage metering API, OpenAPI, billing SDK, Lago MCP"},"organization":{"id":"https://getlago.com/#organization","name":"Lago","legalName":"Get Lago Corp.","url":"https://getlago.com","logo":"https://getlago.com/docs/logo/light.svg","sameAs":["https://github.com/getlago","https://www.linkedin.com/company/getlago","https://x.com/GetLago","https://www.youtube.com/channel/UCp6ltp7n3SgDVsmerJ7O7ZA"]},"indexing":"all"},"fonts":{"heading":{"family":"GT America","weight":700,"source":"fonts/GT-America-Standard-Medium.woff2","format":"woff2"},"body":{"family":"GT America","source":"fonts/GT-America-Standard-Regular.woff2","format":"woff2"}},"styling":{"codeblocks":"dark","latex":true},"integrations":{"ga4":{"measurementId":"G-743BQ9THCG"},"cookies":{"key":"lago_docs_analytics","value":"granted"}},"errors":{"404":{"redirect":false,"title":"Documentation page not found","description":"No Lago documentation exists at this URL. Start at [Lago Developer Documentation](/welcome), browse [Developer Resources](/developers), inspect the [documentation index](/llms.txt) or [sitemap](/sitemap.xml), or search the [API reference](/api-reference/intro)."}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"navigation":{"global":{"anchors":[{"anchor":"Blog","icon":"newspaper","href":"https://getlago.com/blog"},{"anchor":"Community","icon":"slack","href":"https://getlago.com/slack"},{"anchor":"GitHub","icon":"github","href":"https://github.com/getlago/lago"},{"anchor":"Status","icon":"signal-bars","href":"https://status.getlago.com/"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"lago-docs","hasAudioNarration":false,"actualSubdomain":"lago-docs","customDomains":["getlago.com"],"gitSource":{"type":"github","owner":"getlago","repo":"lago-doc","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6adf4e12d7cf896c8ad837f6","collectionId":"ef513b95-75bf-42ca-a474-434543e00351","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6adf4e12d7cf896c8ad837f6"},"feedback":{"thumbs":true,"edits":true,"issues":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6adf4e12d7cf896c8ad837f6","clientVersion":"0.0.3971","searchFilterCounts":[{"language":"default","tag":"API References","count":235},{"language":"default","tag":"API Reference","count":235},{"language":"default","tag":"Guide","count":198},{"language":"default","tag":"Integrations","count":54},{"language":"default","tag":"Plans","count":46},{"language":"default","tag":"Resources","count":44},{"language":"default","tag":"Charges","count":39},{"language":"default","tag":"Pricing \u0026 Subscriptions","count":35},{"language":"default","tag":"Subscriptions","count":31},{"language":"default","tag":"Invoices","count":27}]},"assistantConfig":{},"basePath":"/docs","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"html{visibility:hidden;background-color:#f5f5ef}@media (prefers-color-scheme:dark){html{background-color:#131923}}html.ready{visibility:visible}.dark .welcome-card{background-color:#1c2535!important;border-color:rgba(255,255,255,.1)!important;box-shadow:0 1px 2px 0 rgba(0,0,0,.3)!important;color:#e5e7eb}.dark .welcome-card:hover{background-color:#243044!important}.dark #changelog-month-nav .changelog-month-nav__list a:hover,.dark .welcome-card h3{color:#fff}.dark .welcome-card p{color:#9ca3af!important}#changelog-month-nav{padding-left:2.5rem;width:19rem;box-sizing:border-box;margin-bottom:1.75rem;max-height:45vh;overflow-y:auto}#changelog-month-nav .changelog-month-nav__year{margin:0 0 .5rem;font-size:.875rem;line-height:1.5rem;font-weight:500;color:#364152}#changelog-month-nav .changelog-month-nav__list{list-style:none;margin:0;padding:0;border-left:1px solid rgba(0,0,0,.08)}#changelog-month-nav .changelog-month-nav__list a{display:block;padding:.25rem 0 .25rem .75rem;margin-left:-1px;border-left:1px solid transparent;font-size:.875rem;line-height:1.5rem;color:#697586;text-decoration:none;transition:color .15s ease,border-color .15s ease}#changelog-month-nav .changelog-month-nav__list a:hover{color:#121926}#changelog-month-nav .changelog-month-nav__list a.is-active{color:#006cfa;border-left-color:#006cfa;font-weight:500}.dark #changelog-month-nav .changelog-month-nav__year{color:#cdd5df}.dark #changelog-month-nav .changelog-month-nav__list{border-left-color:rgba(255,255,255,.12)}.dark #changelog-month-nav .changelog-month-nav__list a{color:#9aa4b2}.dark #changelog-month-nav .changelog-month-nav__list a.is-active{color:#4d9bff;border-left-color:#4d9bff}.update-container>div:first-child{display:none}.update-container>div:nth-child(2){flex:1 1 100%;max-width:100%;width:100%}.update-container{gap:0}#footer a[href*=\"utm_campaign=poweredBy\"]{display:none}"}],"page":{"pagePath":"guide/plans/charges/grouping","slug":"/guide/plans/charges/grouping","pageMetadata":{"title":"Group keys","description":"Group usage by event properties: either to price each group separately, or to break it down on invoices and usage for visibility only.","href":"/guide/plans/charges/grouping"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Group usage by event properties: either to price each group separately, or to break it down on invoices and usage for visibility only.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Frame,Heading,Note,OptimizedImage,Tab,Table,Tabs}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`A charge can group usage by the properties carried on your events. Lago offers two kinds of group keys, answering two different questions:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Pricing group keys`}),` answer `,_jsx(_components.em,{children:`“how much should each group cost?”`}),` Each group becomes its own fee with its own price.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Presentation group keys`}),` answer `,_jsx(_components.em,{children:`“how is this fee broken down?”`}),` The fee stays whole and priced once; Lago just shows how its units split across the groups, for visibility only.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`You can use either on its own, or combine them on the same charge.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{}),_jsx(_components.th,{children:`Pricing group keys`}),_jsx(_components.th,{children:`Presentation group keys`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Affects pricing and amounts`}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:`No`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Per-group breakdown shown as`}),_jsx(_components.td,{children:`Separate fees (line items)`}),_jsx(_components.td,{children:`Units-only sub-breakdown inside one fee`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Keys per charge`}),_jsx(_components.td,{children:`Multiple`}),_jsx(_components.td,{children:`Up to 2`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Aggregation types`}),_jsx(_components.td,{children:`All`}),_jsx(_components.td,{children:`All`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`pricing-group-keys`,children:`Pricing group keys`}),`\n`,_jsxs(_components.p,{children:[`AI and infrastructure platforms often tailor pricing by geography, hosting provider, model type, or service tier. Pricing group keys let you reflect those real-world cost variations on a single charge, instead of duplicating products. Each group is metered and `,_jsx(_components.strong,{children:`priced independently`}),`, and appears as its own fee on the invoice.`]}),`\n`,_jsx(_components.p,{children:`You don’t predefine the values. Define the key on the charge, send events that carry it, and Lago routes each event to the right pricing group at runtime. Pricing group keys work with every charge model, and you can set more than one per charge.`}),`\n`,_jsxs(Tabs,{children:[_jsxs(Tab,{title:`Dashboard`,id:`dashboard`,children:[_jsxs(_components.p,{children:[`On the charge, add a key in the `,_jsx(_components.strong,{children:`Pricing group key`}),` field (e.g. `,_jsx(_components.code,{children:`region`}),`, `,_jsx(_components.code,{children:`cloud`}),`, `,_jsx(_components.code,{children:`instance_type`}),`), then send events that include that property.`]}),_jsx(Frame,{caption:`Define a pricing group key`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/lago-docs/ugh-mbZn6BFsC-Za/guide/plans/images/pricing-group-key.png?fit=max\u0026auto=format\u0026n=ugh-mbZn6BFsC-Za\u0026q=85\u0026s=b0573b6610633157243b8e56cbe9cea8`,\"data-og-width\":`692`,width:`692`,\"data-og-height\":`613`,height:`613`,\"data-path\":`guide/plans/images/pricing-group-key.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/lago-docs/ugh-mbZn6BFsC-Za/guide/plans/images/pricing-group-key.png?w=280\u0026fit=max\u0026auto=format\u0026n=ugh-mbZn6BFsC-Za\u0026q=85\u0026s=e7937975c5d443a96d76393304385989 280w, https://mintcdn.com/lago-docs/ugh-mbZn6BFsC-Za/guide/plans/images/pricing-group-key.png?w=560\u0026fit=max\u0026auto=format\u0026n=ugh-mbZn6BFsC-Za\u0026q=85\u0026s=34ee3c52d7aac0b84d67682bd5365208 560w, https://mintcdn.com/lago-docs/ugh-mbZn6BFsC-Za/guide/plans/images/pricing-group-key.png?w=840\u0026fit=max\u0026auto=format\u0026n=ugh-mbZn6BFsC-Za\u0026q=85\u0026s=f168d44f4dfe80cb3d5ae2342ea2b2d7 840w, https://mintcdn.com/lago-docs/ugh-mbZn6BFsC-Za/guide/plans/images/pricing-group-key.png?w=1100\u0026fit=max\u0026auto=format\u0026n=ugh-mbZn6BFsC-Za\u0026q=85\u0026s=0321f0ba58c2308b509803366afdf184 1100w, https://mintcdn.com/lago-docs/ugh-mbZn6BFsC-Za/guide/plans/images/pricing-group-key.png?w=1650\u0026fit=max\u0026auto=format\u0026n=ugh-mbZn6BFsC-Za\u0026q=85\u0026s=b3a5635a17d06f9a70fe3b29b14a51b3 1650w, https://mintcdn.com/lago-docs/ugh-mbZn6BFsC-Za/guide/plans/images/pricing-group-key.png?w=2500\u0026fit=max\u0026auto=format\u0026n=ugh-mbZn6BFsC-Za\u0026q=85\u0026s=36599b9620a019525db7ab843d48262d 2500w`})})]}),_jsxs(Tab,{title:`API`,id:`api`,children:[_jsxs(_components.p,{children:[`Pricing group keys live inside the charge `,_jsx(_components.code,{children:`properties`}),`:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"properties\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"amount\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"1\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"pricing_group_keys\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"region\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(_components.p,{children:`Events then carry the key like any other property:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`{ `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`\"event\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: { `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`\"code\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"storage\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`\"properties\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: { `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`\"gb\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#B5CEA8`,\"--shiki-dark\":`#B5CEA8`},children:`20`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`\"region\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"us-east-1\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` } } }`})]}),`\n`]})})})]})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Example.`}),` A Storage charge priced at `,_jsx(_components.code,{children:`$1`}),` per GB (`,_jsx(_components.code,{children:`sum`}),` of `,_jsx(_components.code,{children:`gb`}),`) with `,_jsx(_components.code,{children:`pricing_group_keys: [\"region\"]`}),`, receiving 10 GB in EU and 15 GB in US, produces `,_jsx(_components.strong,{children:`two separate fees`}),`, each with its own units `,_jsx(_components.em,{children:`and`}),` amount:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Storage`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` region = EU 10 units $10.00`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` region = US 15 units $15.00`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ─────────────────────────────────`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Total $25.00`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`presentation-group-keys`,children:`Presentation group keys`}),`\n`,_jsxs(_components.p,{children:[`Sometimes you don’t want to charge differently for a dimension; you just want to `,_jsx(_components.strong,{children:`see`}),` it. Finance teams need to attribute a line item back to a region, team, or project. Customers want to know `,_jsx(_components.em,{children:`where`}),` their usage came from before they pay for it. None of that should change the price.`]}),`\n`,_jsxs(_components.p,{children:[`Presentation group keys give you exactly that: a breakdown of a fee’s units across one or two event properties, shown on the invoice and in usage responses, `,_jsx(_components.strong,{children:`without affecting pricing, aggregation, or the number of fees`}),`. Group by, for display only. Doing the same thing with pricing keys would split one fee into many, re-price non-linear charge models (graduated, volume, package) per group, and bloat both the invoice and your usage queries.`]}),`\n`,_jsx(Heading,{level:`3`,id:`how-it-works`,children:`How it works`}),`\n`,_jsx(_components.p,{children:`Lago computes the fee exactly as it does today (pricing untouched), then runs one extra aggregation to split that fee’s units across the presentation keys and attaches the result as a units-only breakdown.`}),`\n`,_jsxs(_components.p,{children:[`Take the `,_jsx(_components.strong,{children:`same`}),` Storage charge and events as the pricing example above (`,_jsx(_components.code,{children:`$1`}),` per GB, EU = 10 GB, US = 15 GB), but with `,_jsx(_components.code,{children:`region`}),` as a `,_jsx(_components.em,{children:`presentation`}),` key instead of a pricing one:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Storage 25 units $25.00`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` └ region = EU 10 units`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` └ region = US 15 units`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`One fee, priced once at `,_jsx(_components.code,{children:`$25.00`}),`. The same region split that pricing keys turned into two billable fees stays here as a units-only breakdown inside a single fee.`]}),`\n`,_jsxs(Note,{children:[_jsx(_components.p,{children:`Good to know:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Up to 2 keys`}),` per charge.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`A key can be both`}),` a pricing and a presentation key on the same charge; Lago de-duplicates them.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`All aggregation types work.`}),` For additive aggregations (`,_jsx(_components.code,{children:`count`}),`, `,_jsx(_components.code,{children:`sum`}),`, `,_jsx(_components.code,{children:`weighted sum`}),`) the group units add up to the fee total. For non-additive ones (`,_jsx(_components.code,{children:`max`}),`, `,_jsx(_components.code,{children:`latest`}),`, `,_jsx(_components.code,{children:`count unique`}),`) they may not: each group is computed independently, so read the breakdown as `,_jsx(_components.em,{children:`what happened in each group`}),`, not `,_jsx(_components.em,{children:`how the total splits`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Groups can show negative units`}),` when their events net out negative (credits, reversals).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Events missing the property`}),` fall under a `,_jsx(_components.code,{children:`null`}),` group.`]}),`\n`]})]}),`\n`,_jsx(Heading,{level:`3`,id:`how-to-use-it`,children:`How to use it`}),`\n`,_jsxs(Tabs,{children:[_jsx(Tab,{title:`Dashboard`,id:`dashboard-2`,children:_jsxs(_components.p,{children:[`On the charge, open the `,_jsx(_components.strong,{children:`Presentation group keys`}),` panel below the pricing model, add up to two keys (e.g. `,_jsx(_components.code,{children:`department`}),`, `,_jsx(_components.code,{children:`project`}),`), and choose per key whether it should show on the invoice. Then send events that carry those properties.`]})}),_jsxs(Tab,{title:`API`,id:`api-2`,children:[_jsxs(_components.p,{children:[`Presentation group keys live inside the charge `,_jsx(_components.code,{children:`properties`}),`, as objects with a `,_jsx(_components.code,{children:`value`}),` and optional `,_jsx(_components.code,{children:`options`}),`:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`7`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"properties\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"amount\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"1\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"presentation_group_keys\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`\"value\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"department\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` },`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`\"value\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"project\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`\"options\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: { `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`\"display_in_invoice\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`true`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` } }`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsxs(_components.p,{children:[`Set `,_jsx(_components.code,{children:`display_in_invoice`}),` to `,_jsx(_components.code,{children:`false`}),` to keep a key’s breakdown out of the invoice PDF while still returning it through the API. The breakdown also appears live in `,_jsx(_components.a,{href:`/guide/events/retrieve-usage#usage-breakdown-with-presentation-group-keys`,children:`current, projected, and past usage`}),`.`]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`combining-pricing-and-presentation-group-keys`,children:`Combining pricing and presentation group keys`}),`\n`,_jsxs(_components.p,{children:[`The two compose cleanly: pricing keys decide how many fees there are and what they cost, presentation keys break down each of those fees. The hierarchy is always `,_jsx(_components.strong,{children:`charge → pricing-group fee → presentation breakdown`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`A Storage charge at `,_jsx(_components.code,{children:`$1`}),`/unit with `,_jsx(_components.code,{children:`pricing_group_keys: [\"instance_id\"]`}),` and `,_jsx(_components.code,{children:`presentation_group_keys: [{ \"value\": \"region\" }]`}),` gives `,_jsx(_components.strong,{children:`one fee per instance`}),`, each with its own region breakdown:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Storage`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Instance A 25 units $25.00`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` └ region = EU 10 units`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` └ region = US 15 units`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Instance B 7 units $7.00`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` └ region = EU 4 units`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` └ region = US 3 units`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`The amounts come entirely from the pricing keys; the region split is layered on for visibility. With two presentation keys, the breakdown is by the combination of values (e.g. `,_jsx(_components.code,{children:`region · city`}),`).`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":"dark","config":{},"pageMetadata":{"title":"Group keys","description":"Group usage by event properties: either to price each group separately, or to break it down on invoices and usage for visibility only.","href":"/guide/plans/charges/grouping"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Pricing group keys","slug":"pricing-group-keys","depth":2,"children":[]},{"title":"Presentation group keys","slug":"presentation-group-keys","depth":2,"children":[{"title":"How it works","slug":"how-it-works","depth":3,"children":[]},{"title":"How to use it","slug":"how-to-use-it","depth":3,"children":[]},{"title":"Combining pricing and presentation group keys","slug":"combining-pricing-and-presentation-group-keys","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":["/docs/_mintlify/custom/lago-docs/a0e77058367d9146/canonical.js","/docs/_mintlify/custom/lago-docs/fa2446312177e9c6/loader.js","/docs/_mintlify/custom/lago-docs/c55d8403f7fc83ad/changelog-anchor-redirect.js","/docs/_mintlify/custom/lago-docs/8c326c8b67b47933/changelog-month-nav.js","/docs/_mintlify/custom/lago-docs/103c90943d27f62a/webmcp.js","/docs/_mintlify/custom/lago-docs/1219fb859e5c496e/github-outbound.js"],"subdomain":"lago-docs","siteName":"Lago","title":"Group keys - Lago","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-06-03T10:10:54.284Z","originalFileLocation":"guide/plans/charges/grouping.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Group usage by event properties: either to price each group separately, or to break it down on invoices and usage for visibility only.\">\u003cmeta data-mint-head name=\"keywords\" content=\"Lago API, billing API, usage metering API, OpenAPI, billing SDK, Lago MCP\">\u003cmeta data-mint-head name=\"application-name\" content=\"Lago\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/lago-docs/PXUAhcpsneOuo3Dn/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/lago-docs/PXUAhcpsneOuo3Dn/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/lago-docs/PXUAhcpsneOuo3Dn/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/lago-docs/PXUAhcpsneOuo3Dn/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/lago-docs/PXUAhcpsneOuo3Dn/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/lago-docs/PXUAhcpsneOuo3Dn/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/lago-docs/PXUAhcpsneOuo3Dn/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/lago-docs/PXUAhcpsneOuo3Dn/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/lago-docs/PXUAhcpsneOuo3Dn/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Group keys - Lago\">\u003cmeta data-mint-head property=\"og:description\" content=\"Group usage by event properties: either to price each group separately, or to break it down on invoices and usage for visibility only.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Lago\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://getlago.com/docs/guide/plans/charges/grouping\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://lago-docs.mintlify.app/_mintlify/api/og/v2?division=Charges\u0026amp;title=Group+keys\u0026amp;description=Group+usage+by+event+properties%3A+either+to+price+each+group+separately%2C+or+to+break+it+down+on+invoices+and+usage+for+visibility+only.\u0026amp;theme=eb987f771609ccd12d360d11\u0026amp;signature=8020daf14bd389837ef867f06fc3005d6081aeab8f52d1389e10f3786c87fda2\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Group keys - Lago\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Group usage by event properties: either to price each group separately, or to break it down on invoices and usage for visibility only.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://lago-docs.mintlify.app/_mintlify/api/og/v2?division=Charges\u0026amp;title=Group+keys\u0026amp;description=Group+usage+by+event+properties%3A+either+to+price+each+group+separately%2C+or+to+break+it+down+on+invoices+and+usage+for+visibility+only.\u0026amp;theme=eb987f771609ccd12d360d11\u0026amp;signature=8020daf14bd389837ef867f06fc3005d6081aeab8f52d1389e10f3786c87fda2\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/lago-docs/PXUAhcpsneOuo3Dn/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Lago\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#006CFA\">\u003clink data-mint-head rel=\"canonical\" href=\"https://getlago.com/docs/guide/plans/charges/grouping\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/guide/plans/charges/grouping.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://getlago.com/#organization\",\"name\":\"Lago\",\"legalName\":\"Get Lago Corp.\",\"url\":\"https://getlago.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://getlago.com/docs/logo/light.svg\"},\"sameAs\":[\"https://github.com/getlago\",\"https://www.linkedin.com/company/getlago\",\"https://x.com/GetLago\",\"https://www.youtube.com/channel/UCp6ltp7n3SgDVsmerJ7O7ZA\"]},{\"@type\":\"WebSite\",\"@id\":\"https://getlago.com/docs#website\",\"name\":\"Lago\",\"url\":\"https://getlago.com/docs\",\"publisher\":{\"@id\":\"https://getlago.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://getlago.com/docs/guide/plans/charges/grouping#webpage\",\"url\":\"https://getlago.com/docs/guide/plans/charges/grouping\",\"name\":\"Group keys\",\"description\":\"Group usage by event properties: either to price each group separately, or to break it down on invoices and usage for visibility only.\",\"dateModified\":\"2026-06-03T10:10:54.284Z\",\"isPartOf\":{\"@id\":\"https://getlago.com/docs#website\"},\"breadcrumb\":{\"@id\":\"https://getlago.com/docs/guide/plans/charges/grouping#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://getlago.com/docs/guide/plans/charges/grouping#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Pricing \u0026 Subscriptions\",\"item\":\"https://getlago.com/docs/guide/plans/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Plans\",\"item\":\"https://getlago.com/docs/guide/plans/overview\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Charges\",\"item\":\"https://getlago.com/docs/guide/plans/charges/usage-based-charges\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Group keys\",\"item\":\"https://getlago.com/docs/guide/plans/charges/grouping\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://getlago.com/docs/guide/plans/charges/grouping#article\",\"headline\":\"Group keys\",\"name\":\"Group keys\",\"description\":\"Group usage by event properties: either to price each group separately, or to break it down on invoices and usage for visibility only.\",\"url\":\"https://getlago.com/docs/guide/plans/charges/grouping\",\"mainEntityOfPage\":{\"@id\":\"https://getlago.com/docs/guide/plans/charges/grouping#webpage\"},\"dateModified\":\"2026-06-03T10:10:54.284Z\",\"publisher\":{\"@id\":\"https://getlago.com/#organization\"},\"isPartOf\":{\"@id\":\"https://getlago.com/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Lago\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Lago","nav":{"global":{"anchors":[{"anchor":"Blog","icon":"newspaper","href":"https://getlago.com/blog"},{"anchor":"Community","icon":"slack","href":"https://getlago.com/slack"},{"anchor":"GitHub","icon":"github","href":"https://github.com/getlago/lago"},{"anchor":"Status","icon":"signal-bars","href":"https://status.getlago.com/"}]},"tabs":[{"tab":"Home","pages":[{"title":"Home","href":"/welcome"}]},{"tab":"Guide","groups":[{"group":"Introduction","pages":[{"title":"Welcome to Lago","href":"/guide/introduction/welcome-to-lago"},{"title":"Why billing is a nightmare","href":"/guide/introduction/why-billing-is-a-nightmare"}]},{"group":"Get started","pages":[{"title":"Lago Cloud","href":"/guide/lago-cloud"},{"group":"Lago Self-hosted","pages":[{"title":"Self-hosting overview","sidebarTitle":"Overview","href":"/guide/lago-self-hosted/overview"},{"title":"Docker","href":"/guide/lago-self-hosted/docker"},{"title":"Kubernetes","href":"/guide/lago-self-hosted/kubernetes"},{"title":"Compatibility matrix","href":"/guide/lago-self-hosted/compatibility-matrix"},{"title":"Database maintenance","href":"/guide/lago-self-hosted/database-maintenance"},{"title":"Tracking and analytics","href":"/guide/lago-self-hosted/tracking-analytics"},{"title":"Versions update","href":"/guide/lago-self-hosted/update-instance"},{"title":"Useful commands","href":"/guide/lago-self-hosted/commands"}]}]},{"group":"Events \u0026 Usage Components","pages":[{"group":"Billable metrics","pages":[{"title":"Create billable metrics","href":"/guide/billable-metrics/create-billable-metrics"},{"group":"Aggregation types","pages":[{"title":"Aggregation types: how usage is measured and counted","sidebarTitle":"Overview","href":"/guide/billable-metrics/aggregation-types/overview"},{"title":"COUNT","href":"/guide/billable-metrics/aggregation-types/count"},{"title":"UNIQUE COUNT","href":"/guide/billable-metrics/aggregation-types/count-unique"},{"title":"LATEST","href":"/guide/billable-metrics/aggregation-types/latest"},{"title":"MAX","href":"/guide/billable-metrics/aggregation-types/max"},{"title":"SUM","href":"/guide/billable-metrics/aggregation-types/sum"},{"title":"WEIGHTED SUM","href":"/guide/billable-metrics/aggregation-types/weighted-sum"},{"title":"CUSTOM","href":"/guide/billable-metrics/aggregation-types/custom-agg"},{"title":"Aggregation examples","href":"/guide/billable-metrics/aggregation-types/aggregation-examples"}]},{"title":"Recurring vs metered","href":"/guide/billable-metrics/recurring-vs-metered"},{"title":"SQL expressions","href":"/guide/billable-metrics/sql-expressions"},{"title":"Rounding","href":"/guide/billable-metrics/rounding"},{"title":"Filters and dimensions","href":"/guide/billable-metrics/filters"},{"title":"Delete billable metrics","href":"/guide/billable-metrics/delete-billable-metrics"}]},{"group":"Usage ingestion","pages":[{"title":"Ingest usage","href":"/guide/events/ingesting-usage"},{"title":"Performance and optimization","href":"/guide/events/usage-performances"},{"title":"Metering ingestion sources","href":"/guide/events/metering-source"},{"title":"Retrieve usage","href":"/guide/events/retrieve-usage"}]},{"group":"Alerts","pages":[{"title":"Usage alerts","href":"/guide/alerts/usage-alerts"},{"title":"Credits consumption alerts","href":"/guide/alerts/credits-consumption-alerts"}]}]},{"group":"Pricing \u0026 Subscriptions","pages":[{"group":"Plans","pages":[{"title":"Plans: price subscriptions, usage and hybrid models","sidebarTitle":"Overview","href":"/guide/plans/overview"},{"title":"Plan model","href":"/guide/plans/plan-model"},{"group":"Charges","pages":[{"title":"Usage based charge","href":"/guide/plans/charges/usage-based-charges"},{"title":"Fixed charge","href":"/guide/plans/charges/fixed-charges"},{"group":"Charge models","pages":[{"title":"Standard","href":"/guide/plans/charges/charge-models/standard"},{"title":"Graduated","href":"/guide/plans/charges/charge-models/graduated"},{"title":"Package","href":"/guide/plans/charges/charge-models/package"},{"title":"Percentage","href":"/guide/plans/charges/charge-models/percentage"},{"title":"Volume","href":"/guide/plans/charges/charge-models/volume"},{"title":"Graduated percentage","href":"/guide/plans/charges/charge-models/graduated-percentage"},{"title":"Dynamic","href":"/guide/plans/charges/charge-models/dynamic"},{"title":"Custom price","href":"/guide/plans/charges/charge-models/custom-price"}]},{"title":"Metered vs Recurring","href":"/guide/plans/charges/metered-vs-recurring"},{"title":"Arrears vs Advance","href":"/guide/plans/charges/arrears-vs-advance"},{"title":"Prorated vs Full","href":"/guide/plans/charges/prorated-vs-full"},{"title":"Spending minimums","href":"/guide/plans/charges/spending-minimum"},{"title":"Invoiceable vs Uninvoiceable","href":"/guide/plans/charges/invoiceable-vs-noninvoiceable"},{"title":"Charges with filters","description":"Charge your customers by leveraging a combination of filters specified in the billable metric.","href":"/guide/plans/charges/charges-with-filters"},{"title":"Group keys","href":"/guide/plans/charges/grouping"}]},{"title":"Custom pricing units","description":"A pricing unit works like a custom currency, allowing you to express charges in something other than fiat (e.g., credits or tokens).","href":"/guide/plans/custom-pricing-units"},{"title":"Commitments","href":"/guide/plans/commitment"},{"title":"Progressive billing","href":"/guide/plans/progressive-billing"}]},{"group":"Customers","pages":[{"title":"Customer management","href":"/guide/customers/customer-management"},{"title":"Customer metadata","href":"/guide/customers/customer-metadata"},{"title":"Invoice a customer","href":"/guide/customers/invoice-customer"},{"title":"The customer portal","href":"/guide/customers/customer-portal"}]},{"title":"Billing entities","href":"/guide/billing-entities"},{"group":"Subscriptions","pages":[{"title":"Assign a plan to a customer","href":"/guide/subscriptions/assign-plan"},{"title":"Activation rules","href":"/guide/subscriptions/activation-rules"},{"title":"Upgrades and downgrades","href":"/guide/subscriptions/upgrades-downgrades"},{"title":"Edit a subscription","href":"/guide/subscriptions/edit-subscription"},{"title":"Terminate a subscription","href":"/guide/subscriptions/terminate-subscription"}]},{"title":"Coupons","href":"/guide/coupons"},{"title":"Entitlements","href":"/guide/entitlements"},{"title":"Emails","href":"/guide/emails"}]},{"group":"Quotes \u0026 Order Forms","pages":[{"title":"Quotes and order forms: from proposal to provisioned billing","sidebarTitle":"Overview","href":"/guide/quotes/overview"},{"title":"Creating a quote","href":"/guide/quotes/create-a-quote"},{"title":"Writing the quote content","href":"/guide/quotes/quote-editor"},{"title":"Order forms","href":"/guide/quotes/order-forms"},{"title":"Orders","href":"/guide/quotes/orders"},{"title":"Limitations","href":"/guide/quotes/limitations"}]},{"group":"Invoicing","pages":[{"group":"Invoices","pages":[{"title":"Invoicing: generate invoices from plans and usage","sidebarTitle":"Overview","href":"/guide/invoicing/overview"},{"group":"Invoicing settings","pages":[{"title":"Invoicing settings: customize invoices per billing entity","sidebarTitle":"Overview","href":"/guide/invoicing/invoicing-settings/overview"},{"title":"Invoice numbering","href":"/guide/invoicing/invoicing-settings/invoice-numbering"},{"title":"Grace period","href":"/guide/invoicing/invoicing-settings/grace-period"},{"title":"Net payment term","href":"/guide/invoicing/invoicing-settings/net-payment-term"},{"title":"Empty invoice generation","href":"/guide/invoicing/invoicing-settings/empty-invoices"},{"title":"Issuing date preferences","href":"/guide/invoicing/invoicing-settings/issuing_date"},{"title":"Taxes","href":"/guide/invoicing/invoicing-settings/taxes"}]},{"title":"Fees","href":"/guide/invoicing/fees"},{"title":"Draft invoices","href":"/guide/invoicing/draft-invoices"},{"title":"Download invoices","href":"/guide/invoicing/download-invoices"},{"title":"Invoice metadata","href":"/guide/invoicing/invoice-metadata"},{"title":"Preview an invoice","href":"/guide/invoicing/previews"},{"title":"Void invoices","href":"/guide/invoicing/void"}]},{"group":"One-off invoices","pages":[{"title":"Create add-ons","href":"/guide/one-off-invoices/create-add-ons"},{"title":"Issue one-off invoices","href":"/guide/one-off-invoices/create-one-off-invoices"}]},{"group":"Credit notes","pages":[{"title":"Credit notes: correct an invoice without losing the record","sidebarTitle":"Overview","href":"/guide/invoicing/credit-notes/overview"},{"title":"Credit note metadata","href":"/guide/invoicing/credit-notes/credit-note-metadata"}]},{"title":"Revenue share","href":"/guide/revenue-share"},{"group":"E-invoicing","pages":[{"title":"E-invoicing: generate invoices that comply by country","sidebarTitle":"Overview","href":"/guide/invoicing/e-invoicing/overview"},{"title":"E-Invoicing contributions","href":"/guide/invoicing/e-invoicing/contributions"}]}]},{"group":"Payments \u0026 Cash Collection","pages":[{"group":"Payments","pages":[{"title":"Payment providers integrations","href":"/guide/payments/payment-providers"},{"title":"Payment methods","href":"/guide/payments/payment-methods"},{"title":"Record manual payments","href":"/guide/payments/record-manual-payments"},{"title":"Payment pre-authorization","href":"/guide/payments/payment-authorization"},{"title":"Payment retries","href":"/guide/payments/payment-retries"},{"title":"Payment receipts","href":"/guide/payments/receipts"}]},{"group":"Dunning","pages":[{"title":"Manual dunning","href":"/guide/dunning/manual-dunning"},{"title":"Automatic dunning","href":"/guide/dunning/automatic-dunning"}]},{"group":"Wallets and prepaid credits","pages":[{"title":"Prepaid credits and wallets: bill usage against a balance","sidebarTitle":"Overview","href":"/guide/wallet-and-prepaid-credits/overview"},{"title":"Top-up and void credits","href":"/guide/wallet-and-prepaid-credits/wallet-top-up-and-void"},{"title":"Traceability","href":"/guide/wallet-and-prepaid-credits/traceability"}]}]},{"group":"AI Agents and MCP","pages":[{"title":"AI tools for Lago","sidebarTitle":"AI tools","href":"/guide/ai-agents/for-agents"},{"title":"Build Lago billing with a coding agent","sidebarTitle":"Build with a coding agent","href":"/guide/ai-agents/coding-agents"},{"group":"Lago Agent SDK","pages":[{"title":"Agent SDK: bill LLM token usage from your application","sidebarTitle":"Overview","href":"/guide/ai-agents/agent-sdk/overview"},{"title":"Billing","href":"/guide/ai-agents/agent-sdk/billing"},{"group":"Providers","pages":[{"title":"OpenAI","href":"/guide/ai-agents/agent-sdk/openai"},{"title":"Anthropic","href":"/guide/ai-agents/agent-sdk/anthropic"},{"title":"AWS Bedrock","href":"/guide/ai-agents/agent-sdk/bedrock"},{"title":"Google Gemini","href":"/guide/ai-agents/agent-sdk/gemini"},{"title":"Mistral","href":"/guide/ai-agents/agent-sdk/mistral"}]},{"group":"Gateways","pages":[{"title":"Cloudflare AI Gateway","href":"/guide/ai-agents/agent-sdk/cloudflare"},{"title":"Databricks AI Gateway","href":"/guide/ai-agents/agent-sdk/databricks"},{"title":"Snowflake Cortex","href":"/guide/ai-agents/agent-sdk/snowflake"},{"title":"Ramp Router","href":"/guide/ai-agents/agent-sdk/ramp-router"}]},{"title":"Reference","href":"/guide/ai-agents/agent-sdk/reference"}]},{"title":"The Billing Assistant","href":"/guide/ai-agents/billing-assistant"},{"title":"The Finance Assistant","href":"/guide/ai-agents/finance-assistant"},{"title":"The Dunning Agent","href":"/guide/ai-agents/dunning-agent"},{"title":"MCP server for billing: connect coding agents to usage and invoices","sidebarTitle":"Lago MCP Server","href":"/guide/ai-agents/mcp-server"}]},{"group":"Data \u0026 Analytics","pages":[{"title":"Webhooks","href":"/guide/webhooks"},{"group":"Analytics","pages":[{"group":"Reports","pages":[{"title":"Billing analytics: read revenue, usage and invoice reports","sidebarTitle":"Overview","href":"/guide/analytics/overview"},{"group":"Subscriptions","pages":[{"title":"Active subscriptions","href":"/guide/analytics/subscriptions/active"},{"title":"New subscriptions","href":"/guide/analytics/subscriptions/new"},{"title":"Churn","href":"/guide/analytics/subscriptions/churn"}]},{"group":"Revenue","pages":[{"title":"Revenue streams","href":"/guide/analytics/revenue/revenue-streams"},{"title":"MRR","href":"/guide/analytics/revenue/mrr"}]},{"title":"Credit ledgers","href":"/guide/analytics/credit-ledgers"},{"title":"Usage","href":"/guide/analytics/usage"},{"group":"Cash collection","pages":[{"title":"Payments","href":"/guide/analytics/cash-collection/payments"},{"title":"Dunnings","href":"/guide/analytics/cash-collection/dunnings"}]},{"title":"Invoices","href":"/guide/analytics/invoices"}]},{"title":"Forecasted usage","href":"/guide/analytics/forecasted-usage"}]},{"group":"Data exports","pages":[{"title":"Export invoices","href":"/guide/invoicing/export"},{"title":"Lago Data Pipeline","href":"/integrations/data/lago-data-pipeline"}]}]},{"group":"Revenue recognition","tag":"Private beta","pages":[{"title":"Revenue recognition: turn billing into accrual-basis revenue","sidebarTitle":"Overview","href":"/guide/revenue-recognition/overview"},{"group":"How it works","pages":[{"title":"Methodology","href":"/guide/revenue-recognition/how-it-works/methodology"},{"title":"Subscriptions","href":"/guide/revenue-recognition/how-it-works/subscriptions"},{"title":"Usage-based charges","href":"/guide/revenue-recognition/how-it-works/usage-based-charges"},{"title":"Minimum commitments","href":"/guide/revenue-recognition/how-it-works/minimum-commitments"},{"title":"Taxes","href":"/guide/revenue-recognition/how-it-works/taxes"},{"title":"Payments","href":"/guide/revenue-recognition/how-it-works/payments"},{"title":"Credit notes and adjustments","href":"/guide/revenue-recognition/how-it-works/credit-notes-and-adjustments"},{"title":"Disputes and failed payments","href":"/guide/revenue-recognition/how-it-works/disputes-and-failed-payments"},{"title":"Wallets and prepaid credits","href":"/guide/revenue-recognition/how-it-works/wallets-and-prepaid-credits"}]},{"group":"Get started","pages":[{"title":"Enable revenue recognition","href":"/guide/revenue-recognition/get-started/enable"},{"title":"Prepare your billing data","href":"/guide/revenue-recognition/get-started/prepare-billing-data"},{"title":"Review your first reporting period","href":"/guide/revenue-recognition/get-started/review-first-period"},{"title":"Export revenue recognition data","href":"/guide/revenue-recognition/get-started/export"}]},{"group":"Reports","pages":[{"title":"Recognized Revenue","href":"/guide/revenue-recognition/reports/recognized-revenue"},{"title":"Deferred Revenue","href":"/guide/revenue-recognition/reports/deferred-revenue"},{"title":"Revenue Waterfall","href":"/guide/revenue-recognition/reports/revenue-waterfall"},{"title":"Statements","href":"/guide/revenue-recognition/reports/statements"},{"title":"Journal Entry Details","href":"/guide/revenue-recognition/reports/journal-entry-details"}]},{"group":"Examples","pages":[{"title":"Full lifecycle example","href":"/guide/revenue-recognition/examples/full-lifecycle"}]}]},{"group":"Resources","pages":[{"group":"Security","pages":[{"title":"Audit logs","href":"/guide/security/audit-logs"},{"title":"Security logs","href":"/guide/security/security-logs"},{"title":"API Keys","href":"/guide/security/api-keys"},{"title":"RBAC - Role-Based Access Control","href":"/guide/security/rbac"},{"title":"Single Sign-On (SSO)","href":"/guide/security/sso"},{"title":"SOC 2 Type 2","href":"/guide/security/soc"}]},{"title":"Integration testing","href":"/guide/integration-testing"},{"title":"Lago OpenAPI","href":"/guide/lago-open-api"},{"group":"Lago CLI","pages":[{"title":"Lago CLI: the billing API from your terminal","sidebarTitle":"Overview","href":"/guide/lago-cli/overview"},{"group":"Command reference","pages":[{"title":"Command reference","href":"/guide/lago-cli/commands/overview"},{"title":"Setup and diagnostics","href":"/guide/lago-cli/commands/setup"},{"title":"Helpers","href":"/guide/lago-cli/commands/helpers"},{"title":"Billable metrics","href":"/guide/lago-cli/commands/billable-metrics"},{"title":"Plans","href":"/guide/lago-cli/commands/plans"},{"title":"Features and entitlements","href":"/guide/lago-cli/commands/features-and-entitlements"},{"title":"Customers","href":"/guide/lago-cli/commands/customers"},{"title":"Subscriptions","href":"/guide/lago-cli/commands/subscriptions"},{"title":"Events","href":"/guide/lago-cli/commands/events"},{"title":"Invoices","href":"/guide/lago-cli/commands/invoices"},{"title":"Credit notes","href":"/guide/lago-cli/commands/credit-notes"},{"title":"Coupons and add-ons","href":"/guide/lago-cli/commands/coupons-and-add-ons"},{"title":"Wallets","href":"/guide/lago-cli/commands/wallets"},{"title":"Taxes and fees","href":"/guide/lago-cli/commands/taxes-and-fees"},{"title":"Payments","href":"/guide/lago-cli/commands/payments"},{"title":"Webhooks","href":"/guide/lago-cli/commands/webhooks"},{"title":"Analytics and logs","href":"/guide/lago-cli/commands/analytics-and-logs"},{"title":"Organization","href":"/guide/lago-cli/commands/organization"},{"title":"Quotes and orders","href":"/guide/lago-cli/commands/quotes-and-orders"}]}]},{"group":"Migrations","pages":[{"title":"Migration to v1.54.0","href":"/guide/migration/migration-to-v1.54.0"},{"title":"Migration to v1.52.0","href":"/guide/migration/migration-to-v1.52.0"},{"title":"Migration to v1.50.0","href":"/guide/migration/migration-to-v1.50.0"},{"title":"Migration to v1.45.0","href":"/guide/migration/migration-to-v1.45.0"},{"title":"Migration to v1.44.0","href":"/guide/migration/migration-to-v1.44.0"},{"title":"Migration to v1.43.0","href":"/guide/migration/migration-to-v1.43.0"},{"title":"Migration to v1.32.0","href":"/guide/migration/migration-to-v1.32.0"},{"title":"Migration to v1.31.0","href":"/guide/migration/migration-to-v1.31.0"},{"title":"Migration to v1.29.0","href":"/guide/migration/migration-to-v1.29.0"},{"title":"Migration to v1.28.1","href":"/guide/migration/migration-to-v1.28.1"},{"title":"Migration to v1.25.0","href":"/guide/migration/migration-to-v1.25.0"},{"title":"Migration to v1.20.0","href":"/guide/migration/migration-to-v1.20.0"},{"title":"Migration to v1.2.0","href":"/guide/migration/migration-to-v1.2.0"}]}]}]},{"tab":"API References","pages":[{"title":"API References","href":"/api-reference/intro"}]},{"tab":"Integrations","pages":[{"title":"Integrations","href":"/integrations/introduction"}]},{"tab":"Templates","pages":[{"title":"Templates","href":"/templates/introduction"}]},{"tab":"FAQ","pages":[{"title":"FAQ","href":"/faq/about-lago"}]},{"tab":"Knowledge Base","href":"https://knowledge.getlago.com"},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog/product"}]}]},"title":"Group keys - Lago","buildId":"dpl_GvhK4qVXq51DpfYJLCtPpYNN4YHN","deploymentId":"dpl_GvhK4qVXq51DpfYJLCtPpYNN4YHN","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-5VlDM5Io.js","DynamicMarkdown-DO1Fz7ar.js","zoom-image-lightbox-uyuQJRFs.js","lightbox-handle-r17bVUz3.js"]}