@epilot/pricing-client 3.61.0 → 3.62.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/openapi.json CHANGED
@@ -595,11 +595,11 @@
595
595
  }
596
596
  },
597
597
  "400": {
598
- "description": "Invalid payload",
598
+ "description": "`CATALOG_REFERENCE_MISSING`, `CATALOG_REFERENCE_UNRESOLVABLE`: see\n`CatalogReferenceErrorCode`. References are not verified on this authenticated route.\nOther refusals carry no `code`.\n",
599
599
  "content": {
600
600
  "application/json": {
601
601
  "schema": {
602
- "$ref": "#/components/schemas/Error"
602
+ "$ref": "#/components/schemas/CatalogReferenceError"
603
603
  }
604
604
  }
605
605
  }
@@ -855,11 +855,11 @@
855
855
  }
856
856
  },
857
857
  "400": {
858
- "description": "Invalid payload",
858
+ "description": "`CATALOG_REFERENCE_MISSING`, `CATALOG_REFERENCE_UNRESOLVABLE`: see\n`CatalogReferenceErrorCode`. References are not verified on this authenticated route.\nOther refusals carry no `code`.\n",
859
859
  "content": {
860
860
  "application/json": {
861
861
  "schema": {
862
- "$ref": "#/components/schemas/Error"
862
+ "$ref": "#/components/schemas/CatalogReferenceError"
863
863
  }
864
864
  }
865
865
  }
@@ -984,11 +984,11 @@
984
984
  }
985
985
  },
986
986
  "400": {
987
- "description": "Invalid payload",
987
+ "description": "`CATALOG_REFERENCE_MISSING`, `CATALOG_REFERENCE_UNRESOLVABLE`: see\n`CatalogReferenceErrorCode`. References are not verified on this authenticated route.\nOther refusals carry no `code`.\n",
988
988
  "content": {
989
989
  "application/json": {
990
990
  "schema": {
991
- "$ref": "#/components/schemas/Error"
991
+ "$ref": "#/components/schemas/CatalogReferenceError"
992
992
  }
993
993
  }
994
994
  }
@@ -1053,11 +1053,11 @@
1053
1053
  }
1054
1054
  },
1055
1055
  "400": {
1056
- "description": "Invalid payload",
1056
+ "description": "`CATALOG_REFERENCE_MISSING`, `CATALOG_REFERENCE_SIGNATURE_INVALID`,\n`CATALOG_REFERENCE_UNRESOLVABLE`: see `CatalogReferenceErrorCode`. Every reference must\nverify on this public route. Other refusals carry no `code`.\n",
1057
1057
  "content": {
1058
1058
  "application/json": {
1059
1059
  "schema": {
1060
- "$ref": "#/components/schemas/Error"
1060
+ "$ref": "#/components/schemas/CatalogReferenceError"
1061
1061
  }
1062
1062
  }
1063
1063
  }
@@ -1174,6 +1174,211 @@
1174
1174
  }
1175
1175
  }
1176
1176
  },
