Skip to content
Insights · Engineering

Which meter did that event name?

Name the meter that event named: the event name, the customer, and the value. A different event can name another customer. Another account omits it.

Scroll
EngineeringOct 30, 202613 min readBy Salman Naqvi, Founder & CEO
Which meter did that event name?

A buyer says the invoice charged for calls they did not make, or says the usage number is a guess. Tonight, three proofs, in a console you administer. Name the meter that event named: the event name, the customer id, and the value. If the event stored no value, write that, and do not invent a count to fill the hole. Show a different event whose customer id or value is not this one. Show another account's list that does not contain this event. If any of the three needs the person who wired billing, you have not named the meter. You have a chart and a guess.

This is the meter on one event. It is not the product. Which product did that price sell? is the product id and the unit amount on a price. A price can be right while no event names this meter. It is not the status. Which status is that subscription in? is a status string. A subscription can be active while this event was never stored. It is not the trial. Which trial did that customer start? is a trial end or a pair of nulls. A trial is not a usage value. It is not the key a repository trusted, and it is not the image a prompt returned. Those are different objects, and they are not this event name.

None of what follows is a rate for this product, and none of it is legal advice. The fields below are one processor's current description of a meter event and of a meter, and the event sample is the same object on two pages. The counts below that are a 2026 paper about other companies' public pricing pages. A value on an example is not a census of your buyers. A paper that counted pricing pages cannot name the event on the meter you opened tonight. They do tell you which numbers people mix up when they try to sound precise about usage they have not opened.

Stripe's meter-event object and Stripe's create-meter-event response print the same object. object is billing.meter_event. 19 characters. event_name is ai_search_api. 13 characters. identifier is identifier_123. 14 characters. livemode is true, so the example is marked live, and it is still an example, not a call your customer made. created is 1704824589. timestamp is 1680210639. The request on the create page does not send a timestamp. The parameter text says timestamp defaults to the current time if you omit it, and that a timestamp you do send must be within the past 35 calendar days or up to 5 minutes in the future. The response timestamp is not created. 1704824589 minus 1680210639 is 24613950 seconds. 24613950 divided by 86400 is 284 days and a remainder of 76350 seconds. 76350 divided by 3600 is 21 hours and a remainder of 750 seconds. 750 divided by 60 is 12 minutes and 30 seconds. 284 days, 21 hours, 12 minutes, and 30 seconds separate the two fields. 35 times 86400 is 3024000. 24613950 is not 3024000. 5 times 60 is 300. 24613950 is not 300. A sample whose timestamp sits hundreds of days away from created is not a timestamp inside the window the same page describes, and the request never sent one (Stripe, The Billing Meter Event object, and Create a billing meter event).

The same create page names limits the sample does not sit on. event_name maximum is 100 characters. 13 is not 100. identifier maximum is 100 characters. 14 is not 100. The page recommends UUID-like identifiers and says uniqueness is enforced for a rolling period of at least 24 hours. identifier_123 is 14 characters. It is not a UUID. 24 times 3600 is 86400 seconds, which is one day, and one day is not 284 days. payload value is the string 25. Two characters. The customer in the payload is cus_NciAYcXfLnqBoz. 18 characters. The prerequisite on the create page creates a customer named Jenny Rosen, 11 characters, at jennyrosen@example.com, 22 characters, and the request then sends payload[stripe_customer_id] as a placeholder, not as cus_NciAYcXfLnqBoz. Jenny Rosen is not that id. The version header on the sample request is 2026-10-28.endive. 17 characters. 17 is not 18, and it is not 14.

The meter object that shares the event name is a different record, and it does not agree with the event on live mode. The meter id is mtr_test_61Q8nQMqIFK9fRQmr41CMAXJrFdZ5MnA. 41 characters. object is billing.meter. 13 characters, the same length as ai_search_api, and not the same string. created is 1704824589, the same integer as the event's created, and not the event's timestamp. updated is 1704898330. 1704898330 minus 1704824589 is 73741 seconds. 73741 divided by 3600 is 20 hours and a remainder of 1741 seconds. 1741 divided by 60 is 29 minutes and 1 second. 20 hours, 29 minutes, and 1 second is not 284 days. livemode on the meter is false. livemode on the event is true. false is not true, and a test-mode meter id is not a live-mode event. display_name is Search API Calls. 16 characters. event_name is ai_search_api, the same 13 characters as the event. Search API Calls is not ai_search_api. status is active. active is 6 characters. The other status name on the page is inactive. 8 characters. 6 is not 8. deactivated_at is null. event_time_window is null. The enum names are day and hour. null is not day, and null is not hour. default_aggregation formula is sum. 3 characters. customer_mapping event_payload_key is stripe_customer_id. 19 characters, the same length as billing.meter_event, and not the same string. value_settings event_payload_key is value. 5 characters. The payload key value is not the payload value 25 (Stripe, The Billing Meter object).

