Batch-save all price mappings for a product.
Validation/permission order: 1. `billing.manage` (realm boundary + business permission). 2. If any update row carries a credit-strategy field → `points.manage`. 3. Credit-strategy field validation. Then the repository performs a single-transaction upsert of all the product's price rows: any row transitioning enabled true→false while protected by an active subscription rolls back the WHOLE transaction (409 with `{ activeSubscriptions }`). Cross-realm/product `mapping_id` tampering surfaces as 400.
Validation/permission order:
billing.manage(realm boundary + business permission).- If any update row carries a credit-strategy field →
points.manage. - Credit-strategy field validation.
Then the repository performs a single-transaction upsert of all the
product's price rows: any row transitioning enabled true→false while protected by an active
subscription rolls back the WHOLE transaction (409 with
{ activeSubscriptions }). Cross-realm/product mapping_id tampering surfaces as 400.
Authorization
bearer_auth In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PUT "https://example.com/api/bill/entitlement-mappings/batch" \ -H "Content-Type: application/json" \ -d '{ "externalProductId": "string", "paymentProvider": "string", "updates": [ { "mappingId": "455df1f6-33e0-45b1-a8aa-27c64555cdd0" } ] }'{ "prices": [ { "billingPeriod": "string", "billingType": "string", "createdAt": "string", "enabled": true, "entitlementKey": "string", "externalPriceId": "string", "externalProductId": "string", "grantedRoleIds": [ "d7da45c3-cf14-4d32-83d9-df3496b53a96" ], "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "paymentProvider": "string", "pointRules": [ { "bucketId": "1980377d-7926-47e0-9e64-a9d0c746404d", "displayOrder": 0, "enabled": true, "grantMode": "string", "grantPeriodType": "string", "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "pointsAmount": 0, "quotaWindows": [ { "key": "string", "limit": 0, "windowSeconds": 0 } ], "triggerSources": [ "string" ], "validityDays": 0 } ], "providerProductInfo": null, "serviceDurationDays": 0, "syncedAt": "string", "updatedAt": "string" } ], "saved": 0}{ "code": "string", "details": null, "message": "string", "requestId": "string", "status": 0}{ "code": "string", "details": null, "message": "string", "requestId": "string", "status": 0}{ "code": "string", "details": null, "message": "string", "requestId": "string", "status": 0}{ "activeSubscriptions": 0, "code": "string"}{ "code": "string", "details": null, "message": "string", "requestId": "string", "status": 0}