1177
+ "/v2/public/catalog": {
1178
+ "post": {
1179
+ "description": "Returns the products and prices a journey block shows as catalog pairs, each member resolved\nfor its own entity type's context at `as_of`. A pair carries the product, one of its prices, the coupons that apply,\nand a signed `catalog_reference`. Line items carry that reference to checkout unchanged, and\ncheckout prices from it.\n\nConditional entities resolve as on `POST /v1/conditional-pricing:resolve`. An organization\nthat has not opted in gets base entities, not an error. A member matching several variants\nyields one pair per variant, and an entry without `price_id` yields one pair per price of\nthe product. Members that match nothing or are inactive are left out. Ids that find no\nentity, or an entity of another type than the entry asked for, are reported in `warnings`.\n",
1180
+ "operationId": "$resolveCatalog",
1181
+ "summary": "$resolveCatalog",
1182
+ "security": [
1183
+ {
1184
+ "EpilotPublicAuth": []
1185
+ }
1186
+ ],
1187
+ "tags": [
1188
+ "Catalog API"
1189
+ ],
1190
+ "requestBody": {
1191
+ "required": true,
1192
+ "content": {
1193
+ "application/json": {
1194
+ "schema": {
1195
+ "$ref": "#/components/schemas/ResolveCatalogRequest"
1196
+ },
1197
+ "examples": {
1198
+ "A block of three tiles at a delivery address": {
1199
+ "summary": "Two priced entries and one that lets the product name its prices",
1200
+ "value": {
1201
+ "entries": [
1202
+ {
1203
+ "product_id": "product-pv-2027",
1204
+ "price_id": "price-sp26d1yo"
1205
+ },
1206
+ {
1207
+ "product_id": "product-heatpump-2027",
1208
+ "price_id": "price-retired"
1209
+ },
1210
+ {
1211
+ "product_id": "product-wallbox-2027"
1212
+ }
1213
+ ],
1214
+ "context": {
1215
+ "product": {
1216
+ "postal_code": "46045",
1217
+ "channel": "direct"
1218
+ },
1219
+ "price": {
1220
+ "postal_code": "46045"
1221
+ }
1222
+ },
1223
+ "as_of": "2026-12-20T10:15:00Z"
1224
+ }
1225
+ }
1226
+ }
1227
+ }
1228
+ }
1229
+ },
1230
+ "responses": {
1231
+ "200": {
1232
+ "description": "The pairs to show, unordered, and the entries whose ids found nothing or the wrong\ntype. `warnings` is always present and empty in the ordinary case.\n",
1233
+ "content": {
1234
+ "application/json": {
1235
+ "schema": {
1236
+ "$ref": "#/components/schemas/ResolveCatalogResult"
1237
+ },
1238
+ "examples": {
1239
+ "A resolved price beside a classic product, and an entry that found nothing": {
1240
+ "summary": "The product served as stored, the price resolved to its variant, the reference signed, and a retired price reported rather than refused",
1241
+ "value": {
1242
+ "pairs": [
1243
+ {
1244
+ "product": {
1245
+ "_id": "product-pv-2027",
1246
+ "_schema": "product",
1247
+ "_title": "Solar Panel with Battery Storage",
1248
+ "name": "Solar Panel with Battery Storage",
1249
+ "active": true,
1250
+ "is_conditional": false,
1251
+ "price_options": [
1252
+ {
1253
+ "_id": "price-sp26d1yo",
1254
+ "_schema": "price",
1255
+ "_title": "Solar Panel Module",
1256
+ "active": true,
1257
+ "is_conditional": true,
1258
+ "is_composite_price": false,
1259
+ "type": "one_time",
1260
+ "pricing_model": "per_unit",
1261
+ "$relation": {
1262
+ "entity_id": "price-sp26d1yo",
1263
+ "attribute": "price_options"
1264
+ }
1265
+ }
1266
+ ]
1267
+ },
1268
+ "price": {
1269
+ "_id": "price-sp26d1yo",
1270
+ "_schema": "price",
1271
+ "_title": "Solar Panel Module",
1272
+ "_variant_id": "var-46045",
1273
+ "_version_valid_from": "2027-01-01T00:00:00.000Z",
1274
+ "_conditions": {
1275
+ "postal_code": "46045",
1276
+ "default": false
1277
+ },
1278
+ "_inert_overrides": [],
1279
+ "active": true,
1280
+ "is_conditional": true,
1281
+ "is_composite_price": false,
1282
+ "type": "one_time",
1283
+ "pricing_model": "per_unit",
1284
+ "unit_amount": 2499,
1285
+ "unit_amount_decimal": "24.99",
1286
+ "unit_amount_currency": "EUR"
1287
+ },
1288
+ "coupons": [
1289
+ {
1290
+ "_id": "0f8c4852-23fa-4a64-a2f3-88702335f094",
1291
+ "_schema": "coupon",
1292
+ "_org": "739224",
1293
+ "_title": "Winter discount",
1294
+ "_created_at": "2026-10-01T09:00:00.000Z",
1295
+ "_updated_at": "2026-10-01T09:00:00.000Z",
1296
+ "name": "Winter discount",
1297
+ "type": "percentage",
1298
+ "category": "discount",
1299
+ "percentage_value": "10",
1300
+ "active": true,
1301
+ "prices": {
1302
+ "$relation": [
1303
+ {
1304
+ "entity_id": "price-sp26d1yo",
1305
+ "_schema": "price"
1306
+ }
1307
+ ]
1308
+ }
1309
+ }
1310
+ ],
1311
+ "catalog_reference": {
1312
+ "product": {
1313
+ "id": "product-pv-2027"
1314
+ },
1315
+ "price": {
1316
+ "id": "price-sp26d1yo",
1317
+ "variant": "var-46045"
1318
+ },
1319
+ "coupons": [
1320
+ {
1321
+ "id": "0f8c4852-23fa-4a64-a2f3-88702335f094"
1322
+ }
1323
+ ],
1324
+ "as_of": "2026-12-20T10:15:00.000Z",
1325
+ "_meta": {
1326
+ "timestamp": 1797000000000,
1327
+ "signature": "c3ab8ff137"
1328
+ }
1329
+ }
1330
+ }
1331
+ ],
1332
+ "warnings": [
1333
+ {
1334
+ "code": "CATALOG_ENTRY_NOT_FOUND",
1335
+ "message": "The entry names a price that does not exist",
1336
+ "details": {
1337
+ "product_id": "product-heatpump-2027",
1338
+ "price_id": "price-retired",
1339
+ "missing": "price"
1340
+ }
1341
+ },
1342
+ {
1343
+ "code": "CATALOG_ENTRY_TYPE_MISMATCH",
1344
+ "message": "The entry's price id names a product",
1345
+ "details": {
1346
+ "product_id": "product-heatpump-2027",
1347
+ "price_id": "product-tariff-2027",
1348
+ "mismatched": "price",
1349
+ "actual_schema": "product"
1350
+ }
1351
+ }
1352
+ ]
1353
+ }
1354
+ }
1355
+ }
1356
+ }
1357
+ }
1358
+ },
1359
+ "400": {
1360
+ "description": "`CONDITION_UNDEFINED`, `OPERATOR_UNSUPPORTED`, `CONTEXT_FORMAT_INVALID`,\n`DEFAULT_MARKER_RESERVED`: an entity type's context is refused against that type's schema\nas the authenticated resolve refuses it.\n\n`TOO_MANY_MATCHES`: a member matches more variants than the authenticated resolve's cap\nof 100. The whole request is refused rather than serving a truncated block.\n\n`VALID_FROM_INVALID`: `as_of` is not an instant this operation can read.\n\nA body with no entries, more than 100, an entry without `product_id`, or a context keyed\nby anything but `product`, `price` or `coupon` fails validation and carries no `code`.\n",
1361
+ "content": {
1362
+ "application/json": {
1363
+ "schema": {
1364
+ "$ref": "#/components/schemas/ConditionalPricingError"
1365
+ }
1366
+ }
1367
+ }
1368
+ },
1369
+ "409": {
1370
+ "description": "`CONDITION_UNREADABLE`: a schema this request touches declares a condition in a way this\ndeploy cannot read. The whole request is refused rather than serving prices without\ntheir products.\n",
1371
+ "content": {
1372
+ "application/json": {
1373
+ "schema": {
1374
+ "$ref": "#/components/schemas/ConditionalPricingError"
1375
+ }
1376
+ }
1377
+ }
1378
+ }
1379
+ }
1380
+ }
1381
+ },
1177
1382
  "/v1/public/validate-promo-codes": {
1178
1383
  "post": {
1179
1384
  "description": "Validate a list of promo codes against a list of coupons",
@@ -5929,7 +6134,9 @@
5929
6134
  },
5930
6135
  "ResolveContext": {
5931
6136
  "type": "object",
5932
- "additionalProperties": true,
6137
+ "additionalProperties": {
6138
+ "$ref": "#/components/schemas/ContextConditionValue"
6139
+ },
5933
6140
  "description": "The situation to resolve for: a flat map keyed by condition name. A condition left out\nmatches only variants that leave it unpinned; an empty map therefore returns the `default`\nvariant.\n\nEach value is an exact value, typed by its condition, or a single-operator predicate:\n\n- `{ \"lt\": v }`, `{ \"lte\": v }`, `{ \"gt\": v }`, `{ \"gte\": v }` — order, against a `number`\n or `date` condition\n- `{ \"in\": [...] }` — membership, against a `string`, `select` or `number` condition\n- `{ \"between\": \"2026-03-01\" }` — `daterange` containment, which a plain date also means\n- `{ \"exists\": true }` — pinned to any value; `{ \"exists\": false }` — left unpinned\n\nAn `in` list carries at most 50,000 values. A `string` or `select` matches exactly and\ncase-sensitively. A `location` of format\n`postal_code` is the postal code itself; one of format `postal_code_city` is an object carrying\n`postal_code` and `city`, named as an entity address names them, whose city is compared\ncase- and whitespace-insensitively.\n\n`default` and names beginning with `_` are reserved and cannot be supplied.\n",
5934
6141
  "example": {
5935
6142
  "postal_code": "46045",
@@ -6053,7 +6260,9 @@
6053
6260
  },
6054
6261
  "VariantConditions": {
6055
6262
  "type": "object",
6056
- "additionalProperties": true,
6263
+ "additionalProperties": {
6264
+ "$ref": "#/components/schemas/PinnedConditionValue"
6265
+ },
6057
6266
  "required": [
6058
6267
  "default"
6059
6268
  ],
@@ -6070,120 +6279,312 @@
6070
6279
  },
6071
6280
  "PinnedConditions": {
6072
6281
  "type": "object",
6073
- "additionalProperties": true,
6282
+ "additionalProperties": {
6283
+ "$ref": "#/components/schemas/PinnedConditionValue"
6284
+ },
6074
6285
  "description": "The situation this variant applies to: a flat map keyed by condition name. A condition left\nout is a wildcard, which is what makes adding a condition to a schema non-breaking for\nexisting variants.\n\nExact values only; predicates belong to reads. Values are stored canonicalized for their\ntype: a `date` becomes millisecond-precision UTC, a `daterange` an object carrying `from`\nand `until` where an empty string is an open end, a `location` of format `postal_code` the\npostal code itself and one of format `postal_code_city` an object carrying `postal_code` and\n`city`.\n\n`default` and names beginning with `_` are reserved; use the request's `default` flag.\n",
6075
6286
  "example": {
6076
6287
  "postal_code": "46045"
6077
6288
  }
6078
6289
  },
6079
- "VariantValues": {
6290
+ "PinnedConditionValue": {
6291
+ "description": "One condition's exact value. Which of these shapes a condition takes is set by its type in the\nentity's schema, and a value of another shape is refused with `PIN_FORMAT_INVALID`.\n",
6292
+ "anyOf": [
6293
+ {
6294
+ "type": "string"
6295
+ },
6296
+ {
6297
+ "type": "number"
6298
+ },
6299
+ {
6300
+ "type": "boolean"
6301
+ },
6302
+ {
6303
+ "$ref": "#/components/schemas/ConditionDateRange"
6304
+ },
6305
+ {
6306
+ "$ref": "#/components/schemas/PostalCodeCity"
6307
+ }
6308
+ ]
6309
+ },
6310
+ "ConditionDateRange": {
6080
6311
  "type": "object",
6081
- "additionalProperties": true,
6082
- "description": "The values this version overrides on the base entity, keyed by entity field name.\n\nA field is overridable if its attribute declares `overridable_attribute` — which readonly,\nhidden, computed and metadata fields, and types no variant may override, cannot be given —\nor if a capability declaring `overridable_attribute` names it in `managed_fields`, which\nexcludes only readonly and metadata fields.\n\nFields that are not overridable are reported in the write's `warnings` rather than rejected,\nand keep whatever value they already had. An append seeds them from the version in effect at\nits own `valid_from`.\n\nA composite price's `price_components` is an ordinary overridable relation attribute,\nreferencing component entities rather than variants or versions.\n",
6083
- "example": {
6084
- "unit_amount": 2499,
6085
- "unit_amount_decimal": "24.99"
6312
+ "additionalProperties": false,
6313
+ "description": "The value of a `daterange` condition. A bound that is absent, `null` or an empty string is an\nopen end; stored, an open end is an empty string.\n",
6314
+ "properties": {
6315
+ "from": {
6316
+ "type": "string",
6317
+ "nullable": true,
6318
+ "example": "2026-01-01"
6319
+ },
6320
+ "until": {
6321
+ "type": "string",
6322
+ "nullable": true,
6323
+ "example": "2027-01-01"
6324
+ }
6086
6325
  }
6087
6326
  },
6088
- "CreatedVariant": {
6327
+ "PostalCodeCity": {
6089
6328
  "type": "object",
6329
+ "additionalProperties": false,
6330
+ "description": "The value of a `location` condition of format `postal_code_city`, its parts named as an entity\naddress names them.\n",
6090
6331
  "required": [
6091
- "variant_id",
6092
- "entity_id",
6093
- "schema",
6094
- "conditions",
6095
- "valid_from",
6096
- "values",
6097
- "_created_at",
6098
- "_updated_at",
6099
- "_revision",
6100
- "warnings"
6332
+ "postal_code",
6333
+ "city"
6101
6334
  ],
6102
6335
  "properties": {
6103
- "variant_id": {
6104
- "type": "string",
6105
- "description": "Server-generated. The durable key orders and contracts pin.",
6106
- "example": "var-46045"
6107
- },
6108
- "entity_id": {
6336
+ "postal_code": {
6109
6337
  "type": "string",
6110
- "example": "price-sp26d1yo"
6111
- },
6112
- "schema": {
6113
- "$ref": "#/components/schemas/ConditionalEntitySlug"
6114
- },
6115
- "conditions": {
6116
- "allOf": [
6117
- {
6118
- "$ref": "#/components/schemas/VariantConditions"
6119
- }
6120
- ],
6121
- "description": "The situation this variant applies to, plus the boolean `default` discriminator."
6338
+ "minLength": 1,
6339
+ "example": "50667"
6122
6340
  },
6123
- "valid_from": {
6341
+ "city": {
6124
6342
  "type": "string",
6125
- "description": "When the first version takes effect, canonicalized to millisecond-precision UTC.",
6126
- "example": "2027-01-01T00:00:00.000Z"
6127
- },
6128
- "values": {
6129
- "$ref": "#/components/schemas/VariantValues"
6343
+ "minLength": 1,
6344
+ "example": "Köln"
6345
+ }
6346
+ }
6347
+ },
6348
+ "ContextConditionValue": {
6349
+ "description": "One condition's value in a resolve context or listing filter: an exact value, or a predicate.\nWhich of these a condition takes is set by its type in the entity's schema, and a value of\nanother shape is refused with `CONTEXT_FORMAT_INVALID`, or `OPERATOR_UNSUPPORTED` for a\npredicate its type does not support.\n",
6350
+ "anyOf": [
6351
+ {
6352
+ "type": "string"
6130
6353
  },
6131
- "_created_at": {
6132
- "type": "string",
6133
- "description": "When the first version was created.",
6134
- "readOnly": true
6354
+ {
6355
+ "type": "number"
6135
6356
  },
6136
- "_updated_at": {
6137
- "type": "string",
6138
- "description": "When the first version was last written.",
6139
- "readOnly": true
6357
+ {
6358
+ "type": "boolean"
6140
6359
  },
6141
- "_revision": {
6142
- "type": "number",
6143
- "description": "The revision a later write to this version must carry.",
6144
- "readOnly": true
6360
+ {
6361
+ "$ref": "#/components/schemas/PostalCodeCity"
6145
6362
  },
6146
- "warnings": {
6147
- "type": "array",
6148
- "description": "Things worth knowing that did not stop the write. Always present, and empty in the ordinary case.",
6149
- "items": {
6150
- "$ref": "#/components/schemas/WriteWarning"
6151
- }
6363
+ {
6364
+ "$ref": "#/components/schemas/ConditionPredicate"
6152
6365
  }
6153
- }
6366
+ ]
6154
6367
  },
6155
- "WriteWarning": {
6156
- "description": "Something worth knowing that did not stop a write. One vocabulary for every write; `details`\nis typed per `code`, and a write raises each code at most once.\n",
6368
+ "ConditionPredicate": {
6369
+ "description": "A single-operator predicate.",
6157
6370
  "oneOf": [
6158
6371
  {
6159
6372
  "type": "object",
6160
6373
  "additionalProperties": false,
6161
- "description": "This entity is nearing the number of variants it may hold.",
6162
6374
  "required": [
6163
- "code",
6164
- "message",
6165
- "details"
6375
+ "lt"
6166
6376
  ],
6167
6377
  "properties": {
6168
- "code": {
6169
- "type": "string",
6170
- "enum": [
6171
- "VARIANT_COUNT_APPROACHING_CAP"
6172
- ]
6173
- },
6174
- "message": {
6175
- "type": "string"
6176
- },
6177
- "details": {
6178
- "type": "object",
6179
- "additionalProperties": false,
6180
- "required": [
6181
- "variant_count",
6182
- "cap"
6183
- ],
6184
- "properties": {
6185
- "variant_count": {
6186
- "type": "number",
6378
+ "lt": {
6379
+ "$ref": "#/components/schemas/OrderedConditionOperand"
6380
+ }
6381
+ }
6382
+ },
6383
+ {
6384
+ "type": "object",
6385
+ "additionalProperties": false,
6386
+ "required": [
6387
+ "lte"
6388
+ ],
6389
+ "properties": {
6390
+ "lte": {
6391
+ "$ref": "#/components/schemas/OrderedConditionOperand"
6392
+ }
6393
+ }
6394
+ },
6395
+ {
6396
+ "type": "object",
6397
+ "additionalProperties": false,
6398
+ "required": [
6399
+ "gt"
6400
+ ],
6401
+ "properties": {
6402
+ "gt": {
6403
+ "$ref": "#/components/schemas/OrderedConditionOperand"
6404
+ }
6405
+ }
6406
+ },
6407
+ {
6408
+ "type": "object",
6409
+ "additionalProperties": false,
6410
+ "required": [
6411
+ "gte"
6412
+ ],
6413
+ "properties": {
6414
+ "gte": {
6415
+ "$ref": "#/components/schemas/OrderedConditionOperand"
6416
+ }
6417
+ }
6418
+ },
6419
+ {
6420
+ "type": "object",
6421
+ "additionalProperties": false,
6422
+ "required": [
6423
+ "in"
6424
+ ],
6425
+ "properties": {
6426
+ "in": {
6427
+ "type": "array",
6428
+ "minItems": 1,
6429
+ "items": {
6430
+ "anyOf": [
6431
+ {
6432
+ "type": "string"
6433
+ },
6434
+ {
6435
+ "type": "number"
6436
+ }
6437
+ ]
6438
+ }
6439
+ }
6440
+ }
6441
+ },
6442
+ {
6443
+ "type": "object",
6444
+ "additionalProperties": false,
6445
+ "required": [
6446
+ "between"
6447
+ ],
6448
+ "properties": {
6449
+ "between": {
6450
+ "type": "string",
6451
+ "description": "The instant a `daterange` condition's range must contain."
6452
+ }
6453
+ }
6454
+ },
6455
+ {
6456
+ "type": "object",
6457
+ "additionalProperties": false,
6458
+ "required": [
6459
+ "exists"
6460
+ ],
6461
+ "properties": {
6462
+ "exists": {
6463
+ "type": "boolean"
6464
+ }
6465
+ }
6466
+ }
6467
+ ]
6468
+ },
6469
+ "OrderedConditionOperand": {
6470
+ "description": "A number, or a date as an RFC 3339 date or date-time.",
6471
+ "anyOf": [
6472
+ {
6473
+ "type": "number"
6474
+ },
6475
+ {
6476
+ "type": "string"
6477
+ }
6478
+ ]
6479
+ },
6480
+ "VariantValues": {
6481
+ "type": "object",
6482
+ "additionalProperties": true,
6483
+ "description": "The values this version overrides on the base entity, keyed by entity field name.\n\nA field is overridable if its attribute declares `overridable_attribute` — which readonly,\nhidden, computed and metadata fields, and types no variant may override, cannot be given —\nor if a capability declaring `overridable_attribute` names it in `managed_fields`, which\nexcludes only readonly and metadata fields.\n\nFields that are not overridable are reported in the write's `warnings` rather than rejected,\nand keep whatever value they already had. An append seeds them from the version in effect at\nits own `valid_from`.\n\nA composite price's `price_components` is an ordinary overridable relation attribute,\nreferencing component entities rather than variants or versions.\n",
6484
+ "example": {
6485
+ "unit_amount": 2499,
6486
+ "unit_amount_decimal": "24.99"
6487
+ }
6488
+ },
6489
+ "CreatedVariant": {
6490
+ "type": "object",
6491
+ "required": [
6492
+ "variant_id",
6493
+ "entity_id",
6494
+ "schema",
6495
+ "conditions",
6496
+ "valid_from",
6497
+ "values",
6498
+ "_created_at",
6499
+ "_updated_at",
6500
+ "_revision",
6501
+ "warnings"
6502
+ ],
6503
+ "properties": {
6504
+ "variant_id": {
6505
+ "type": "string",
6506
+ "description": "Server-generated. The durable key orders and contracts pin.",
6507
+ "example": "var-46045"
6508
+ },
6509
+ "entity_id": {
6510
+ "type": "string",
6511
+ "example": "price-sp26d1yo"
6512
+ },
6513
+ "schema": {
6514
+ "$ref": "#/components/schemas/ConditionalEntitySlug"
6515
+ },
6516
+ "conditions": {
6517
+ "allOf": [
6518
+ {
6519
+ "$ref": "#/components/schemas/VariantConditions"
6520
+ }
6521
+ ],
6522
+ "description": "The situation this variant applies to, plus the boolean `default` discriminator."
6523
+ },
6524
+ "valid_from": {
6525
+ "type": "string",
6526
+ "description": "When the first version takes effect, canonicalized to millisecond-precision UTC.",
6527
+ "example": "2027-01-01T00:00:00.000Z"
6528
+ },
6529
+ "values": {
6530
+ "$ref": "#/components/schemas/VariantValues"
6531
+ },
6532
+ "_created_at": {
6533
+ "type": "string",
6534
+ "description": "When the first version was created.",
6535
+ "readOnly": true
6536
+ },
6537
+ "_updated_at": {
6538
+ "type": "string",
6539
+ "description": "When the first version was last written.",
6540
+ "readOnly": true
6541
+ },
6542
+ "_revision": {
6543
+ "type": "number",
6544
+ "description": "The revision a later write to this version must carry.",
6545
+ "readOnly": true
6546
+ },
6547
+ "warnings": {
6548
+ "type": "array",
6549
+ "description": "Things worth knowing that did not stop the write. Always present, and empty in the ordinary case.",
6550
+ "items": {
6551
+ "$ref": "#/components/schemas/WriteWarning"
6552
+ }
6553
+ }
6554
+ }
6555
+ },
6556
+ "WriteWarning": {
6557
+ "description": "Something worth knowing that did not stop a write. One vocabulary for every write; `details`\nis typed per `code`, and a write raises each code at most once.\n",
6558
+ "oneOf": [
6559
+ {
6560
+ "type": "object",
6561
+ "additionalProperties": false,
6562
+ "description": "This entity is nearing the number of variants it may hold.",
6563
+ "required": [
6564
+ "code",
6565
+ "message",
6566
+ "details"
6567
+ ],
6568
+ "properties": {
6569
+ "code": {
6570
+ "type": "string",
6571
+ "enum": [
6572
+ "VARIANT_COUNT_APPROACHING_CAP"
6573
+ ]
6574
+ },
6575
+ "message": {
6576
+ "type": "string"
6577
+ },
6578
+ "details": {
6579
+ "type": "object",
6580
+ "additionalProperties": false,
6581
+ "required": [
6582
+ "variant_count",
6583
+ "cap"
6584
+ ],
6585
+ "properties": {
6586
+ "variant_count": {
6587
+ "type": "number",
6187
6588
  "description": "Variants this entity holds, including the one just written."
6188
6589
  },
6189
6590
  "cap": {
@@ -6702,7 +7103,9 @@
6702
7103
  },
6703
7104
  "VariantConditionFilter": {
6704
7105
  "type": "object",
6705
- "additionalProperties": true,
7106
+ "additionalProperties": {
7107
+ "$ref": "#/components/schemas/ContextConditionValue"
7108
+ },
6706
7109
  "description": "Which pins a variant must carry to be listed: a flat map keyed by condition name, taking the\nsame exact values and predicates a resolve context does. A condition left out is not\nfiltered on. An `in` list carries at most 50,000 values.\n\nA variant matches only where it pins the condition — unlike `:resolve`, where an unpinned\ncondition matches any value. `{ \"exists\": false }` selects the variants that leave it\nunpinned.\n\n`default` is accepted as an exact boolean and takes no predicate: `true` selects the\nentity's fallback variant, `false` every variant that is not it. Names beginning with `_`\nare reserved.\n",
6707
7110
  "example": {
6708
7111
  "postal_code": "46045",
@@ -7300,6 +7703,26 @@
7300
7703
  }
7301
7704
  }
7302
7705
  },
7706
+ "RefusedLineItem": {
7707
+ "type": "object",
7708
+ "additionalProperties": false,
7709
+ "description": "The line item a checkout refusal is about, named as the item names itself.",
7710
+ "required": [
7711
+ "price_id"
7712
+ ],
7713
+ "properties": {
7714
+ "price_id": {
7715
+ "type": "string",
7716
+ "description": "The item's price id.",
7717
+ "example": "price-sp26d1yo"
7718
+ },
7719
+ "product_id": {
7720
+ "type": "string",
7721
+ "description": "The item's product id, when the item names one.",
7722
+ "example": "product-pv-2027"
7723
+ }
7724
+ }
7725
+ },
7303
7726
  "ReportedError": {
7304
7727
  "description": "The `error` field of an error response: the message, or — where the request failed\nvalidation before any handler ran — the validation errors themselves.\n",
7305
7728
  "oneOf": [
@@ -8635,84 +9058,150 @@
8635
9058
  }
8636
9059
  ]
8637
9060
  },
8638
- "Product": {
8639
- "type": "object",
8640
- "description": "The product entity",
8641
- "readOnly": true,
8642
- "additionalProperties": true,
8643
- "example": {
8644
- "type": "product",
8645
- "_schema": "product",
8646
- "_title": "Solar Panel with Battery Storage",
8647
- "name": "Solar Panel with Battery Storage",
8648
- "code": "SOLAR-BATT",
8649
- "active": true,
8650
- "description": "Solar Panel with battery solution, optimized for max efficiency. ",
8651
- "feature": [
8652
- {
8653
- "_tags": [],
8654
- "feature": "Eco-Panels"
8655
- },
8656
- {
8657
- "_tags": [],
8658
- "feature": "Remote Management Platform"
8659
- },
8660
- {
8661
- "_tags": [],
8662
- "feature": "Battery Remote Control"
8663
- },
8664
- {
8665
- "_tags": [],
8666
- "feature": "Mobile App"
8667
- }
8668
- ],
8669
- "cross_sellable_products": {
8670
- "$relation": [
8671
- {
8672
- "entity_id": "068d0713-a650-4668-9ed2-eca7be31e337",
8673
- "_schema": "product",
8674
- "_tags": []
8675
- },
8676
- {
8677
- "entity_id": "c8402ee7-fba9-4f3d-bffd-6803ca655782",
8678
- "_tags": []
8679
- }
8680
- ]
9061
+ "CatalogReferenceErrorCode": {
9062
+ "type": "string",
9063
+ "description": "Why an order operation refused a catalog reference. Other refusals carry no `code`.\n\n- `CATALOG_REFERENCE_MISSING` (400): a line item whose product or price is conditional carries no `catalog_reference`, or one with no variant for that member\n- `CATALOG_REFERENCE_SIGNATURE_INVALID` (400): a `catalog_reference` on a public checkout is unsigned, or its signature does not verify\n- `CATALOG_REFERENCE_UNRESOLVABLE` (400): a member of a `catalog_reference` cannot be resolved at its `as_of` — its entity or variant no longer exists, the variant has no version in effect, or the entity's schema no longer lets the variant be read\n",
9064
+ "enum": [
9065
+ "CATALOG_REFERENCE_MISSING",
9066
+ "CATALOG_REFERENCE_SIGNATURE_INVALID",
9067
+ "CATALOG_REFERENCE_UNRESOLVABLE"
9068
+ ]
9069
+ },
9070
+ "CatalogReferenceError": {
9071
+ "description": "An error from an order operation that prices line items. A catalog-reference refusal carries\n`code` and `details`, typed per code. Every other refusal carries neither.\n",
9072
+ "allOf": [
9073
+ {
9074
+ "$ref": "#/components/schemas/Error"
8681
9075
  },
8682
- "product_images": {
8683
- "$relation": [
8684
- {
8685
- "entity_id": "37bdeaaa-65fe-403e-9894-65b01cd277f1"
8686
- },
8687
- {
8688
- "entity_id": "56dde657-795c-41bb-bf53-98fd586b7e6e"
9076
+ {
9077
+ "type": "object",
9078
+ "properties": {
9079
+ "error": {
9080
+ "allOf": [
9081
+ {
9082
+ "$ref": "#/components/schemas/ReportedError"
9083
+ }
9084
+ ],
9085
+ "description": "What went wrong. The same string as `message`, except on a request-validation\nfailure, which puts the list of validation errors here instead.\n"
8689
9086
  }
8690
- ]
9087
+ }
8691
9088
  },
8692
- "product_downloads": {
8693
- "$relation": [
9089
+ {
9090
+ "oneOf": [
8694
9091
  {
8695
- "entity_id": "64211361-8759-414b-81c0-afbf24f83aa9"
8696
- }
8697
- ]
8698
- },
8699
- "_id": "a7f4771a-6368-4d77-bb01-71f1e4902de5",
8700
- "_org": "728",
8701
- "_created_at": "2022-06-03T15: 52: 27.512Z",
8702
- "_updated_at": "2022-06-03T16: 05: 15.029Z",
8703
- "price_options": {
8704
- "$relation": [
9092
+ "type": "object",
9093
+ "description": "A conditional line item carries no `catalog_reference`, or one with no variant for\nthat member. Send the pair's reference unchanged.\n",
9094
+ "required": [
9095
+ "code",
9096
+ "details"
9097
+ ],
9098
+ "properties": {
9099
+ "code": {
9100
+ "type": "string",
9101
+ "enum": [
9102
+ "CATALOG_REFERENCE_MISSING"
9103
+ ]
9104
+ },
9105
+ "details": {
9106
+ "$ref": "#/components/schemas/RefusedLineItem"
9107
+ }
9108
+ }
9109
+ },
8705
9110
  {
8706
- "entity_id": "9c36c23b-1574-4193-beff-b1b5e1124bc7",
8707
- "_tags": []
9111
+ "type": "object",
9112
+ "description": "The `catalog_reference` of a line item on a public checkout carries no `_meta`, or a\nsignature that does not verify against the reference. The reference was altered or\ndid not come from the catalog; fetch the pair again and send it unchanged.\n",
9113
+ "required": [
9114
+ "code",
9115
+ "details"
9116
+ ],
9117
+ "properties": {
9118
+ "code": {
9119
+ "type": "string",
9120
+ "enum": [
9121
+ "CATALOG_REFERENCE_SIGNATURE_INVALID"
9122
+ ]
9123
+ },
9124
+ "details": {
9125
+ "$ref": "#/components/schemas/RefusedLineItem"
9126
+ }
9127
+ }
8708
9128
  },
8709
9129
  {
8710
- "entity_id": "146aa2cc-f267-4d5e-bda4-cbe2669b7741",
8711
- "_tags": []
9130
+ "type": "object",
9131
+ "description": "A member of the `catalog_reference` cannot be resolved at the reference's `as_of`:\nits entity or variant no longer exists, the variant has no version in effect at that\ninstant, or the entity's schema no longer lets the variant be read. Fetch the pair\nagain; the catalog answers with what is offered now.\n",
9132
+ "required": [
9133
+ "code",
9134
+ "details"
9135
+ ],
9136
+ "properties": {
9137
+ "code": {
9138
+ "type": "string",
9139
+ "enum": [
9140
+ "CATALOG_REFERENCE_UNRESOLVABLE"
9141
+ ]
9142
+ },
9143
+ "details": {
9144
+ "type": "object",
9145
+ "additionalProperties": false,
9146
+ "required": [
9147
+ "schema",
9148
+ "entity_id",
9149
+ "variant_id",
9150
+ "as_of"
9151
+ ],
9152
+ "properties": {
9153
+ "schema": {
9154
+ "$ref": "#/components/schemas/ConditionalEntitySlug"
9155
+ },
9156
+ "entity_id": {
9157
+ "type": "string",
9158
+ "description": "The entity the reference addressed.",
9159
+ "example": "price-sp26d1yo"
9160
+ },
9161
+ "variant_id": {
9162
+ "type": "string",
9163
+ "description": "The variant the reference addressed.",
9164
+ "example": "var-46045"
9165
+ },
9166
+ "as_of": {
9167
+ "type": "string",
9168
+ "description": "The instant the reference names.",
9169
+ "example": "2026-12-20T10:15:00.000Z"
9170
+ }
9171
+ }
9172
+ }
9173
+ }
9174
+ },
9175
+ {
9176
+ "type": "object",
9177
+ "description": "A refusal without a `code`, such as a request validation failure or a price that\ndoes not exist.\n",
9178
+ "additionalProperties": false,
9179
+ "required": [
9180
+ "message"
9181
+ ],
9182
+ "properties": {
9183
+ "message": {
9184
+ "type": "string"
9185
+ },
9186
+ "status": {
9187
+ "type": "number"
9188
+ },
9189
+ "cause": {
9190
+ "type": "string"
9191
+ },
9192
+ "error": {
9193
+ "$ref": "#/components/schemas/ReportedError"
9194
+ }
9195
+ }
8712
9196
  }
8713
9197
  ]
8714
9198
  }
8715
- },
9199
+ ]
9200
+ },
9201
+ "BaseProduct": {
9202
+ "type": "object",
9203
+ "description": "The product's own attributes — everything but the two relations whose shape depends on\nwhether the product was hydrated, which `Product` and `HydratedProduct` add.\n",
9204
+ "additionalProperties": true,
8716
9205
  "properties": {
8717
9206
  "description": {
8718
9207
  "type": "string",
@@ -8759,18 +9248,6 @@
8759
9248
  }
8760
9249
  }
8761
9250
  },
8762
- "cross_sellable_products": {
8763
- "type": "object",
8764
- "description": "Stores references to products that can be cross sold with the current product.",
8765
- "properties": {
8766
- "$relation": {
8767
- "type": "array",
8768
- "items": {
8769
- "$ref": "#/components/schemas/EntityRelation"
8770
- }
8771
- }
8772
- }
8773
- },
8774
9251
  "product_images": {
8775
9252
  "description": "Stores references to a set of file images of the product",
8776
9253
  "oneOf": [
@@ -8815,20 +9292,8 @@
8815
9292
  }
8816
9293
  ]
8817
9294
  },
8818
- "price_options": {
8819
- "type": "object",
8820
- "description": "A set of [prices](/api/pricing#tag/simple_price_schema) or [composite prices](/api/pricing#tag/dynamic_price_schema) for the current product.",
8821
- "properties": {
8822
- "$relation": {
8823
- "type": "array",
8824
- "items": {
8825
- "$ref": "#/components/schemas/EntityRelation"
8826
- }
8827
- }
8828
- }
8829
- },
8830
9295
  "is_conditional": {
8831
- "description": "The flag for entities whose values vary by context. Resolve the values that apply with\n`POST /v1/conditional-pricing:resolve`.\n",
9296
+ "description": "The flag for entities whose values vary by context. Resolve the values that apply with\n`POST /v1/conditional-pricing:resolve`, or from a journey with `POST /v2/public/catalog`.\n",
8832
9297
  "type": "boolean"
8833
9298
  },
8834
9299
  "_availability_files": {
@@ -8862,99 +9327,243 @@
8862
9327
  }
8863
9328
  }
8864
9329
  },
8865
- "Opportunity": {
9330
+ "Product": {
8866
9331
  "type": "object",
8867
- "description": "The opportunity entity",
9332
+ "description": "The product entity, its relations as stored.",
9333
+ "readOnly": true,
8868
9334
  "additionalProperties": true,
8869
9335
  "example": {
8870
- "opportunity_number": "OP 2022/335790",
8871
- "source": {
8872
- "title": "manual"
8873
- },
8874
- "source_type": "manual",
8875
- "_schema": "opportunity",
8876
- "_title": "16 Module Solar Pack Lead",
8877
- "opportunity_title": "16 Module Solar Pack Lead",
8878
- "due_date": "2022-06-30T15:18:00.000Z",
8879
- "assignee": [
9336
+ "type": "product",
9337
+ "_schema": "product",
9338
+ "_title": "Solar Panel with Battery Storage",
9339
+ "name": "Solar Panel with Battery Storage",
9340
+ "code": "SOLAR-BATT",
9341
+ "active": true,
9342
+ "description": "Solar Panel with battery solution, optimized for max efficiency. ",
9343
+ "feature": [
8880
9344
  {
8881
- "id": "10002563",
8882
- "email": "j.pinho@epilot.cloud",
8883
- "display_name": "j.pinho@epilot.cloud",
8884
- "token": "9e1758a3-2a32-4a5f-b034-a8ab883f8fb9",
8885
- "image_uri": "https://dummy-image.jpg",
8886
- "organization_id": "728",
8887
- "department": "Engineering",
8888
- "preferred_language": "en",
8889
- "status": "Active",
8890
- "phone": "+49123456789",
8891
- "email_notification_setting": {
8892
- "added_participant_opportunity": true,
8893
- "assigned_opportunity": true,
8894
- "assigned_task": true,
8895
- "comment_opportunity": true,
8896
- "deleted_task": true,
8897
- "escalated_task": true,
8898
- "message_receive_opportunity": true,
8899
- "message_send_opportunity": true,
8900
- "created_task": true,
8901
- "created_opportunity_manual": true,
8902
- "created_opportunity_auto": true,
8903
- "deleted_opportunity": true
8904
- },
8905
- "is_signature_enabled": true,
8906
- "created_at": "2021-05-18T06:30:25.36046"
9345
+ "_tags": [],
9346
+ "feature": "Eco-Panels"
9347
+ },
9348
+ {
9349
+ "_tags": [],
9350
+ "feature": "Remote Management Platform"
9351
+ },
9352
+ {
9353
+ "_tags": [],
9354
+ "feature": "Battery Remote Control"
9355
+ },
9356
+ {
9357
+ "_tags": [],
9358
+ "feature": "Mobile App"
8907
9359
  }
8908
9360
  ],
8909
- "description": "Lead generated automatically via journey automation.",
8910
- "customer": {
9361
+ "cross_sellable_products": {
8911
9362
  "$relation": [
8912
9363
  {
8913
- "entity_id": "69bf4355-9c1e-498a-b87e-6c873668194d",
9364
+ "entity_id": "068d0713-a650-4668-9ed2-eca7be31e337",
9365
+ "_schema": "product",
8914
9366
  "_tags": []
8915
9367
  },
8916
9368
  {
8917
- "entity_id": "8625e2e4-978e-4d16-b3d2-0d05fb4091f0",
9369
+ "entity_id": "c8402ee7-fba9-4f3d-bffd-6803ca655782",
8918
9370
  "_tags": []
8919
9371
  }
8920
9372
  ]
8921
9373
  },
8922
- "dates": [
8923
- {
8924
- "_tags": [
8925
- "Installation Date"
8926
- ],
8927
- "dates": "",
8928
- "value": "2022-06-30T15:21:00.000Z"
8929
- }
8930
- ],
8931
- "items": {
9374
+ "product_images": {
8932
9375
  "$relation": [
8933
9376
  {
8934
- "entity_id": "ff5fcdaf-9e36-4292-97f0-6a4e3f82a8f3"
8935
- },
8936
- {
8937
- "entity_id": "ec10b7cf-95ce-4f6b-a266-c566c7734b96"
9377
+ "entity_id": "37bdeaaa-65fe-403e-9894-65b01cd277f1"
8938
9378
  },
8939
9379
  {
8940
- "entity_id": "c3745dfe-4a46-4c22-8bf3-6159303474e4"
9380
+ "entity_id": "56dde657-795c-41bb-bf53-98fd586b7e6e"
8941
9381
  }
8942
9382
  ]
8943
9383
  },
8944
- "billing_address": {
8945
- "$relation_ref": [
9384
+ "product_downloads": {
9385
+ "$relation": [
8946
9386
  {
8947
- "entity_id": "69bf4355-9c1e-498a-b87e-6c873668194d",
8948
- "path": "address.2"
9387
+ "entity_id": "64211361-8759-414b-81c0-afbf24f83aa9"
8949
9388
  }
8950
9389
  ]
8951
9390
  },
8952
- "delivery_address": {
8953
- "$relation_ref": [
9391
+ "_id": "a7f4771a-6368-4d77-bb01-71f1e4902de5",
9392
+ "_org": "728",
9393
+ "_created_at": "2022-06-03T15: 52: 27.512Z",
9394
+ "_updated_at": "2022-06-03T16: 05: 15.029Z",
9395
+ "price_options": {
9396
+ "$relation": [
8954
9397
  {
8955
- "entity_id": "69bf4355-9c1e-498a-b87e-6c873668194d",
8956
- "path": "address.24"
8957
- }
9398
+ "entity_id": "9c36c23b-1574-4193-beff-b1b5e1124bc7",
9399
+ "_tags": []
9400
+ },
9401
+ {
9402
+ "entity_id": "146aa2cc-f267-4d5e-bda4-cbe2669b7741",
9403
+ "_tags": []
9404
+ }
9405
+ ]
9406
+ }
9407
+ },
9408
+ "allOf": [
9409
+ {
9410
+ "$ref": "#/components/schemas/BaseProduct"
9411
+ }
9412
+ ],
9413
+ "properties": {
9414
+ "cross_sellable_products": {
9415
+ "type": "object",
9416
+ "description": "Stores references to products that can be cross sold with the current product.",
9417
+ "properties": {
9418
+ "$relation": {
9419
+ "type": "array",
9420
+ "items": {
9421
+ "$ref": "#/components/schemas/EntityRelation"
9422
+ }
9423
+ }
9424
+ }
9425
+ },
9426
+ "price_options": {
9427
+ "type": "object",
9428
+ "description": "A set of [prices](/api/pricing#tag/simple_price_schema) or [composite prices](/api/pricing#tag/dynamic_price_schema) for the current product.",
9429
+ "properties": {
9430
+ "$relation": {
9431
+ "type": "array",
9432
+ "items": {
9433
+ "$ref": "#/components/schemas/EntityRelation"
9434
+ }
9435
+ }
9436
+ }
9437
+ }
9438
+ }
9439
+ },
9440
+ "HydratedProduct": {
9441
+ "type": "object",
9442
+ "description": "The product entity hydrated one level deep, as the v2 public catalog serves it: each\nrelation holds the entities it referenced, sanitised, with their own relations as stored.\n",
9443
+ "readOnly": true,
9444
+ "additionalProperties": true,
9445
+ "allOf": [
9446
+ {
9447
+ "$ref": "#/components/schemas/BaseProduct"
9448
+ }
9449
+ ],
9450
+ "properties": {
9451
+ "cross_sellable_products": {
9452
+ "type": "array",
9453
+ "description": "The products that can be cross sold with the current product.",
9454
+ "items": {
9455
+ "$ref": "#/components/schemas/Product"
9456
+ }
9457
+ },
9458
+ "price_options": {
9459
+ "type": "array",
9460
+ "description": "The [prices](/api/pricing#tag/simple_price_schema) and [composite\nprices](/api/pricing#tag/dynamic_price_schema) of the current product, each as stored.\nA conditional one is its base entity: the pair's `price` is the resolved one.\n",
9461
+ "items": {
9462
+ "anyOf": [
9463
+ {
9464
+ "$ref": "#/components/schemas/Price"
9465
+ },
9466
+ {
9467
+ "$ref": "#/components/schemas/CompositePrice"
9468
+ }
9469
+ ]
9470
+ }
9471
+ }
9472
+ }
9473
+ },
9474
+ "Opportunity": {
9475
+ "type": "object",
9476
+ "description": "The opportunity entity",
9477
+ "additionalProperties": true,
9478
+ "example": {
9479
+ "opportunity_number": "OP 2022/335790",
9480
+ "source": {
9481
+ "title": "manual"
9482
+ },
9483
+ "source_type": "manual",
9484
+ "_schema": "opportunity",
9485
+ "_title": "16 Module Solar Pack Lead",
9486
+ "opportunity_title": "16 Module Solar Pack Lead",
9487
+ "due_date": "2022-06-30T15:18:00.000Z",
9488
+ "assignee": [
9489
+ {
9490
+ "id": "10002563",
9491
+ "email": "j.pinho@epilot.cloud",
9492
+ "display_name": "j.pinho@epilot.cloud",
9493
+ "token": "9e1758a3-2a32-4a5f-b034-a8ab883f8fb9",
9494
+ "image_uri": "https://dummy-image.jpg",
9495
+ "organization_id": "728",
9496
+ "department": "Engineering",
9497
+ "preferred_language": "en",
9498
+ "status": "Active",
9499
+ "phone": "+49123456789",
9500
+ "email_notification_setting": {
9501
+ "added_participant_opportunity": true,
9502
+ "assigned_opportunity": true,
9503
+ "assigned_task": true,
9504
+ "comment_opportunity": true,
9505
+ "deleted_task": true,
9506
+ "escalated_task": true,
9507
+ "message_receive_opportunity": true,
9508
+ "message_send_opportunity": true,
9509
+ "created_task": true,
9510
+ "created_opportunity_manual": true,
9511
+ "created_opportunity_auto": true,
9512
+ "deleted_opportunity": true
9513
+ },
9514
+ "is_signature_enabled": true,
9515
+ "created_at": "2021-05-18T06:30:25.36046"
9516
+ }
9517
+ ],
9518
+ "description": "Lead generated automatically via journey automation.",
9519
+ "customer": {
9520
+ "$relation": [
9521
+ {
9522
+ "entity_id": "69bf4355-9c1e-498a-b87e-6c873668194d",
9523
+ "_tags": []
9524
+ },
9525
+ {
9526
+ "entity_id": "8625e2e4-978e-4d16-b3d2-0d05fb4091f0",
9527
+ "_tags": []
9528
+ }
9529
+ ]
9530
+ },
9531
+ "dates": [
9532
+ {
9533
+ "_tags": [
9534
+ "Installation Date"
9535
+ ],
9536
+ "dates": "",
9537
+ "value": "2022-06-30T15:21:00.000Z"
9538
+ }
9539
+ ],
9540
+ "items": {
9541
+ "$relation": [
9542
+ {
9543
+ "entity_id": "ff5fcdaf-9e36-4292-97f0-6a4e3f82a8f3"
9544
+ },
9545
+ {
9546
+ "entity_id": "ec10b7cf-95ce-4f6b-a266-c566c7734b96"
9547
+ },
9548
+ {
9549
+ "entity_id": "c3745dfe-4a46-4c22-8bf3-6159303474e4"
9550
+ }
9551
+ ]
9552
+ },
9553
+ "billing_address": {
9554
+ "$relation_ref": [
9555
+ {
9556
+ "entity_id": "69bf4355-9c1e-498a-b87e-6c873668194d",
9557
+ "path": "address.2"
9558
+ }
9559
+ ]
9560
+ },
9561
+ "delivery_address": {
9562
+ "$relation_ref": [
9563
+ {
9564
+ "entity_id": "69bf4355-9c1e-498a-b87e-6c873668194d",
9565
+ "path": "address.24"
9566
+ }
8958
9567
  ]
8959
9568
  },
8960
9569
  "address": {
@@ -9990,7 +10599,7 @@
9990
10599
  ]
9991
10600
  },
9992
10601
  "is_conditional": {
9993
- "description": "The flag for entities whose values vary by context. Resolve the values that apply with\n`POST /v1/conditional-pricing:resolve`.\n",
10602
+ "description": "The flag for entities whose values vary by context. Resolve the values that apply with\n`POST /v1/conditional-pricing:resolve`, or from a journey with `POST /v2/public/catalog`.\n",
9994
10603
  "type": "boolean"
9995
10604
  },
9996
10605
  "pricing_model": {
@@ -10314,7 +10923,7 @@
10314
10923
  ]
10315
10924
  },
10316
10925
  "is_conditional": {
10317
- "description": "The flag for entities whose values vary by context. Resolve the values that apply with\n`POST /v1/conditional-pricing:resolve`.\n",
10926
+ "description": "The flag for entities whose values vary by context. Resolve the values that apply with\n`POST /v1/conditional-pricing:resolve`, or from a journey with `POST /v2/public/catalog`.\n",
10318
10927
  "type": "boolean"
10319
10928
  },
10320
10929
  "_created_at": {
@@ -10683,155 +11292,557 @@
10683
11292
  }
10684
11293
  }
10685
11294
  },
10686
- "ExternalPriceMetadata": {
10687
- "allOf": [
10688
- {
10689
- "$ref": "#/components/schemas/AverageMarketPriceResult"
10690
- }
10691
- ],
11295
+ "ExternalPriceMetadata": {
11296
+ "allOf": [
11297
+ {
11298
+ "$ref": "#/components/schemas/AverageMarketPriceResult"
11299
+ }
11300
+ ],
11301
+ "type": "object",
11302
+ "properties": {
11303
+ "inputs": {
11304
+ "type": "object",
11305
+ "additionalProperties": true
11306
+ }
11307
+ }
11308
+ },
11309
+ "ExternalFeeMappings": {
11310
+ "type": "array",
11311
+ "items": {
11312
+ "$ref": "#/components/schemas/ExternalFeeMapping"
11313
+ },
11314
+ "example": [
11315
+ {
11316
+ "price_id": "589B011B-F8D9-4F8E-AD71-BACE4B543C0F",
11317
+ "frequency_unit": "weekly",
11318
+ "amount_total": 1000,
11319
+ "amount_total_decimal": "10.00"
11320
+ }
11321
+ ]
11322
+ },
11323
+ "ExternalFeeMapping": {
11324
+ "type": "object",
11325
+ "properties": {
11326
+ "price_id": {
11327
+ "type": "string"
11328
+ },
11329
+ "frequency_unit": {
11330
+ "type": "string",
11331
+ "enum": [
11332
+ "weekly",
11333
+ "monthly",
11334
+ "every_quarter",
11335
+ "every_6_months",
11336
+ "yearly",
11337
+ "one_time"
11338
+ ]
11339
+ },
11340
+ "amount_total": {
11341
+ "type": "number"
11342
+ },
11343
+ "amount_total_decimal": {
11344
+ "type": "string"
11345
+ }
11346
+ },
11347
+ "example": {
11348
+ "price_id": "589B011B-F8D9-4F8E-AD71-BACE4B543C0F",
11349
+ "frequency_unit": "weekly",
11350
+ "amount_total": 1000,
11351
+ "amount_total_decimal": "10.00"
11352
+ }
11353
+ },
11354
+ "CatalogSearch": {
11355
+ "description": "A catalog search payload",
11356
+ "type": "object",
11357
+ "properties": {
11358
+ "q": {
11359
+ "description": "The query to perform using lucene query syntax.",
11360
+ "type": "string"
11361
+ },
11362
+ "sort": {
11363
+ "description": "The sort expression to sort the results.",
11364
+ "type": "string"
11365
+ },
11366
+ "from": {
11367
+ "description": "The index from which to query, used for pagination purposes. Defaults to 0",
11368
+ "type": "number"
11369
+ },
11370
+ "size": {
11371
+ "description": "The max size of the response, defaults to 2000.",
11372
+ "type": "number"
11373
+ },
11374
+ "hydrate": {
11375
+ "type": "boolean",
11376
+ "description": "When true, enables entity hydration to resolve nested $relation references in-place.",
11377
+ "default": false
11378
+ },
11379
+ "fields": {
11380
+ "$ref": "#/components/schemas/CatalogFieldsParam"
11381
+ },
11382
+ "availability": {
11383
+ "$ref": "#/components/schemas/AvailabilityFilters"
11384
+ }
11385
+ },
11386
+ "example": {
11387
+ "q": "_id:1233432 OR _id:123432454 OR _id:23445433",
11388
+ "sort": "description ASC",
11389
+ "from": 0,
11390
+ "size": 200
11391
+ },
11392
+ "required": [
11393
+ "q"
11394
+ ]
11395
+ },
11396
+ "CatalogFieldsParam": {
11397
+ "type": "array",
11398
+ "description": "List of entity fields to include or exclude from the results.\n",
11399
+ "items": {
11400
+ "type": "string"
11401
+ },
11402
+ "example": [
11403
+ "!_files",
11404
+ "!**.versions"
11405
+ ]
11406
+ },
11407
+ "CatalogSearchResult": {
11408
+ "description": "The query result payload",
11409
+ "type": "object",
11410
+ "properties": {
11411
+ "hits": {
11412
+ "type": "number",
11413
+ "description": "The number of results returned."
11414
+ },
11415
+ "results": {
11416
+ "type": "array",
11417
+ "items": {
11418
+ "anyOf": [
11419
+ {
11420
+ "$ref": "#/components/schemas/Product"
11421
+ },
11422
+ {
11423
+ "$ref": "#/components/schemas/Price"
11424
+ },
11425
+ {
11426
+ "$ref": "#/components/schemas/Coupon"
11427
+ }
11428
+ ]
11429
+ }
11430
+ }
11431
+ },
11432
+ "example": {
11433
+ "hits": 2,
11434
+ "results": [
11435
+ {
11436
+ "schema": "product",
11437
+ "description": "product a"
11438
+ },
11439
+ {
11440
+ "schema": "price",
11441
+ "unit_amount_decimal": "124.342343434"
11442
+ }
11443
+ ]
11444
+ }
11445
+ },
11446
+ "ResolveCatalogRequest": {
11447
+ "type": "object",
11448
+ "additionalProperties": false,
11449
+ "description": "The entries of one journey block, and the situation to resolve them for. Every member of\nevery pair is resolved for its entity type's context at the same `as_of`.\n",
11450
+ "required": [
11451
+ "entries",
11452
+ "context"
11453
+ ],
11454
+ "properties": {
11455
+ "entries": {
11456
+ "type": "array",
11457
+ "description": "One entry per configured tile, answered independently — a duplicate is answered twice.\nAt most 100.\n",
11458
+ "minItems": 1,
11459
+ "maxItems": 100,
11460
+ "items": {
11461
+ "$ref": "#/components/schemas/CatalogEntry"
11462
+ }
11463
+ },
11464
+ "context": {
11465
+ "$ref": "#/components/schemas/CatalogContext"
11466
+ },
11467
+ "as_of": {
11468
+ "type": "string",
11469
+ "description": "The instant every member is resolved at. Defaults to now. It is written into every\ncatalog reference, and checkout prices at it. Accepts an RFC 3339 date (read as midnight\nUTC) or date-time, to millisecond precision.\n",
11470
+ "example": "2026-12-20T10:15:00Z"
11471
+ }
11472
+ }
11473
+ },
11474
+ "CatalogContext": {
11475
+ "type": "object",
11476
+ "additionalProperties": false,
11477
+ "description": "One context per entity type, each the authenticated resolve's context and checked against\nthat type's schema alone. A product resolves against `product`, and a price and each of a\ncomposite's components against `price`. A type left out resolves against an empty context,\nwhich serves the `default` variant.\n",
11478
+ "properties": {
11479
+ "product": {
11480
+ "$ref": "#/components/schemas/ResolveContext"
11481
+ },
11482
+ "price": {
11483
+ "$ref": "#/components/schemas/ResolveContext"
11484
+ },
11485
+ "coupon": {
11486
+ "$ref": "#/components/schemas/ResolveContext"
11487
+ }
11488
+ },
11489
+ "example": {
11490
+ "product": {
11491
+ "postal_code": "46045",
11492
+ "channel": "direct"
11493
+ },
11494
+ "price": {
11495
+ "postal_code": "46045"
11496
+ }
11497
+ }
11498
+ },
11499
+ "CatalogEntry": {
11500
+ "type": "object",
11501
+ "additionalProperties": false,
11502
+ "description": "A product and, optionally, one of its prices. With `price_id` the entry is the author's\npair, served as named; without it the entry is served from the resolved product's\n`price_options`, one pair per price.\n",
11503
+ "required": [
11504
+ "product_id"
11505
+ ],
11506
+ "properties": {
11507
+ "product_id": {
11508
+ "type": "string",
11509
+ "description": "The product to show.",
11510
+ "example": "product-pv-2027"
11511
+ },
11512
+ "price_id": {
11513
+ "type": "string",
11514
+ "description": "The price to show it at. Absent, every price the resolved product offers.",
11515
+ "example": "price-sp26d1yo"
11516
+ }
11517
+ }
11518
+ },
11519
+ "ResolveCatalogResult": {
11520
+ "type": "object",
11521
+ "required": [
11522
+ "pairs",
11523
+ "warnings"
11524
+ ],
11525
+ "properties": {
11526
+ "pairs": {
11527
+ "type": "array",
11528
+ "description": "One pair per applicable combination, unordered. A member that matches several variants\nis several pairs; a composite whose components match several variants is one pair per\ncombination. An entry may yield none.\n",
11529
+ "items": {
11530
+ "$ref": "#/components/schemas/CatalogPair"
11531
+ }
11532
+ },
11533
+ "warnings": {
11534
+ "type": "array",
11535
+ "description": "The entries that could not be answered because an id found nothing. Always present, and\nempty in the ordinary case; an entry the catalog answers \"not offered\" is not in it.\n",
11536
+ "items": {
11537
+ "$ref": "#/components/schemas/CatalogWarning"
11538
+ }
11539
+ }
11540
+ }
11541
+ },
11542
+ "CatalogPair": {
11543
+ "type": "object",
11544
+ "description": "A product and one of its prices, resolved for the request's `context` at its `as_of`, with\nthe coupons that apply and the reference checkout prices from.\n",
11545
+ "required": [
11546
+ "product",
11547
+ "price",
11548
+ "coupons",
11549
+ "catalog_reference"
11550
+ ],
11551
+ "properties": {
11552
+ "product": {
11553
+ "description": "The product, hydrated one level deep and sanitised. A conditional product is the resolved\npayload — the entity as its variant leaves it, carrying `_variant_id`,\n`_version_valid_from`, `_conditions` and `_inert_overrides`. A classic product carries\nnone of them.\n",
11554
+ "anyOf": [
11555
+ {
11556
+ "allOf": [
11557
+ {
11558
+ "$ref": "#/components/schemas/HydratedProduct"
11559
+ },
11560
+ {
11561
+ "$ref": "#/components/schemas/ResolvedVariant"
11562
+ }
11563
+ ]
11564
+ },
11565
+ {
11566
+ "$ref": "#/components/schemas/HydratedProduct"
11567
+ }
11568
+ ]
11569
+ },
11570
+ "price": {
11571
+ "description": "The price, hydrated one level deep and sanitised, with the same discriminators when it is\nconditional. A composite price carries its components hydrated in place; a component that\nis itself conditional is resolved against the same context and carries the\ndiscriminators too.\n",
11572
+ "anyOf": [
11573
+ {
11574
+ "allOf": [
11575
+ {
11576
+ "$ref": "#/components/schemas/Price"
11577
+ },
11578
+ {
11579
+ "$ref": "#/components/schemas/ResolvedVariant"
11580
+ }
11581
+ ]
11582
+ },
11583
+ {
11584
+ "allOf": [
11585
+ {
11586
+ "$ref": "#/components/schemas/HydratedCompositePrice"
11587
+ },
11588
+ {
11589
+ "$ref": "#/components/schemas/ResolvedVariant"
11590
+ },
11591
+ {
11592
+ "$ref": "#/components/schemas/ResolvedPriceComponents"
11593
+ }
11594
+ ]
11595
+ },
11596
+ {
11597
+ "$ref": "#/components/schemas/Price"
11598
+ },
11599
+ {
11600
+ "allOf": [
11601
+ {
11602
+ "$ref": "#/components/schemas/HydratedCompositePrice"
11603
+ },
11604
+ {
11605
+ "$ref": "#/components/schemas/ResolvedPriceComponents"
11606
+ }
11607
+ ]
11608
+ }
11609
+ ]
11610
+ },
11611
+ "coupons": {
11612
+ "type": "array",
11613
+ "description": "The active coupons whose `prices` name this price — for a composite, its components —\nwith their promo codes and usage censored, as the v1 catalog serves them. Always present,\nand empty when none applies.\n",
11614
+ "items": {
11615
+ "$ref": "#/components/schemas/CouponWithoutPromoCodes"
11616
+ }
11617
+ },
11618
+ "catalog_reference": {
11619
+ "$ref": "#/components/schemas/CatalogReference"
11620
+ }
11621
+ }
11622
+ },
11623
+ "ResolvedPriceComponents": {
10692
11624
  "type": "object",
11625
+ "description": "The components of a composite price as the v2 catalog serves them: hydrated in place, and\na component that is itself conditional resolved against the same context, carrying the\ndiscriminators a resolved payload carries. A conditional component with no variant in\neffect — nothing matches and there is no default — is left out, as a deleted component is.\n",
10693
11626
  "properties": {
10694
- "inputs": {
10695
- "type": "object",
10696
- "additionalProperties": true
11627
+ "price_components": {
11628
+ "type": "array",
11629
+ "items": {
11630
+ "anyOf": [
11631
+ {
11632
+ "allOf": [
11633
+ {
11634
+ "$ref": "#/components/schemas/Price"
11635
+ },
11636
+ {
11637
+ "$ref": "#/components/schemas/ResolvedVariant"
11638
+ }
11639
+ ]
11640
+ },
11641
+ {
11642
+ "$ref": "#/components/schemas/Price"
11643
+ }
11644
+ ]
11645
+ }
10697
11646
  }
10698
11647
  }
10699
11648
  },
10700
- "ExternalFeeMappings": {
10701
- "type": "array",
10702
- "items": {
10703
- "$ref": "#/components/schemas/ExternalFeeMapping"
10704
- },
10705
- "example": [
11649
+ "CatalogWarning": {
11650
+ "description": "An entry the v2 catalog could not answer, and why. `details` is typed per `code`: narrow on\n`code` and the object under it declares exactly the fields that code sends.\n",
11651
+ "oneOf": [
10706
11652
  {
10707
- "price_id": "589B011B-F8D9-4F8E-AD71-BACE4B543C0F",
10708
- "frequency_unit": "weekly",
10709
- "amount_total": 1000,
10710
- "amount_total_decimal": "10.00"
11653
+ "type": "object",
11654
+ "additionalProperties": false,
11655
+ "description": "An id in the entry finds no entity, or a deleted one. One warning per such id.\n",
11656
+ "required": [
11657
+ "code",
11658
+ "message",
11659
+ "details"
11660
+ ],
11661
+ "properties": {
11662
+ "code": {
11663
+ "type": "string",
11664
+ "enum": [
11665
+ "CATALOG_ENTRY_NOT_FOUND"
11666
+ ]
11667
+ },
11668
+ "message": {
11669
+ "type": "string"
11670
+ },
11671
+ "details": {
11672
+ "type": "object",
11673
+ "additionalProperties": false,
11674
+ "required": [
11675
+ "product_id",
11676
+ "missing"
11677
+ ],
11678
+ "properties": {
11679
+ "product_id": {
11680
+ "type": "string",
11681
+ "description": "The entry's product id, as sent.",
11682
+ "example": "product-heatpump-2027"
11683
+ },
11684
+ "price_id": {
11685
+ "type": "string",
11686
+ "description": "The entry's price id, as sent. Absent when the entry named none.",
11687
+ "example": "price-retired"
11688
+ },
11689
+ "missing": {
11690
+ "type": "string",
11691
+ "description": "Which of the entry's ids found nothing.",
11692
+ "enum": [
11693
+ "product",
11694
+ "price"
11695
+ ]
11696
+ }
11697
+ }
11698
+ }
11699
+ }
11700
+ },
11701
+ {
11702
+ "type": "object",
11703
+ "additionalProperties": false,
11704
+ "description": "An id in the entry names an entity of another type than the entry asked for: a price id\nwhere a product id was expected, or the reverse. One warning per such id.\n",
11705
+ "required": [
11706
+ "code",
11707
+ "message",
11708
+ "details"
11709
+ ],
11710
+ "properties": {
11711
+ "code": {
11712
+ "type": "string",
11713
+ "enum": [
11714
+ "CATALOG_ENTRY_TYPE_MISMATCH"
11715
+ ]
11716
+ },
11717
+ "message": {
11718
+ "type": "string"
11719
+ },
11720
+ "details": {
11721
+ "type": "object",
11722
+ "additionalProperties": false,
11723
+ "required": [
11724
+ "product_id",
11725
+ "mismatched",
11726
+ "actual_schema"
11727
+ ],
11728
+ "properties": {
11729
+ "product_id": {
11730
+ "type": "string",
11731
+ "description": "The entry's product id, as sent.",
11732
+ "example": "product-heatpump-2027"
11733
+ },
11734
+ "price_id": {
11735
+ "type": "string",
11736
+ "description": "The entry's price id, as sent. Absent when the entry named none.",
11737
+ "example": "product-tariff-2027"
11738
+ },
11739
+ "mismatched": {
11740
+ "type": "string",
11741
+ "description": "Which of the entry's ids names an entity of another type.",
11742
+ "enum": [
11743
+ "product",
11744
+ "price"
11745
+ ]
11746
+ },
11747
+ "actual_schema": {
11748
+ "type": "string",
11749
+ "description": "The type the entity turned out to be.",
11750
+ "example": "product"
11751
+ }
11752
+ }
11753
+ }
11754
+ }
10711
11755
  }
10712
11756
  ]
10713
11757
  },
10714
- "ExternalFeeMapping": {
11758
+ "CatalogReference": {
10715
11759
  "type": "object",
11760
+ "additionalProperties": false,
11761
+ "description": "Names the variant each member of a catalog pair was resolved from, and the instant `as_of`\nthey were resolved at. Checkout prices each conditional member from that variant, using the\nversion in effect at `as_of`.\n\nThe catalog signs every reference, classic pair or not: `_meta` signs the rest of the\nreference. Where the caller is public, a reference must verify. An authenticated caller may\nsend one without `_meta`. Signatures do not expire.\n",
11762
+ "required": [
11763
+ "product",
11764
+ "price",
11765
+ "as_of"
11766
+ ],
10716
11767
  "properties": {
10717
- "price_id": {
10718
- "type": "string"
11768
+ "product": {
11769
+ "$ref": "#/components/schemas/CatalogReferenceMember"
10719
11770
  },
10720
- "frequency_unit": {
10721
- "type": "string",
10722
- "enum": [
10723
- "weekly",
10724
- "monthly",
10725
- "every_quarter",
10726
- "every_6_months",
10727
- "yearly",
10728
- "one_time"
10729
- ]
11771
+ "price": {
11772
+ "$ref": "#/components/schemas/CatalogReferenceMember"
10730
11773
  },
10731
- "amount_total": {
10732
- "type": "number"
11774
+ "price_components": {
11775
+ "type": "array",
11776
+ "description": "Present for a composite price that serves at least one component: the components this\npair is the combination of, each with its variant where one produced it. A conditional\ncomponent with no variant in effect is left out of the composite and is not named here.\nA component line item carries no reference of its own.\n",
11777
+ "items": {
11778
+ "$ref": "#/components/schemas/CatalogReferenceMember"
11779
+ }
10733
11780
  },
10734
- "amount_total_decimal": {
10735
- "type": "string"
11781
+ "coupons": {
11782
+ "type": "array",
11783
+ "description": "Present when coupons apply to the price. Coupons are served as stored, so a coupon member\ncarries no `variant`.\n",
11784
+ "items": {
11785
+ "$ref": "#/components/schemas/CatalogReferenceMember"
11786
+ }
11787
+ },
11788
+ "as_of": {
11789
+ "type": "string",
11790
+ "description": "The instant every member was resolved at, as an RFC 3339 date-time. Checkout selects\neach conditional member's version at this instant.\n",
11791
+ "example": "2026-12-20T10:15:00.000Z"
11792
+ },
11793
+ "_meta": {
11794
+ "$ref": "#/components/schemas/SignatureMeta"
10736
11795
  }
10737
11796
  },
10738
11797
  "example": {
10739
- "price_id": "589B011B-F8D9-4F8E-AD71-BACE4B543C0F",
10740
- "frequency_unit": "weekly",
10741
- "amount_total": 1000,
10742
- "amount_total_decimal": "10.00"
10743
- }
10744
- },
10745
- "CatalogSearch": {
10746
- "description": "A catalog search payload",
10747
- "type": "object",
10748
- "properties": {
10749
- "q": {
10750
- "description": "The query to perform using lucene query syntax.",
10751
- "type": "string"
10752
- },
10753
- "sort": {
10754
- "description": "The sort expression to sort the results.",
10755
- "type": "string"
11798
+ "product": {
11799
+ "id": "product-pv-2027",
11800
+ "variant": "var-46045"
10756
11801
  },
10757
- "from": {
10758
- "description": "The index from which to query, used for pagination purposes. Defaults to 0",
10759
- "type": "number"
10760
- },
10761
- "size": {
10762
- "description": "The max size of the response, defaults to 2000.",
10763
- "type": "number"
10764
- },
10765
- "hydrate": {
10766
- "type": "boolean",
10767
- "description": "When true, enables entity hydration to resolve nested $relation references in-place.",
10768
- "default": false
10769
- },
10770
- "fields": {
10771
- "$ref": "#/components/schemas/CatalogFieldsParam"
11802
+ "price": {
11803
+ "id": "price-composite-9f2",
11804
+ "variant": "var-46046"
10772
11805
  },
10773
- "availability": {
10774
- "$ref": "#/components/schemas/AvailabilityFilters"
11806
+ "price_components": [
11807
+ {
11808
+ "id": "price-base-fee-46045",
11809
+ "variant": "var-46047"
11810
+ },
11811
+ {
11812
+ "id": "price-kwh-46045",
11813
+ "variant": "var-46048"
11814
+ }
11815
+ ],
11816
+ "coupons": [
11817
+ {
11818
+ "id": "0f8c4852-23fa-4a64-a2f3-88702335f094"
11819
+ }
11820
+ ],
11821
+ "as_of": "2026-12-20T10:15:00.000Z",
11822
+ "_meta": {
11823
+ "timestamp": 1797000000000,
11824
+ "signature": "c3ab8ff137"
10775
11825
  }
10776
- },
10777
- "example": {
10778
- "q": "_id:1233432 OR _id:123432454 OR _id:23445433",
10779
- "sort": "description ASC",
10780
- "from": 0,
10781
- "size": 200
10782
- },
10783
- "required": [
10784
- "q"
10785
- ]
10786
- },
10787
- "CatalogFieldsParam": {
10788
- "type": "array",
10789
- "description": "List of entity fields to include or exclude from the results.\n",
10790
- "items": {
10791
- "type": "string"
10792
- },
10793
- "example": [
10794
- "!_files",
10795
- "!**.versions"
10796
- ]
11826
+ }
10797
11827
  },
10798
- "CatalogSearchResult": {
10799
- "description": "The query result payload",
11828
+ "CatalogReferenceMember": {
10800
11829
  "type": "object",
11830
+ "additionalProperties": false,
11831
+ "description": "One member of a catalog reference: the entity, and the variant that produced it. `variant`\nis absent for a classic entity.\n",
11832
+ "required": [
11833
+ "id"
11834
+ ],
10801
11835
  "properties": {
10802
- "hits": {
10803
- "type": "number",
10804
- "description": "The number of results returned."
11836
+ "id": {
11837
+ "type": "string",
11838
+ "description": "The entity's id.",
11839
+ "example": "price-sp26d1yo"
10805
11840
  },
10806
- "results": {
10807
- "type": "array",
10808
- "items": {
10809
- "anyOf": [
10810
- {
10811
- "$ref": "#/components/schemas/Product"
10812
- },
10813
- {
10814
- "$ref": "#/components/schemas/Price"
10815
- },
10816
- {
10817
- "$ref": "#/components/schemas/Coupon"
10818
- }
10819
- ]
10820
- }
11841
+ "variant": {
11842
+ "type": "string",
11843
+ "description": "The variant checkout prices this member from.",
11844
+ "example": "var-46045"
10821
11845
  }
10822
- },
10823
- "example": {
10824
- "hits": 2,
10825
- "results": [
10826
- {
10827
- "schema": "product",
10828
- "description": "product a"
10829
- },
10830
- {
10831
- "schema": "price",
10832
- "unit_amount_decimal": "124.342343434"
10833
- }
10834
- ]
10835
11846
  }
10836
11847
  },
10837
11848
  "SearchProvidersParams": {
@@ -11988,6 +12999,14 @@
11988
12999
  "$ref": "#/components/schemas/Product"
11989
13000
  }
11990
13001
  ]
13002
+ },
13003
+ "catalog_reference": {
13004
+ "description": "The `catalog_reference` of the pair this item came from, unchanged. Required when the\nitem's product or price is conditional. Component items carry none.\n",
13005
+ "allOf": [
13006
+ {
13007
+ "$ref": "#/components/schemas/CatalogReference"
13008
+ }
13009
+ ]
11991
13010
  }
11992
13011
  }
11993
13012
  },
@@ -12042,7 +13061,6 @@
12042
13061
  "coupon_ids": {
12043
13062
  "type": "array",
12044
13063
  "description": "The ids of the coupons applicable to the price item",
12045
- "readOnly": true,
12046
13064
  "items": {
12047
13065
  "type": "string",
12048
13066
  "description": "The id of the coupon"
@@ -12194,7 +13212,6 @@
12194
13212
  "price_component_coupon_ids": {
12195
13213
  "type": "object",
12196
13214
  "description": "The map of coupon ids applicable to the price components",
12197
- "readOnly": true,
12198
13215
  "additionalProperties": {
12199
13216
  "type": "array",
12200
13217
  "items": {
@@ -13862,7 +14879,7 @@
13862
14879
  "type": "boolean"
13863
14880
  },
13864
14881
  "is_conditional": {
13865
- "description": "The flag for entities whose values vary by context. Resolve the values that apply with\n`POST /v1/conditional-pricing:resolve`.\n",
14882
+ "description": "The flag for entities whose values vary by context. Resolve the values that apply with\n`POST /v1/conditional-pricing:resolve`, or from a journey with `POST /v2/public/catalog`.\n",
13866
14883
  "type": "boolean"
13867
14884
  },
13868
14885
  "requires_promo_code": {