The usage-based implementation guide names aggregation methods the meter sample does not list. For its Hypernian example it says to select Sum, to choose Count when you bill the number of events, and to choose Last when you bill the last value reported. That is three names. The meter sample prints one formula, sum. Sum is not Count, and Count is not Last. The guide's event name for that example is hypernian_tokens. 17 characters. 17 is not 13, and hypernian_tokens is not ai_search_api. A sum of token counts on a guide's fictional product is not the string 25 on this event. Do not paste hypernian_tokens onto ai_search_api because both pages belong to the same processor (Stripe, Set up a pay-as-you-go pricing model).

The study people reach for when they want a usage share is a different document, and its own 52 is two counts. Pratik Gupta, affiliated with Stripe, codes public pricing pages and says the employer is excluded from the sample. The dataset sentence says 75 rows: 52 AI-native product rows, 14 cloud platforms, and 9 purposive. 52 plus 14 plus 9 is 75. That addition matches. The same paragraph says 46 offerings were verified with full mechanics and 23 were confirmed not publicly observable. 46 plus 23 is 69. 69 is not 75. The next sentence names six offerings whose model was confirmed without full mechanics. 69 plus 6 is 75. The page does not print 69. A later sentence says the entry-price field is populated for 44 of the 52 observable rows: 25 free, 13 pay-as-you-go, five at $8 to $20, and one at $0.99. 25 plus 13 is 38. 38 plus 5 is 43. 43 plus 1 is 44. That addition matches. 52 minus 44 is 8. The page does not print 8. The 52 in 52 observable rows is not the 52 in 52 AI-native product rows. 75 minus 23 is 52, which is how the observable total reaches 52. 52 minus 23 is 29, which is the observable AI-native count used below. The page does not print that subtraction. Do not treat the two 52s as one number (Gupta, From Tokens to Credits to Outcomes).

The same paper's 55% is a rounding of a fraction it also prints, and other percentages on the page are a different base. It says 16 of 29 observable AI-native rows, 55%. 16 divided by 29, times 100, is 55.17. The sentence prints 55. It does not print 55.17. 23 of the 52 AI-native rows, 44%, publish no pricing. 23 divided by 52, times 100, is 44.23. The sentence prints 44. It does not print 44.23. Of those 23, 12 are 52%. 12 divided by 23, times 100, is 52.17. The sentence prints 52. 12 plus 2 plus 4 plus 5 is 23. That addition matches, and 52 percent of 23 is not 44 percent of 52. The blinded audit is 15 of 75 rows. 15 divided by 75 is 0.20 exactly, which is the 20% the sentence names. Of the 15, 4 were not observable and 11 were. 4 plus 11 is 15. Pricing-primitive agreement was 8 of 11, 72.7%. 8 divided by 11, times 100, is 72.727, which rounds half-up to 72.7. That cell matches. Cohen's kappa is 0.52 on the 11 and 0.71 when observability is included. 0.71 minus 0.52 is 0.19. The page does not print 0.19. The pure-metered sentence says 41% of observable pages in the historical panel and 11 of 14 cloud rows. 11 divided by 14, times 100, is 78.57. The sentence does not print 78.57. 41 is not 55, and 11 of 14 is not 16 of 29. The timeline sentence says five dated events in 2023, four in 2024, five in 2025, and two through April 2026. 5 plus 4 plus 5 plus 2 is 16. The page does not print 16. 25 free-entry rows are not the string 25 on a meter event, and $0.99 is not that string either.

