feat(quotes): allow a per-transaction platform fee override on POST /quotes - #797
feat(quotes): allow a per-transaction platform fee override on POST /quotes#797jacklatourette wants to merge 3 commits into
Conversation
…quotes Optional platformFeeOverride on QuoteRequest: when present it replaces all platform fees that would otherwise apply — no standing fee config required and no cap relative to one. platformFixedFee and platformVariableFeeBps are both required within the object; negatives are rejected at schema level. USD source currency only today (including same-currency USD transfers); the fixed fee currency must equal the quote's source currency (AT-6193). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub. 2 Skipped Deployments
|
|
Preview deployment for your docs. Learn more about Mintlify Previews.
|
✱ Stainless preview builds for gridThis PR will update the cli go kotlin openapi php python ruby typescript Edit this comment to update them. They will appear in their respective SDK's changelogs. ✅ grid-typescript studio · code · diff
✅ grid-openapi studio · code · diff
✅ grid-ruby studio · code · diff
✅ grid-go studio · code · diff
✅ grid-kotlin studio · code · diff
✅ grid-python studio · code · diff
✅ grid-php studio · code · diff
✅ grid-cli studio · code · diff
This comment is auto-generated by GitHub Actions and is automatically kept up to date as you push. |
Greptile SummaryThe PR adds an optional per-transaction platform fee override to quote creation and regenerates both committed OpenAPI bundles.
Confidence Score: 4/5The agent-facing fee-control exposure should be resolved before merging because the shared request schema bypasses the intended platform-only contract boundary. POST /agents/me/quotes consumes the modified QuoteRequest, so agents with only CREATE_QUOTES are now advertised as able to select platform fees even though the permission model provides no corresponding fee-control authority. Files Needing Attention: openapi/components/schemas/quotes/QuoteRequest.yaml
|
| Filename | Overview |
|---|---|
| openapi/components/schemas/quotes/QuoteRequest.yaml | Adds the fee override to a request shared by platform and agent quote endpoints, unintentionally broadening the advertised capability. |
| openapi/components/schemas/quotes/PlatformFeeOverride.yaml | Defines the required fixed and variable fee override fields consistently with the stated optional request feature. |
| openapi.yaml | Correctly bundles the new schema but consequently exposes it on every endpoint using QuoteRequest, including agent quote creation. |
| mintlify/openapi.yaml | Mirrors the generated root bundle and publishes the same over-broad agent request contract. |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart LR
P[Platform caller<br/>BasicAuth] --> PQ[POST /quotes]
A[Agent caller<br/>CREATE_QUOTES] --> AQ[POST /agents/me/quotes]
PQ --> QR[Shared QuoteRequest]
AQ --> QR
QR --> F[platformFeeOverride]
F --> C[Platform fee calculation]
Prompt To Fix All With AI
### Issue 1
openapi/components/schemas/quotes/QuoteRequest.yaml:70-71
**Agent fee authority is unguarded**
When an agent with `CREATE_QUOTES` calls `POST /agents/me/quotes`, the shared `QuoteRequest` advertises `platformFeeOverride` even though no agent permission grants fee control, causing either unauthorized platform-fee changes when honored or a broken generated-client contract when rejected. **How this was verified:** The agent endpoint references this shared request schema, while the complete agent permission enum contains no fee-management permission.
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.Reviews (1): Last reviewed commit: "feat(quotes): allow a per-transaction pl..." | Re-trigger Greptile
Agent tokens carry no fee-control permission, so note that the field must be omitted on agent-authenticated requests like POST /agents/me/quotes. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Matches the server-side bound and the sibling TransactionFeeConfig variableFeeBps constraint. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
What
Adds an optional
platformFeeOverrideobject to theQuoteRequestschema (newcomponents/schemas/quotes/PlatformFeeOverride.yaml, bundles regenerated).When present, the override replaces all platform fees that would otherwise apply to the transaction:
platformFixedFee({amount, currency}) andplatformVariableFeeBpsare both required within the object; negatives rejected at schema level (minimum: 0)INVALID_INPUTotherwiseTRANSACTION_OVERRIDEis deliberately NOT added toconfig/FeeType.yaml: platforms must not create standing override configs viaPATCH /configNo response-shape changes. Optional-field addition — passes the oasdiff breaking-change check.
Why
Grid Fees Phase 2d (AT-6193, epic AT-6136): platforms need per-transaction control of their own fee (promos, VIP pricing, negotiated rates) without editing standing config.
Sparkcore implementation: lightsparkdev/webdev stack for AT-6128 / AT-6194 (vendored client regen included there).
🤖 Generated with Claude Code