Cursor의 청구 방식
Cursor는 월간 구독과 소진되는 포함 사용량 풀을 결합합니다. 사용자는 예측 가능한 가격을 지불하고, Cursor는 해당 풀에서 다양한 AI 모델의 변동 비용을 부담합니다. Pricing Tiers: Cursor는 Hobby부터 Ultra까지의 tier를 제공합니다. Cursor의 plan에는 각 model의 API price에 따라 과금되는 usage pool이 포함되며, 고정된 request 수가 아닙니다 (Cursor pricing docs). 표의 request allowance는 이 deconstruction에서 사용하는 예시 값입니다.
Model-Weighted Depletion: 각 request는 기반 model의 cost에 따라 credits를 소비합니다. 하나의 subscription으로 여러 model provider를 사용할 수 있으며, 비용이 높은 operation일수록 pool에서 더 많이 차감됩니다. Cursor는 request당 credit cost를 공개하지 않으므로 아래 weight는 예시입니다.
Credit Exhaustion and Overages: credits가 소진되면 사용자는 차단되는 대신 더 저렴한 model을 사용하는 “Slow” queue로 이동합니다. 사용자는 premium access를 유지하기 위해 on-demand usage를 활성화할 수도 있으며, cycle 종료 시 과금됩니다.
Enterprise: Enterprise plan에서는 조직 전체가 하나의 usage pool을 공유합니다. 사용량이 많은 사용자는 다른 모든 사용자와 동일한 pool에서 차감되므로, 팀원에게 사용하지 않은 capacity가 남아 있는 동안 한 사용자의 limit이 팀원을 차단하지 않습니다. Cursor는 pricing page에서 pooled usage를 Enterprise feature로 안내합니다.
고유한 특징
Cursor의 model은 다음 네 가지 방식으로 user experience와 infrastructure cost의 균형을 맞춥니다:- Provider Abstraction: 하나의 subscription으로 OpenAI 및 Anthropic과 같은 여러 LLM provider를 감쌉니다. Cursor가 provider pricing과 API key를 처리합니다.
- Weighted Depletion: 강력한 model일수록 더 많은 credits가 필요하므로 request의 price가 cost를 반영합니다.
- Graceful Degradation: hard cutoff 대신 “Slow” queue를 사용합니다. 사용자는 product를 계속 이용할 수 있으며, 느려진 experience가 upgrade를 유도합니다.
- Pooled Credits: organization-level pool을 사용하면 개별 limit을 관리하는 대신 team이 capacity를 공유할 수 있습니다.
Dodo Payments로 구축하기
Dodo Payments의 credit entitlements와 usage-based billing을 사용해 이 model을 구축할 수 있습니다. 아래 steps에서는 credit, plan, meter, slow-queue logic 및 checkout을 생성합니다.1
Create a Custom Unit Credit Entitlement
Products → Credits로 이동한 다음 Create Credit을 클릭합니다. 이 credit은 각 subscription에 포함되는 “Premium Requests”를 나타냅니다. 다음 settings를 사용합니다:
- Credit Type: Custom Unit
- Unit Name: “Premium Requests”
- Precision: 0 (request는 분할할 수 없음)
- Credit Expiry: 30 days (각 billing cycle마다 credits가 reset됨)
- Rollover: Disabled (사용하지 않은 requests는 이월되지 않음)
- Allow Overage: Enabled
- Price Per Unit: $0.04 (included pool을 모두 사용한 후 각 request에 부과되는 cost)
- Overage Behavior: Bill overage at billing (overage cost가 다음 invoice에 추가됨)
2
Create Subscription Products
tier마다 하나의 subscription product를 생성합니다. 각 product에 동일한 credit entitlement를 연결하고 Credits issued per billing cycle 값만 다르게 설정합니다. 모든 tier에서 하나의 credit system을 사용하면 upgrade와 downgrade를 간단하게 관리할 수 있습니다.
- Hobby: $0/month, 50 credits/cycle
- Pro: $20/month, 500 credits/cycle
- Pro+: $60/month, 5000 credits/cycle (대부분의 사용자에게 사실상 unlimited)
- Ultra: $200/month, 50000 credits/cycle (사실상 unlimited)
3
Create a Usage Meter Linked to Credits
event name이
ai.request이고 Sum aggregation을 사용하며 credit_cost를 Over Property로 사용하는 meter를 생성합니다. usage-based product에서 Bill usage in Credits를 toggle하고, credit entitlement를 선택한 다음 Meter units per credit를 1로 설정합니다.application은 model과 action type을 기준으로 각 request의 credit cost를 결정한 다음 event로 전송합니다:4
Handle Credit Exhaustion (Slow Queue)
credit.balance_low webhook을 subscribe합니다. customer의 balance가 product에 설정된 Low Balance Threshold 아래로 내려가면 application에서 해당 customer를 slow queue로 이동합니다. 이것이 graceful degradation logic입니다.5
Create Checkout
사용자가 plan을 구독할 때 checkout session을 생성합니다. Dodo Payments가 payment를 처리하고, tax를 계산하며, plan의 credits를 부여합니다.
LLM Ingestion Blueprint로 가속하기
위의 credit-weighted events가 billing을 구동합니다. provider별 raw token consumption도 기록하려면 credit system과 함께 LLM Ingestion Blueprint를 실행합니다.inputTokens, outputTokens, totalTokens 및 model를 전송합니다. 두 가지 계층의 data를 얻을 수 있습니다. billing을 위한 credit-weighted events와 cost 및 margin analysis를 위한 raw token counts입니다.
Pooled Team Credits (Enterprise)
Cursor의 Enterprise plan은 team 전체에서 usage를 pool로 관리합니다. Dodo Payments로 이를 구축하려면 사용자별 subscription 대신 organization을 위한 하나의 subscription을 생성합니다. 그러면 team의 usage가 하나의 billing entity에 누적되며, 이는 대규모 customer가 기대하는 방식입니다.Implementation Strategy
- Organization-Level Customer: 전체 organization을 위한 Dodo Payments customer 하나를 생성합니다. 이 customer가 shared credit pool을 보유하며, 모든 invoice와 credit grant는 해당 customer의
customer_id에 속합니다. - Seat-Based Billing: Seat-Based Billing에 설명된 대로 seat add-on을 사용해 사용자별 platform fee를 과금합니다. team이 member를 추가하면 add-on quantity를 변경합니다. Revenue는 사용자 수에 따라 증가하고 credit pool은 별도로 유지됩니다.
- Shared Usage Tracking: 모든 team member의 requests를 organization의
customer_id와 함께 전송하여 각 request가 동일한 pool에서 차감되도록 합니다. 개별 사용자를 기준으로 report하려면 event metadata에user_id를 추가합니다.
Traditional SaaS Billing과의 비교
Traditional SaaS billing은 예를 들어 $10/month에 100 units를 제공하는 flat-rate tier를 사용합니다. 101 units가 필요한 사용자는 종종 $50/month tier로 건너뛰어야 합니다. 이러한 “cliff”는 사용자를 좌절시키고 churn을 유발합니다. 또한 flat tier는 AI product에서 중요한 사용 유형별 cost 차이를 반영하지 못합니다. Dodo Payments를 기반으로 구축한 Cursor-style model은 이러한 문제를 해결합니다:- No “Cliff” Effects: limit에 도달해도 upgrade할 필요가 없습니다. overage를 지불하거나 느린 performance를 받아들일 수 있으므로 product에서 계속 작업할 수 있습니다.
- Cost Alignment: Revenue가 infrastructure cost를 따릅니다. 비용이 높은 model을 사용하는 사용자는 credits 또는 overage를 통해 더 많이 지불하므로 high-cost feature에서 margin을 보호할 수 있습니다.
- Better Retention: limit에 도달한 사용자도 차단되지 않고 계속 작업할 수 있습니다. 지속적인 사용은 loyalty를 높이고 customer lifetime value를 향상합니다.
Model Updates 및 Evolution 처리
AI provider는 model을 자주 update하고 교체하며, 새 model의 cost는 다를 수 있습니다. credit cost가 application에 있으므로 billing data를 migrate하지 않고도 새 model의 price를 설정할 수 있습니다. 더 비싼 model을 추가하려면getCreditCost에서 더 높은 cost를 부여합니다. credit entitlement, meter 또는 기존 subscription은 변경하지 않습니다. billing이 application logic과 분리되어 있으므로 billing을 수정하지 않고 model 변경을 배포할 수 있습니다.
User Notifications 및 Transparency
사용자가 cost를 관리하고 bill을 신뢰할 수 있도록 사용한 credits 수를 표시합니다. balance가 product의 Low Balance Threshold 아래로 내려가면credit.balance_low webhook이 실행됩니다. 50% 및 80% usage와 같은 추가 checkpoint를 설정하려면 credit.deducted events의 balance를 plan allocation과 비교합니다.
이러한 alert를 email, in-app message 또는 Slack으로 전송합니다. 시기 적절한 warning을 제공하면 사용자가 slow queue에 도달하기 전에 usage를 줄이거나 upgrade할 수 있어 support ticket이 감소합니다.
Security 및 Fraud Prevention
Credits에는 직접적인 monetary value가 있으므로 credits를 사용하는 system을 보호해야 합니다.- Idempotency: 모든 usage event에 고유한
event_id를 부여합니다. Dodo Payments는event_id를 사용해 duplicate를 감지하므로 동일한 ID로 network retry가 발생해도 사용자에게 두 번 과금되지 않습니다. - Rate Limiting: application에서 request rate를 제한하여 한 사용자가 credits 또는 provider budget을 너무 빠르게 소진하지 못하게 합니다.
- Monitoring: account sharing 또는 automated abuse와 같은 anomaly를 usage에서 감시합니다. meter dashboard의 Customers view에서 customer별 usage total을 확인할 수 있습니다.
Credit System 모범 사례
credit system을 설계할 때 다음 practices를 고려하세요:- Keep it Simple: 사용자는 request cost와 남은 credits 수를 이해할 수 있어야 합니다.
- Provide Value: 사용자가 credits가 가치 있다고 느낄 수 있도록 request의 price를 설정합니다. 작은 action에 비해 cost가 지나치게 높다고 느껴지면 nickel-and-diming으로 받아들여집니다.
- Be Transparent: 현재 credit balance와 usage history를 표시합니다. Customer는 Customer Portal에서도 두 정보를 확인할 수 있습니다.
- Automate Everything: Dodo Payments webhooks와 APIs를 사용해 billing task를 자동화하고 수동 작업을 제거합니다.
사용된 주요 Dodo Features
Credit-Based Billing
custom units를 사용해 depletion되는 credit pool과 overage를 관리합니다.
Subscriptions
integrated credits를 사용해 다양한 tier의 recurring billing을 설정합니다.
Usage-Based Billing
events를 추적하고 consumption을 기준으로 과금합니다.
Event Ingestion
high-volume usage data를 Dodo Payments로 전송합니다.
Webhooks
credit balance 변경에 반응하고 user tiering을 자동화합니다.
LLM Ingestion Blueprint
여러 LLM provider에서 token tracking을 자동으로 수행합니다.