Do the three proofs on one real event, in the console that actually holds it. First, the binding. Copy the event name, the customer id, and the value. If the value is a string, write that it is a string. Do not turn 25 into a dollar amount because a paper printed $0.99, and do not infer ai_search_api because a sample prints it. If the only number you have is a chart of the month, write the chart and write that you did not open the event. A 284-day gap on a sample is not your customer's usage. Second, the other event. A different event, with a different customer id or a different value, is not this one. A table of 75 pricing pages is not that second event. If you cannot show an event that is not this one, you have a counter, not a record. Third, the other account. A list that belongs to someone else does not contain this identifier. If the only list is a single shared table and you cannot say whose value it is, write that. A tenant you cannot name is the finding. It is not a reason to tell the buyer the meter recorded 25.

Three moves feel like the proof and are a second problem. Sending a second event with the same identifier because the first value looked low, before you have copied the identifier. The page says uniqueness is enforced for at least 24 hours. A retry can be dropped, and you will not know what the first value was if you did not copy it. Quoting 55% or 41% because one of them looks precise, while the event you were asked about is one row, and the companies that produced those shares had not opened your customer. Asking a model which meter the event named. The model will pick a plausible event name. It will not open the event. A price you have not kept, while the buyer is arguing about the unit, is which product did that price sell?. Opening that screen does not name the value.

The path is ordinary when an operator can open one customer's event without opening the next customer's total as the way to prove it. Haystack is one search layer across documents, data lakes, and repositories. The shape that matters here is one account you can point at, distinct from the next account. That case is not a meter-event ledger. Nothing in that sentence is a headcount, a duration, or a result figure. If the only control on the screen shows a month's volume and will not name an event identifier, you do not have this proof. You have a chart.

There is a version of this afternoon where hiring the path is the wrong purchase. Nothing is for sale, because the product does not take money yet. You have no product. You are still choosing who will build, and the document in front of you is a term sheet. The criteria for that choice sit on the page written for a top SaaS development company. That page is criteria. It does not rank anyone, including us. The only fact in the room is a paper's share of other companies' pages. 55 is not your meter, and 16 of 29 is not your meter, and the string 25 on a sample is not your meter. A customer has already seen another customer's event. Naming an identifier does not close a leak. Or you wanted a lawyer to say whether a usage clause is a contract. Hire the lawyer.

When the event is real and the console cannot name the meter, the missing object is specific. An admin action, in an account you administer, that shows one event name, one customer id, and one value, shows a different event that is not that one, and shows another account's list without it. A startup software development company that expects this will have put that action next to the rest of the billing screen, before a stranger's invoice is the way you discover the vendor owns the meter. One that needs a call in order for you to see which event is stored is telling you who holds the counter. If the first slice is a fixed capability, an AI integration sprint is the shape where the acceptance sentence can include the three proofs. If you do not yet know which system stores the event, a two-week AI readiness assessment maps the systems. The findings are yours. They are not a promise that a paper's 55% applies, and they are not 25. The screen that sells the product the meter is attached to is an AI product development company problem only after the event itself has an id.

The key a repository trusted, and the image a prompt returned, are different objects: which key did that repository trust? and which image did that prompt return?. Do not record either on this page. A deploy-key id is not an event name. A model name is not a customer id.

Before you tell them the meter recorded the call, do the three proofs and write the identifier. Name the event name, the customer, and the value, or write that the event was not stored. Show a different event that is not that one. Show another account's list that does not hold it. Do not paste a sample string onto a chart, and do not ask a model which of the event names it was. A paper can tell you what it counted on other companies' pages, including the two 52s that are not the same count. The binding is the meter you can defend.

Questions

Three records, in a console you administer. The event name, the customer id, and the value, or a written line that the event was not stored. A different event whose customer id or value is not this one. Another account's list that does not contain this event. If any of the three needs the person who wired billing, you do not have the proof.

No. A share of other companies' pricing pages is not the value on this event. A meter you can defend is the event name, the customer id, and the value, or a written line that the event was not stored. 55 on one sentence is not the string 25, and 284 days on a sample gap is not a value the sample stored.

When nothing is for sale, when you have no product, when you are still choosing a firm, when the only fact in the room is a paper's share, when a customer has already seen another customer's event, or when you wanted a lawyer.

Find this useful? Tell Google to show you more of it.

Let's put AI to work in your business.

A 30-minute call. You bring the workflow or the roadmap — we'll tell you what's feasible, what it costs, and what we'd build first.

Book a call→