@carrot-foundation/schemas 0.1.36 → 0.1.38

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.
Files changed (42) hide show
  1. package/dist/index.cjs +1778 -36
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.d.cts +1510 -14
  4. package/dist/index.d.ts +1510 -14
  5. package/dist/index.js +1735 -37
  6. package/dist/index.js.map +1 -1
  7. package/package.json +1 -1
  8. package/schemas/ipfs/collection/collection.example.json +1 -0
  9. package/schemas/ipfs/collection/collection.schema.json +306 -32
  10. package/schemas/ipfs/credit/credit.example.json +1 -0
  11. package/schemas/ipfs/credit/credit.schema.json +327 -45
  12. package/schemas/ipfs/credit-purchase-receipt/credit-purchase-receipt.example.json +290 -0
  13. package/schemas/ipfs/credit-purchase-receipt/credit-purchase-receipt.schema.json +1772 -0
  14. package/schemas/ipfs/credit-retirement-receipt/credit-retirement-receipt.example.json +280 -0
  15. package/schemas/ipfs/credit-retirement-receipt/credit-retirement-receipt.schema.json +1704 -0
  16. package/schemas/ipfs/gas-id/gas-id.schema.json +7 -6
  17. package/schemas/ipfs/mass-id/mass-id.schema.json +7 -6
  18. package/schemas/ipfs/mass-id-audit/mass-id-audit.example.json +30 -29
  19. package/schemas/ipfs/mass-id-audit/mass-id-audit.schema.json +637 -15
  20. package/schemas/ipfs/methodology/methodology.example.json +27 -26
  21. package/schemas/ipfs/methodology/methodology.schema.json +458 -15
  22. package/schemas/ipfs/recycled-id/recycled-id.schema.json +7 -6
  23. package/schemas/ipfs/gas-id/gas-id.attributes.schema.json +0 -219
  24. package/schemas/ipfs/gas-id/gas-id.data.schema.json +0 -120
  25. package/schemas/ipfs/mass-id-audit/mass-id-audit.data.schema.json +0 -130
  26. package/schemas/ipfs/methodology/methodology.data.schema.json +0 -121
  27. package/schemas/ipfs/purchase-id/purchase-id.attributes.schema.json +0 -91
  28. package/schemas/ipfs/purchase-id/purchase-id.data.schema.json +0 -337
  29. package/schemas/ipfs/purchase-id/purchase-id.example.json +0 -224
  30. package/schemas/ipfs/purchase-id/purchase-id.schema.json +0 -29
  31. package/schemas/ipfs/recycled-id/recycled-id.attributes.schema.json +0 -202
  32. package/schemas/ipfs/recycled-id/recycled-id.data.schema.json +0 -63
  33. package/schemas/ipfs/shared/base/base.schema.json +0 -163
  34. package/schemas/ipfs/shared/certificate/certificate.schema.json +0 -145
  35. package/schemas/ipfs/shared/definitions/definitions.schema.json +0 -255
  36. package/schemas/ipfs/shared/entities/location/location.schema.json +0 -90
  37. package/schemas/ipfs/shared/entities/participant/participant.schema.json +0 -28
  38. package/schemas/ipfs/shared/nft/nft.schema.json +0 -182
  39. package/schemas/ipfs/shared/references/audit-reference/audit-reference.schema.json +0 -42
  40. package/schemas/ipfs/shared/references/gas-id-reference/gas-id-reference.schema.json +0 -27
  41. package/schemas/ipfs/shared/references/mass-id-reference/mass-id-reference.schema.json +0 -27
  42. package/schemas/ipfs/shared/references/methodology-reference/methodology-reference.schema.json +0 -34
@@ -0,0 +1,1772 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "CreditPurchaseReceipt NFT IPFS Record",
4
+ "description": "Complete CreditPurchaseReceipt NFT IPFS record including attributes and credit purchase data",
5
+ "$id": "https://raw.githubusercontent.com/carrot-foundation/schemas/refs/tags/0.1.38/schemas/ipfs/credit-purchase-receipt/credit-purchase-receipt.schema.json",
6
+ "version": "0.1.38",
7
+ "type": "object",
8
+ "properties": {
9
+ "$schema": {
10
+ "title": "JSON Schema URI",
11
+ "description": "URI of the JSON Schema used to validate this record",
12
+ "example": "https://raw.githubusercontent.com/carrot-foundation/schemas/refs/heads/main/schemas/ipfs/shared/base/base.schema.json",
13
+ "type": "string",
14
+ "format": "uri"
15
+ },
16
+ "schema": {
17
+ "type": "object",
18
+ "properties": {
19
+ "hash": {
20
+ "title": "Schema Hash",
21
+ "description": "Keccak256 hash of the JSON Schema this record was validated against",
22
+ "examples": [
23
+ "ac08c3cf2e175e55961d6affdb38bc24591b84ceef7f3707c69ae3d52c148b2f",
24
+ "0xac08c3cf2e175e55961d6affdb38bc24591b84ceef7f3707c69ae3d52c148b2f"
25
+ ],
26
+ "anyOf": [
27
+ {
28
+ "title": "Keccak256 Hash",
29
+ "description": "Keccak256 cryptographic hash as hexadecimal string",
30
+ "examples": [
31
+ "ac08c3cf2e175e55961d6affdb38bc24591b84ceef7f3707c69ae3d52c148b2f",
32
+ "b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2"
33
+ ],
34
+ "type": "string",
35
+ "pattern": "^[0-9a-fA-F]{64}$"
36
+ },
37
+ {
38
+ "type": "string",
39
+ "pattern": "^0x[a-fA-F0-9]{64}$"
40
+ }
41
+ ]
42
+ },
43
+ "type": {
44
+ "title": "CreditPurchaseReceipt Schema Type",
45
+ "description": "CreditPurchaseReceipt NFT schema type",
46
+ "type": "string",
47
+ "const": "CreditPurchaseReceipt"
48
+ },
49
+ "version": {
50
+ "title": "Schema Version",
51
+ "description": "Version of the schema, using semantic versioning",
52
+ "examples": [
53
+ "0.1.0",
54
+ "1.0.0",
55
+ "2.1.3"
56
+ ],
57
+ "type": "string",
58
+ "minLength": 1,
59
+ "pattern": "^v?\\d+\\.\\d+\\.\\d+(-[a-zA-Z0-9.-]+)?(\\+[a-zA-Z0-9.-]+)?$"
60
+ }
61
+ },
62
+ "required": [
63
+ "hash",
64
+ "type",
65
+ "version"
66
+ ],
67
+ "additionalProperties": false
68
+ },
69
+ "created_at": {
70
+ "title": "Created At",
71
+ "description": "ISO 8601 creation timestamp for this record",
72
+ "examples": [
73
+ "2024-12-05T11:02:47.000Z",
74
+ "2025-02-22T10:35:12.000Z"
75
+ ],
76
+ "type": "string",
77
+ "format": "date-time",
78
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
79
+ },
80
+ "external_id": {
81
+ "title": "External ID",
82
+ "description": "Off-chain reference ID (UUID from Carrot backend)",
83
+ "examples": [
84
+ "ad44dd3f-f176-4b98-bf78-5ee6e77d0530",
85
+ "b2c4e6f8-a1b3-4c5d-9e8f-123456789abc"
86
+ ],
87
+ "type": "string",
88
+ "format": "uuid",
89
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$"
90
+ },
91
+ "external_url": {
92
+ "title": "External URL",
93
+ "description": "External URL of the content",
94
+ "examples": [
95
+ "https://explore.carrot.eco/document/ad44dd3f-f176-4b98-bf78-5ee6e77d0530",
96
+ "https://carrot.eco/whitepaper.pdf"
97
+ ],
98
+ "type": "string",
99
+ "format": "uri"
100
+ },
101
+ "original_content_hash": {
102
+ "title": "Original Content Hash",
103
+ "description": "SHA-256 hash of the original JSON content including private data before schema validation",
104
+ "examples": [
105
+ "87f633634cc4b02f628685651f0a29b7bfa22a0bd841f725c6772dd00a58d489",
106
+ "6e83b8e6373847bbdc056549bedda38dc88854ce41ba4fca11e0fc6ce3e07ef6"
107
+ ],
108
+ "type": "string",
109
+ "pattern": "^[0-9a-fA-F]{64}$"
110
+ },
111
+ "content_hash": {
112
+ "title": "Content Hash",
113
+ "description": "SHA-256 hash of RFC 8785 canonicalized JSON after schema validation",
114
+ "examples": [
115
+ "87f633634cc4b02f628685651f0a29b7bfa22a0bd841f725c6772dd00a58d489",
116
+ "6e83b8e6373847bbdc056549bedda38dc88854ce41ba4fca11e0fc6ce3e07ef6"
117
+ ],
118
+ "type": "string",
119
+ "pattern": "^[0-9a-fA-F]{64}$"
120
+ },
121
+ "creator": {
122
+ "title": "Creator",
123
+ "description": "Entity that created this record",
124
+ "type": "object",
125
+ "properties": {
126
+ "name": {
127
+ "title": "Creator Name",
128
+ "description": "Company or individual name that created this record",
129
+ "examples": [
130
+ "Carrot Foundation"
131
+ ],
132
+ "type": "string"
133
+ },
134
+ "id": {
135
+ "title": "Creator ID",
136
+ "description": "Unique identifier for the creator",
137
+ "examples": [
138
+ "ad44dd3f-f176-4b98-bf78-5ee6e77d0530",
139
+ "6f520d88-864d-432d-bf9f-5c3166c4818f",
140
+ "f77afa89-1c58-40fd-9bf5-8a86703a8af4"
141
+ ],
142
+ "type": "string",
143
+ "format": "uuid",
144
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$"
145
+ }
146
+ },
147
+ "required": [
148
+ "name",
149
+ "id"
150
+ ],
151
+ "additionalProperties": false
152
+ },
153
+ "relationships": {
154
+ "title": "Relationships",
155
+ "description": "References to other IPFS records this record relates to",
156
+ "type": "array",
157
+ "items": {
158
+ "title": "Relationship",
159
+ "description": "Relationship to another IPFS record",
160
+ "type": "object",
161
+ "properties": {
162
+ "target_uri": {
163
+ "title": "Target IPFS URI",
164
+ "description": "Target IPFS URI of the referenced record",
165
+ "examples": [
166
+ "ipfs://QmTy8w65yBXgyfG2ZBg5TrfB2hPjrDQH3RCQFJGkARStJb/mass-id-organic.png",
167
+ "ipfs://QmYjtig7VJQ6XsnUjqqJvj7QaMcCAwtrgNdahSiFofrE7o"
168
+ ],
169
+ "type": "string",
170
+ "minLength": 1,
171
+ "pattern": "^ipfs:\\/\\/[a-zA-Z0-9]+(\\/.*)?$"
172
+ },
173
+ "type": {
174
+ "title": "Relationship Type",
175
+ "description": "Type of relationship to the referenced record",
176
+ "examples": [
177
+ "mass-id",
178
+ "collection",
179
+ "credit-purchase-receipt"
180
+ ],
181
+ "type": "string",
182
+ "enum": [
183
+ "collection",
184
+ "credit",
185
+ "gas-id",
186
+ "mass-id",
187
+ "mass-id-audit",
188
+ "methodology",
189
+ "credit-purchase-receipt",
190
+ "credit-retirement-receipt",
191
+ "recycled-id"
192
+ ]
193
+ },
194
+ "description": {
195
+ "title": "Relationship Description",
196
+ "description": "Human-readable description of the relationship",
197
+ "examples": [
198
+ "This record supersedes the previous version",
199
+ "Related carbon credit batch",
200
+ "Source document for this verification",
201
+ "Child record derived from this parent",
202
+ "Updated version of original record"
203
+ ],
204
+ "type": "string"
205
+ }
206
+ },
207
+ "required": [
208
+ "target_uri",
209
+ "type"
210
+ ],
211
+ "additionalProperties": false
212
+ }
213
+ },
214
+ "environment": {
215
+ "title": "Environment",
216
+ "description": "Environment information",
217
+ "type": "object",
218
+ "properties": {
219
+ "blockchain_network": {
220
+ "title": "Blockchain Network",
221
+ "description": "Blockchain Network Environment",
222
+ "type": "string",
223
+ "enum": [
224
+ "mainnet",
225
+ "testnet"
226
+ ]
227
+ },
228
+ "deployment": {
229
+ "title": "Deployment Environment",
230
+ "description": "System environment where this record was generated",
231
+ "type": "string",
232
+ "enum": [
233
+ "production",
234
+ "development",
235
+ "testing"
236
+ ]
237
+ },
238
+ "data_set_name": {
239
+ "title": "Data Set Name",
240
+ "description": "Name of the data set for this record",
241
+ "type": "string",
242
+ "enum": [
243
+ "TEST",
244
+ "PROD"
245
+ ]
246
+ }
247
+ },
248
+ "required": [
249
+ "blockchain_network",
250
+ "deployment",
251
+ "data_set_name"
252
+ ],
253
+ "additionalProperties": false
254
+ },
255
+ "data": {
256
+ "title": "Credit Purchase Receipt Data",
257
+ "description": "Complete data structure for a credit purchase receipt",
258
+ "type": "object",
259
+ "properties": {
260
+ "summary": {
261
+ "title": "Credit Purchase Receipt Summary",
262
+ "description": "Summary totals for the credit purchase including amounts and collections represented",
263
+ "type": "object",
264
+ "properties": {
265
+ "total_certificates": {
266
+ "title": "Total Certificates",
267
+ "description": "Total number of certificates represented in the receipt",
268
+ "examples": [
269
+ 1,
270
+ 123,
271
+ 456
272
+ ],
273
+ "type": "integer",
274
+ "minimum": 1,
275
+ "maximum": 9007199254740991
276
+ },
277
+ "credit_symbols": {
278
+ "title": "Credit Symbols",
279
+ "description": "Array of credit token symbols represented in the receipt",
280
+ "minItems": 1,
281
+ "type": "array",
282
+ "items": {
283
+ "title": "Credit Token Symbol",
284
+ "description": "Symbol of the credit token (e.g., C-CARB, C-BIOW)",
285
+ "examples": [
286
+ "C-CARB",
287
+ "C-BIOW"
288
+ ],
289
+ "type": "string",
290
+ "minLength": 1,
291
+ "maxLength": 10,
292
+ "pattern": "^[A-Z0-9-]+$"
293
+ }
294
+ },
295
+ "certificate_types": {
296
+ "title": "Certificate Types",
297
+ "description": "Array of certificate types represented in the receipt",
298
+ "minItems": 1,
299
+ "type": "array",
300
+ "items": {
301
+ "type": "string",
302
+ "enum": [
303
+ "GasID",
304
+ "RecycledID"
305
+ ]
306
+ }
307
+ },
308
+ "collection_slugs": {
309
+ "title": "Collection Slugs",
310
+ "description": "Array of collection slugs represented in the receipt",
311
+ "minItems": 1,
312
+ "type": "array",
313
+ "items": {
314
+ "title": "Collection Slug",
315
+ "description": "URL-friendly identifier for a collection",
316
+ "examples": [
317
+ "bold-cold-start-carazinho",
318
+ "bold-brazil"
319
+ ],
320
+ "type": "string",
321
+ "minLength": 1,
322
+ "maxLength": 100,
323
+ "pattern": "^[a-z0-9-]+$"
324
+ }
325
+ },
326
+ "total_usdc_amount": {
327
+ "title": "Total USDC Amount",
328
+ "description": "Total amount paid in USDC for the purchase",
329
+ "examples": [
330
+ 0,
331
+ 45.2,
332
+ 72.5
333
+ ],
334
+ "type": "number",
335
+ "minimum": 0
336
+ },
337
+ "total_credits": {
338
+ "title": "Total Credits",
339
+ "description": "Total amount of credits purchased",
340
+ "examples": [
341
+ 0,
342
+ 45.2,
343
+ 72.5
344
+ ],
345
+ "type": "number",
346
+ "minimum": 0
347
+ },
348
+ "purchase_date": {
349
+ "title": "Purchase Date",
350
+ "description": "Date when the purchase was made (YYYY-MM-DD)",
351
+ "examples": [
352
+ "2024-12-05",
353
+ "2025-02-22",
354
+ "2024-02-10"
355
+ ],
356
+ "type": "string",
357
+ "format": "date",
358
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
359
+ }
360
+ },
361
+ "required": [
362
+ "total_certificates",
363
+ "credit_symbols",
364
+ "certificate_types",
365
+ "collection_slugs",
366
+ "total_usdc_amount",
367
+ "total_credits",
368
+ "purchase_date"
369
+ ],
370
+ "additionalProperties": false
371
+ },
372
+ "parties": {
373
+ "title": "Parties",
374
+ "description": "Parties involved in the purchase including payer, receiver, and optional buyer",
375
+ "type": "object",
376
+ "properties": {
377
+ "payer": {
378
+ "title": "Payer Wallet Address",
379
+ "description": "Ethereum address paying for the purchase",
380
+ "examples": [
381
+ "0x1234567890abcdef1234567890abcdef12345678",
382
+ "0xabcdef1234567890abcdef1234567890abcdef12"
383
+ ],
384
+ "type": "string",
385
+ "pattern": "^0x[a-f0-9]{40}$"
386
+ },
387
+ "receiver": {
388
+ "title": "Receiver",
389
+ "description": "Receiver wallet and optional identity information",
390
+ "type": "object",
391
+ "properties": {
392
+ "wallet_address": {
393
+ "title": "Receiver Wallet Address",
394
+ "description": "Ethereum address of the receiver",
395
+ "examples": [
396
+ "0x1234567890abcdef1234567890abcdef12345678",
397
+ "0xabcdef1234567890abcdef1234567890abcdef12"
398
+ ],
399
+ "type": "string",
400
+ "pattern": "^0x[a-f0-9]{40}$"
401
+ },
402
+ "identity": {
403
+ "title": "Identity",
404
+ "description": "Participant identity information",
405
+ "type": "object",
406
+ "properties": {
407
+ "name": {
408
+ "title": "Identity Name",
409
+ "description": "Display name for the participant",
410
+ "examples": [
411
+ "EcoTech Solutions Inc.",
412
+ "Climate Action Corp"
413
+ ],
414
+ "type": "string",
415
+ "minLength": 1,
416
+ "maxLength": 100
417
+ },
418
+ "external_id": {
419
+ "title": "Identity External ID",
420
+ "description": "External identifier for the participant",
421
+ "examples": [
422
+ "ad44dd3f-f176-4b98-bf78-5ee6e77d0530",
423
+ "b2c4e6f8-a1b3-4c5d-9e8f-123456789abc"
424
+ ],
425
+ "type": "string",
426
+ "format": "uuid",
427
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$"
428
+ },
429
+ "external_url": {
430
+ "title": "Identity External URL",
431
+ "description": "External URL for the participant profile",
432
+ "examples": [
433
+ "https://explore.carrot.eco/document/ad44dd3f-f176-4b98-bf78-5ee6e77d0530",
434
+ "https://carrot.eco/whitepaper.pdf"
435
+ ],
436
+ "type": "string",
437
+ "format": "uri"
438
+ }
439
+ },
440
+ "required": [
441
+ "name",
442
+ "external_id",
443
+ "external_url"
444
+ ],
445
+ "additionalProperties": false
446
+ }
447
+ },
448
+ "required": [
449
+ "wallet_address"
450
+ ],
451
+ "additionalProperties": false
452
+ },
453
+ "buyer": {
454
+ "title": "Buyer",
455
+ "description": "Buyer identifier and optional identity information",
456
+ "type": "object",
457
+ "properties": {
458
+ "buyer_id": {
459
+ "title": "Buyer ID",
460
+ "description": "Unique identifier for the buyer",
461
+ "examples": [
462
+ "ad44dd3f-f176-4b98-bf78-5ee6e77d0530",
463
+ "b2c4e6f8-a1b3-4c5d-9e8f-123456789abc"
464
+ ],
465
+ "type": "string",
466
+ "format": "uuid",
467
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$"
468
+ },
469
+ "identity": {
470
+ "title": "Identity",
471
+ "description": "Participant identity information",
472
+ "type": "object",
473
+ "properties": {
474
+ "name": {
475
+ "title": "Identity Name",
476
+ "description": "Display name for the participant",
477
+ "examples": [
478
+ "EcoTech Solutions Inc.",
479
+ "Climate Action Corp"
480
+ ],
481
+ "type": "string",
482
+ "minLength": 1,
483
+ "maxLength": 100
484
+ },
485
+ "external_id": {
486
+ "title": "Identity External ID",
487
+ "description": "External identifier for the participant",
488
+ "examples": [
489
+ "ad44dd3f-f176-4b98-bf78-5ee6e77d0530",
490
+ "b2c4e6f8-a1b3-4c5d-9e8f-123456789abc"
491
+ ],
492
+ "type": "string",
493
+ "format": "uuid",
494
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$"
495
+ },
496
+ "external_url": {
497
+ "title": "Identity External URL",
498
+ "description": "External URL for the participant profile",
499
+ "examples": [
500
+ "https://explore.carrot.eco/document/ad44dd3f-f176-4b98-bf78-5ee6e77d0530",
501
+ "https://carrot.eco/whitepaper.pdf"
502
+ ],
503
+ "type": "string",
504
+ "format": "uri"
505
+ }
506
+ },
507
+ "required": [
508
+ "name",
509
+ "external_id",
510
+ "external_url"
511
+ ],
512
+ "additionalProperties": false
513
+ }
514
+ },
515
+ "required": [
516
+ "buyer_id"
517
+ ],
518
+ "additionalProperties": false
519
+ }
520
+ },
521
+ "required": [
522
+ "payer",
523
+ "receiver"
524
+ ],
525
+ "additionalProperties": false
526
+ },
527
+ "collections": {
528
+ "title": "Collections",
529
+ "description": "Collections included in the purchase",
530
+ "minItems": 1,
531
+ "type": "array",
532
+ "items": {
533
+ "title": "Collection",
534
+ "description": "Collection included in the purchase",
535
+ "type": "object",
536
+ "properties": {
537
+ "slug": {
538
+ "title": "Collection Slug",
539
+ "description": "URL-friendly identifier for a collection",
540
+ "examples": [
541
+ "bold-cold-start-carazinho",
542
+ "bold-brazil"
543
+ ],
544
+ "type": "string",
545
+ "minLength": 1,
546
+ "maxLength": 100,
547
+ "pattern": "^[a-z0-9-]+$"
548
+ },
549
+ "external_id": {
550
+ "title": "Collection External ID",
551
+ "description": "External identifier for the collection",
552
+ "examples": [
553
+ "ad44dd3f-f176-4b98-bf78-5ee6e77d0530",
554
+ "b2c4e6f8-a1b3-4c5d-9e8f-123456789abc"
555
+ ],
556
+ "type": "string",
557
+ "format": "uuid",
558
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$"
559
+ },
560
+ "name": {
561
+ "title": "Collection Name",
562
+ "description": "Display name of the collection",
563
+ "examples": [
564
+ "BOLD Cold Start - Carazinho",
565
+ "BOLD Brazil"
566
+ ],
567
+ "type": "string",
568
+ "minLength": 1,
569
+ "maxLength": 150
570
+ },
571
+ "external_url": {
572
+ "title": "Collection External URL",
573
+ "description": "External URL for the collection",
574
+ "examples": [
575
+ "https://explore.carrot.eco/document/ad44dd3f-f176-4b98-bf78-5ee6e77d0530",
576
+ "https://carrot.eco/whitepaper.pdf"
577
+ ],
578
+ "type": "string",
579
+ "format": "uri"
580
+ },
581
+ "uri": {
582
+ "title": "Collection URI",
583
+ "description": "IPFS URI for the collection metadata",
584
+ "examples": [
585
+ "ipfs://QmTy8w65yBXgyfG2ZBg5TrfB2hPjrDQH3RCQFJGkARStJb/mass-id-organic.png",
586
+ "ipfs://QmYjtig7VJQ6XsnUjqqJvj7QaMcCAwtrgNdahSiFofrE7o"
587
+ ],
588
+ "type": "string",
589
+ "minLength": 1,
590
+ "pattern": "^ipfs:\\/\\/[a-zA-Z0-9]+(\\/.*)?$"
591
+ },
592
+ "credit_amount": {
593
+ "title": "Collection Credit Amount",
594
+ "description": "Total credits purchased from this collection",
595
+ "examples": [
596
+ 0,
597
+ 45.2,
598
+ 72.5
599
+ ],
600
+ "type": "number",
601
+ "minimum": 0
602
+ }
603
+ },
604
+ "required": [
605
+ "slug",
606
+ "external_id",
607
+ "name",
608
+ "external_url",
609
+ "uri",
610
+ "credit_amount"
611
+ ],
612
+ "additionalProperties": false
613
+ }
614
+ },
615
+ "credits": {
616
+ "title": "Credits",
617
+ "description": "Credits included in the purchase",
618
+ "minItems": 1,
619
+ "type": "array",
620
+ "items": {
621
+ "title": "Credit",
622
+ "description": "Credit token included in the purchase",
623
+ "type": "object",
624
+ "properties": {
625
+ "slug": {
626
+ "title": "Credit Slug",
627
+ "description": "URL-friendly identifier for the credit",
628
+ "examples": [
629
+ "mass-id-123",
630
+ "recycled-plastic",
631
+ "organic-waste"
632
+ ],
633
+ "type": "string",
634
+ "minLength": 1,
635
+ "maxLength": 100,
636
+ "pattern": "^[a-z0-9-]+$"
637
+ },
638
+ "symbol": {
639
+ "title": "Credit Token Symbol",
640
+ "description": "Symbol of the credit token",
641
+ "examples": [
642
+ "CARBON",
643
+ "ORGANIC",
644
+ "C-CARB",
645
+ "C-BIOW"
646
+ ],
647
+ "type": "string",
648
+ "minLength": 1,
649
+ "maxLength": 10,
650
+ "pattern": "^[A-Z0-9-]+$"
651
+ },
652
+ "external_id": {
653
+ "title": "Credit External ID",
654
+ "description": "External identifier for the credit",
655
+ "examples": [
656
+ "ad44dd3f-f176-4b98-bf78-5ee6e77d0530",
657
+ "b2c4e6f8-a1b3-4c5d-9e8f-123456789abc"
658
+ ],
659
+ "type": "string",
660
+ "format": "uuid",
661
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$"
662
+ },
663
+ "external_url": {
664
+ "title": "Credit External URL",
665
+ "description": "External URL for the credit",
666
+ "examples": [
667
+ "https://explore.carrot.eco/document/ad44dd3f-f176-4b98-bf78-5ee6e77d0530",
668
+ "https://carrot.eco/whitepaper.pdf"
669
+ ],
670
+ "type": "string",
671
+ "format": "uri"
672
+ },
673
+ "uri": {
674
+ "title": "Credit URI",
675
+ "description": "IPFS URI for the credit details",
676
+ "examples": [
677
+ "ipfs://QmTy8w65yBXgyfG2ZBg5TrfB2hPjrDQH3RCQFJGkARStJb/mass-id-organic.png",
678
+ "ipfs://QmYjtig7VJQ6XsnUjqqJvj7QaMcCAwtrgNdahSiFofrE7o"
679
+ ],
680
+ "type": "string",
681
+ "minLength": 1,
682
+ "pattern": "^ipfs:\\/\\/[a-zA-Z0-9]+(\\/.*)?$"
683
+ },
684
+ "smart_contract": {
685
+ "title": "Smart Contract",
686
+ "description": "Smart contract details for on-chain references",
687
+ "type": "object",
688
+ "properties": {
689
+ "address": {
690
+ "title": "Smart Contract Address",
691
+ "description": "Address of the smart contract",
692
+ "examples": [
693
+ "0x1234567890abcdef1234567890abcdef12345678",
694
+ "0xabcdef1234567890abcdef1234567890abcdef12"
695
+ ],
696
+ "type": "string",
697
+ "pattern": "^0x[a-f0-9]{40}$"
698
+ },
699
+ "chain_id": {
700
+ "title": "Chain ID",
701
+ "description": "Blockchain network identifier",
702
+ "examples": [
703
+ 1,
704
+ 137,
705
+ 11155111
706
+ ],
707
+ "type": "integer",
708
+ "minimum": 1,
709
+ "maximum": 9007199254740991
710
+ },
711
+ "network_name": {
712
+ "title": "Blockchain Network Name",
713
+ "description": "Name of the blockchain network",
714
+ "examples": [
715
+ "Polygon",
716
+ "Ethereum mainnet",
717
+ "Sepolia"
718
+ ],
719
+ "type": "string",
720
+ "minLength": 1,
721
+ "maxLength": 100
722
+ }
723
+ },
724
+ "required": [
725
+ "address",
726
+ "chain_id",
727
+ "network_name"
728
+ ],
729
+ "additionalProperties": false
730
+ },
731
+ "purchase_amount": {
732
+ "title": "Credit Purchase Amount",
733
+ "description": "Total credits purchased for this credit type",
734
+ "examples": [
735
+ 0,
736
+ 45.2,
737
+ 72.5
738
+ ],
739
+ "type": "number",
740
+ "minimum": 0
741
+ },
742
+ "retirement_amount": {
743
+ "title": "Credit Retirement Amount",
744
+ "description": "Credits retired immediately for this credit type during purchase",
745
+ "examples": [
746
+ 0,
747
+ 45.2,
748
+ 72.5
749
+ ],
750
+ "type": "number",
751
+ "minimum": 0
752
+ }
753
+ },
754
+ "required": [
755
+ "slug",
756
+ "symbol",
757
+ "external_id",
758
+ "external_url",
759
+ "uri",
760
+ "smart_contract",
761
+ "purchase_amount"
762
+ ],
763
+ "additionalProperties": false
764
+ }
765
+ },
766
+ "certificates": {
767
+ "title": "Certificates",
768
+ "description": "Certificates involved in the purchase",
769
+ "minItems": 1,
770
+ "type": "array",
771
+ "items": {
772
+ "title": "Certificate",
773
+ "description": "Certificate associated with the purchase",
774
+ "type": "object",
775
+ "properties": {
776
+ "token_id": {
777
+ "title": "Certificate Token ID",
778
+ "description": "Token ID of the certificate",
779
+ "examples": [
780
+ "123",
781
+ "456789",
782
+ "1000000"
783
+ ],
784
+ "type": "string",
785
+ "minLength": 1,
786
+ "pattern": "^\\d+$"
787
+ },
788
+ "type": {
789
+ "title": "Certificate Type",
790
+ "description": "Type of certificate (e.g., GasID, RecycledID)",
791
+ "type": "string",
792
+ "enum": [
793
+ "GasID",
794
+ "RecycledID"
795
+ ]
796
+ },
797
+ "external_id": {
798
+ "title": "Certificate External ID",
799
+ "description": "External identifier for the certificate",
800
+ "examples": [
801
+ "ad44dd3f-f176-4b98-bf78-5ee6e77d0530",
802
+ "b2c4e6f8-a1b3-4c5d-9e8f-123456789abc"
803
+ ],
804
+ "type": "string",
805
+ "format": "uuid",
806
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$"
807
+ },
808
+ "external_url": {
809
+ "title": "Certificate External URL",
810
+ "description": "External URL for the certificate",
811
+ "examples": [
812
+ "https://explore.carrot.eco/document/ad44dd3f-f176-4b98-bf78-5ee6e77d0530",
813
+ "https://carrot.eco/whitepaper.pdf"
814
+ ],
815
+ "type": "string",
816
+ "format": "uri"
817
+ },
818
+ "uri": {
819
+ "title": "Certificate URI",
820
+ "description": "IPFS URI for the certificate metadata",
821
+ "examples": [
822
+ "ipfs://QmTy8w65yBXgyfG2ZBg5TrfB2hPjrDQH3RCQFJGkARStJb/mass-id-organic.png",
823
+ "ipfs://QmYjtig7VJQ6XsnUjqqJvj7QaMcCAwtrgNdahSiFofrE7o"
824
+ ],
825
+ "type": "string",
826
+ "minLength": 1,
827
+ "pattern": "^ipfs:\\/\\/[a-zA-Z0-9]+(\\/.*)?$"
828
+ },
829
+ "smart_contract": {
830
+ "title": "Smart Contract",
831
+ "description": "Smart contract details for on-chain references",
832
+ "type": "object",
833
+ "properties": {
834
+ "address": {
835
+ "title": "Smart Contract Address",
836
+ "description": "Address of the smart contract",
837
+ "examples": [
838
+ "0x1234567890abcdef1234567890abcdef12345678",
839
+ "0xabcdef1234567890abcdef1234567890abcdef12"
840
+ ],
841
+ "type": "string",
842
+ "pattern": "^0x[a-f0-9]{40}$"
843
+ },
844
+ "chain_id": {
845
+ "title": "Chain ID",
846
+ "description": "Blockchain network identifier",
847
+ "examples": [
848
+ 1,
849
+ 137,
850
+ 11155111
851
+ ],
852
+ "type": "integer",
853
+ "minimum": 1,
854
+ "maximum": 9007199254740991
855
+ },
856
+ "network_name": {
857
+ "title": "Blockchain Network Name",
858
+ "description": "Name of the blockchain network",
859
+ "examples": [
860
+ "Polygon",
861
+ "Ethereum mainnet",
862
+ "Sepolia"
863
+ ],
864
+ "type": "string",
865
+ "minLength": 1,
866
+ "maxLength": 100
867
+ }
868
+ },
869
+ "required": [
870
+ "address",
871
+ "chain_id",
872
+ "network_name"
873
+ ],
874
+ "additionalProperties": false
875
+ },
876
+ "collection_slug": {
877
+ "title": "Collection Slug",
878
+ "description": "Slug of the collection this certificate belongs to",
879
+ "examples": [
880
+ "bold-cold-start-carazinho",
881
+ "bold-brazil"
882
+ ],
883
+ "type": "string",
884
+ "minLength": 1,
885
+ "maxLength": 100,
886
+ "pattern": "^[a-z0-9-]+$"
887
+ },
888
+ "total_amount": {
889
+ "title": "Certificate Total Amount",
890
+ "description": "Total credits available in this certificate",
891
+ "examples": [
892
+ 0,
893
+ 45.2,
894
+ 72.5
895
+ ],
896
+ "type": "number",
897
+ "minimum": 0
898
+ },
899
+ "mass_id": {
900
+ "title": "MassID Reference with Smart Contract",
901
+ "description": "Reference to a MassID record including smart contract details",
902
+ "type": "object",
903
+ "properties": {
904
+ "external_id": {
905
+ "title": "MassID External ID",
906
+ "description": "Unique identifier for the MassID",
907
+ "examples": [
908
+ "ad44dd3f-f176-4b98-bf78-5ee6e77d0530",
909
+ "b2c4e6f8-a1b3-4c5d-9e8f-123456789abc"
910
+ ],
911
+ "type": "string",
912
+ "format": "uuid",
913
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$"
914
+ },
915
+ "token_id": {
916
+ "title": "MassID Token ID",
917
+ "description": "NFT token ID of the MassID",
918
+ "examples": [
919
+ "123",
920
+ "456789",
921
+ "1000000"
922
+ ],
923
+ "type": "string",
924
+ "minLength": 1,
925
+ "pattern": "^\\d+$"
926
+ },
927
+ "external_url": {
928
+ "title": "MassID External URL",
929
+ "description": "URL to view the MassID on Carrot Explorer",
930
+ "examples": [
931
+ "https://explore.carrot.eco/document/ad44dd3f-f176-4b98-bf78-5ee6e77d0530",
932
+ "https://carrot.eco/whitepaper.pdf"
933
+ ],
934
+ "type": "string",
935
+ "format": "uri"
936
+ },
937
+ "uri": {
938
+ "title": "MassID IPFS URI",
939
+ "description": "IPFS URI of the MassID record",
940
+ "examples": [
941
+ "ipfs://QmTy8w65yBXgyfG2ZBg5TrfB2hPjrDQH3RCQFJGkARStJb/mass-id-organic.png",
942
+ "ipfs://QmYjtig7VJQ6XsnUjqqJvj7QaMcCAwtrgNdahSiFofrE7o"
943
+ ],
944
+ "type": "string",
945
+ "minLength": 1,
946
+ "pattern": "^ipfs:\\/\\/[a-zA-Z0-9]+(\\/.*)?$"
947
+ },
948
+ "smart_contract": {
949
+ "title": "Smart Contract",
950
+ "description": "Smart contract details for on-chain references",
951
+ "type": "object",
952
+ "properties": {
953
+ "address": {
954
+ "title": "Smart Contract Address",
955
+ "description": "Address of the smart contract",
956
+ "examples": [
957
+ "0x1234567890abcdef1234567890abcdef12345678",
958
+ "0xabcdef1234567890abcdef1234567890abcdef12"
959
+ ],
960
+ "type": "string",
961
+ "pattern": "^0x[a-f0-9]{40}$"
962
+ },
963
+ "chain_id": {
964
+ "title": "Chain ID",
965
+ "description": "Blockchain network identifier",
966
+ "examples": [
967
+ 1,
968
+ 137,
969
+ 11155111
970
+ ],
971
+ "type": "integer",
972
+ "minimum": 1,
973
+ "maximum": 9007199254740991
974
+ },
975
+ "network_name": {
976
+ "title": "Blockchain Network Name",
977
+ "description": "Name of the blockchain network",
978
+ "examples": [
979
+ "Polygon",
980
+ "Ethereum mainnet",
981
+ "Sepolia"
982
+ ],
983
+ "type": "string",
984
+ "minLength": 1,
985
+ "maxLength": 100
986
+ }
987
+ },
988
+ "required": [
989
+ "address",
990
+ "chain_id",
991
+ "network_name"
992
+ ],
993
+ "additionalProperties": false
994
+ }
995
+ },
996
+ "required": [
997
+ "external_id",
998
+ "token_id",
999
+ "external_url",
1000
+ "uri",
1001
+ "smart_contract"
1002
+ ],
1003
+ "additionalProperties": false
1004
+ },
1005
+ "purchased_amount": {
1006
+ "title": "Certificate Purchased Amount",
1007
+ "description": "Credits purchased from this certificate",
1008
+ "examples": [
1009
+ 0,
1010
+ 45.2,
1011
+ 72.5
1012
+ ],
1013
+ "type": "number",
1014
+ "minimum": 0
1015
+ },
1016
+ "retired_amount": {
1017
+ "title": "Certificate Retired Amount",
1018
+ "description": "Credits retired from this certificate during the purchase (0 if none)",
1019
+ "examples": [
1020
+ 0,
1021
+ 45.2,
1022
+ 72.5
1023
+ ],
1024
+ "type": "number",
1025
+ "minimum": 0
1026
+ },
1027
+ "credit_slug": {
1028
+ "title": "Credit Slug",
1029
+ "description": "Slug of the credit type for this certificate",
1030
+ "examples": [
1031
+ "carbon",
1032
+ "organic"
1033
+ ],
1034
+ "type": "string",
1035
+ "minLength": 1,
1036
+ "maxLength": 100,
1037
+ "pattern": "^[a-z0-9-]+$"
1038
+ }
1039
+ },
1040
+ "required": [
1041
+ "token_id",
1042
+ "type",
1043
+ "external_id",
1044
+ "external_url",
1045
+ "uri",
1046
+ "smart_contract",
1047
+ "collection_slug",
1048
+ "total_amount",
1049
+ "mass_id",
1050
+ "purchased_amount",
1051
+ "retired_amount",
1052
+ "credit_slug"
1053
+ ],
1054
+ "additionalProperties": false
1055
+ }
1056
+ },
1057
+ "participant_rewards": {
1058
+ "title": "Participant Rewards",
1059
+ "description": "Rewards distributed to participants in the supply chain for this purchase",
1060
+ "minItems": 1,
1061
+ "type": "array",
1062
+ "items": {
1063
+ "title": "Participant Reward",
1064
+ "description": "Reward distribution for a participant",
1065
+ "type": "object",
1066
+ "properties": {
1067
+ "id_hash": {
1068
+ "title": "Participant ID Hash",
1069
+ "description": "Hash representing the participant identifier (SHA-256 hex string)",
1070
+ "examples": [
1071
+ "87f633634cc4b02f628685651f0a29b7bfa22a0bd841f725c6772dd00a58d489",
1072
+ "6e83b8e6373847bbdc056549bedda38dc88854ce41ba4fca11e0fc6ce3e07ef6"
1073
+ ],
1074
+ "type": "string",
1075
+ "pattern": "^[0-9a-fA-F]{64}$"
1076
+ },
1077
+ "participant_name": {
1078
+ "title": "Participant Name",
1079
+ "description": "Legal name of the participant receiving the reward",
1080
+ "examples": [
1081
+ "Enlatados Produção",
1082
+ "Eco Reciclagem",
1083
+ "Green Tech Corp"
1084
+ ],
1085
+ "type": "string",
1086
+ "minLength": 1,
1087
+ "maxLength": 100
1088
+ },
1089
+ "roles": {
1090
+ "title": "Participant Roles",
1091
+ "description": "Roles the participant has in the supply chain",
1092
+ "minItems": 1,
1093
+ "type": "array",
1094
+ "items": {
1095
+ "title": "Participant Role",
1096
+ "description": "Role that a participant plays in the waste management supply chain",
1097
+ "examples": [
1098
+ "Waste Generator",
1099
+ "Hauler",
1100
+ "Recycler"
1101
+ ],
1102
+ "type": "string",
1103
+ "minLength": 1,
1104
+ "maxLength": 100
1105
+ }
1106
+ },
1107
+ "usdc_amount": {
1108
+ "title": "USDC Reward Amount",
1109
+ "description": "USDC amount allocated to this participant",
1110
+ "examples": [
1111
+ 0,
1112
+ 45.2,
1113
+ 72.5
1114
+ ],
1115
+ "type": "number",
1116
+ "minimum": 0
1117
+ }
1118
+ },
1119
+ "required": [
1120
+ "id_hash",
1121
+ "participant_name",
1122
+ "roles",
1123
+ "usdc_amount"
1124
+ ],
1125
+ "additionalProperties": false
1126
+ }
1127
+ },
1128
+ "retirement": {
1129
+ "title": "Retirement",
1130
+ "description": "Immediate retirement details performed as part of purchase",
1131
+ "type": "object",
1132
+ "properties": {
1133
+ "beneficiary_id": {
1134
+ "title": "Retirement Beneficiary ID",
1135
+ "description": "UUID identifying the beneficiary of the retirement (bytes16 normalized to UUID)",
1136
+ "examples": [
1137
+ "ad44dd3f-f176-4b98-bf78-5ee6e77d0530",
1138
+ "b2c4e6f8-a1b3-4c5d-9e8f-123456789abc"
1139
+ ],
1140
+ "type": "string",
1141
+ "format": "uuid",
1142
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$"
1143
+ },
1144
+ "retirement_receipt": {
1145
+ "title": "Retirement Receipt Reference",
1146
+ "description": "Reference to the retirement receipt NFT",
1147
+ "type": "object",
1148
+ "properties": {
1149
+ "token_id": {
1150
+ "title": "Retirement Receipt Token ID",
1151
+ "description": "Token ID of the retirement receipt NFT",
1152
+ "examples": [
1153
+ "123",
1154
+ "456789",
1155
+ "1000000"
1156
+ ],
1157
+ "type": "string",
1158
+ "minLength": 1,
1159
+ "pattern": "^\\d+$"
1160
+ },
1161
+ "external_id": {
1162
+ "title": "Retirement Receipt External ID",
1163
+ "description": "External identifier for the retirement receipt",
1164
+ "examples": [
1165
+ "ad44dd3f-f176-4b98-bf78-5ee6e77d0530",
1166
+ "b2c4e6f8-a1b3-4c5d-9e8f-123456789abc"
1167
+ ],
1168
+ "type": "string",
1169
+ "format": "uuid",
1170
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$"
1171
+ },
1172
+ "external_url": {
1173
+ "title": "Retirement Receipt External URL",
1174
+ "description": "External URL for the retirement receipt",
1175
+ "examples": [
1176
+ "https://explore.carrot.eco/document/ad44dd3f-f176-4b98-bf78-5ee6e77d0530",
1177
+ "https://carrot.eco/whitepaper.pdf"
1178
+ ],
1179
+ "type": "string",
1180
+ "format": "uri"
1181
+ },
1182
+ "uri": {
1183
+ "title": "Retirement Receipt URI",
1184
+ "description": "IPFS URI for the retirement receipt metadata",
1185
+ "examples": [
1186
+ "ipfs://QmTy8w65yBXgyfG2ZBg5TrfB2hPjrDQH3RCQFJGkARStJb/mass-id-organic.png",
1187
+ "ipfs://QmYjtig7VJQ6XsnUjqqJvj7QaMcCAwtrgNdahSiFofrE7o"
1188
+ ],
1189
+ "type": "string",
1190
+ "minLength": 1,
1191
+ "pattern": "^ipfs:\\/\\/[a-zA-Z0-9]+(\\/.*)?$"
1192
+ },
1193
+ "smart_contract": {
1194
+ "title": "Smart Contract",
1195
+ "description": "Smart contract details for on-chain references",
1196
+ "type": "object",
1197
+ "properties": {
1198
+ "address": {
1199
+ "title": "Smart Contract Address",
1200
+ "description": "Address of the smart contract",
1201
+ "examples": [
1202
+ "0x1234567890abcdef1234567890abcdef12345678",
1203
+ "0xabcdef1234567890abcdef1234567890abcdef12"
1204
+ ],
1205
+ "type": "string",
1206
+ "pattern": "^0x[a-f0-9]{40}$"
1207
+ },
1208
+ "chain_id": {
1209
+ "title": "Chain ID",
1210
+ "description": "Blockchain network identifier",
1211
+ "examples": [
1212
+ 1,
1213
+ 137,
1214
+ 11155111
1215
+ ],
1216
+ "type": "integer",
1217
+ "minimum": 1,
1218
+ "maximum": 9007199254740991
1219
+ },
1220
+ "network_name": {
1221
+ "title": "Blockchain Network Name",
1222
+ "description": "Name of the blockchain network",
1223
+ "examples": [
1224
+ "Polygon",
1225
+ "Ethereum mainnet",
1226
+ "Sepolia"
1227
+ ],
1228
+ "type": "string",
1229
+ "minLength": 1,
1230
+ "maxLength": 100
1231
+ }
1232
+ },
1233
+ "required": [
1234
+ "address",
1235
+ "chain_id",
1236
+ "network_name"
1237
+ ],
1238
+ "additionalProperties": false
1239
+ }
1240
+ },
1241
+ "required": [
1242
+ "token_id",
1243
+ "external_id",
1244
+ "external_url",
1245
+ "uri",
1246
+ "smart_contract"
1247
+ ],
1248
+ "additionalProperties": false
1249
+ }
1250
+ },
1251
+ "required": [
1252
+ "beneficiary_id"
1253
+ ],
1254
+ "additionalProperties": false
1255
+ }
1256
+ },
1257
+ "required": [
1258
+ "summary",
1259
+ "parties",
1260
+ "collections",
1261
+ "credits",
1262
+ "certificates",
1263
+ "participant_rewards"
1264
+ ],
1265
+ "additionalProperties": false
1266
+ },
1267
+ "blockchain": {
1268
+ "title": "Blockchain Information",
1269
+ "description": "Blockchain-specific information for the NFT",
1270
+ "type": "object",
1271
+ "properties": {
1272
+ "smart_contract_address": {
1273
+ "title": "Smart Contract Address",
1274
+ "description": "A valid Ethereum address in hexadecimal format",
1275
+ "examples": [
1276
+ "0x1234567890abcdef1234567890abcdef12345678",
1277
+ "0xabcdef1234567890abcdef1234567890abcdef12"
1278
+ ],
1279
+ "type": "string",
1280
+ "pattern": "^0x[a-f0-9]{40}$"
1281
+ },
1282
+ "chain_id": {
1283
+ "title": "Chain ID",
1284
+ "description": "Blockchain chain ID",
1285
+ "examples": [
1286
+ 1,
1287
+ 137,
1288
+ 11155111
1289
+ ],
1290
+ "type": "integer",
1291
+ "minimum": 1,
1292
+ "maximum": 9007199254740991
1293
+ },
1294
+ "network_name": {
1295
+ "title": "Network Name",
1296
+ "description": "Name of the blockchain network",
1297
+ "type": "string",
1298
+ "minLength": 5,
1299
+ "maxLength": 100
1300
+ },
1301
+ "token_id": {
1302
+ "title": "Token ID",
1303
+ "description": "NFT token ID",
1304
+ "examples": [
1305
+ "123",
1306
+ "456789",
1307
+ "1000000"
1308
+ ],
1309
+ "type": "string",
1310
+ "minLength": 1,
1311
+ "pattern": "^\\d+$"
1312
+ }
1313
+ },
1314
+ "required": [
1315
+ "smart_contract_address",
1316
+ "chain_id",
1317
+ "network_name",
1318
+ "token_id"
1319
+ ],
1320
+ "additionalProperties": false
1321
+ },
1322
+ "name": {
1323
+ "title": "NFT Name",
1324
+ "description": "Full display name for this NFT, including extra context",
1325
+ "examples": [
1326
+ "MassID #123 • Organic • 3.0t",
1327
+ "RecycledID #456 • Plastic • 2.5t",
1328
+ "GasID #789 • Methane • 1000 m³"
1329
+ ],
1330
+ "type": "string",
1331
+ "minLength": 1,
1332
+ "maxLength": 100
1333
+ },
1334
+ "short_name": {
1335
+ "title": "Short Name",
1336
+ "description": "Compact name for UI summaries, tables, or tooltips",
1337
+ "examples": [
1338
+ "MassID #123",
1339
+ "RecycledID #456",
1340
+ "GasID #789"
1341
+ ],
1342
+ "type": "string",
1343
+ "minLength": 1,
1344
+ "maxLength": 50
1345
+ },
1346
+ "description": {
1347
+ "title": "Description",
1348
+ "description": "Human-readable summary of the NFT's role and context. Ideally, maximum 300 characters.",
1349
+ "examples": [
1350
+ "This MassID represents 3 metric tons of organic food waste from Enlatados Produção, tracked through complete chain of custody from generation to composting.",
1351
+ "This RecycledID represents 2.5 metric tons of recycled plastic bottles processed by Green Solutions Ltd."
1352
+ ],
1353
+ "type": "string",
1354
+ "minLength": 10,
1355
+ "maxLength": 500
1356
+ },
1357
+ "image": {
1358
+ "title": "Image URI",
1359
+ "description": "IPFS URI pointing to the preview image",
1360
+ "examples": [
1361
+ "ipfs://QmTy8w65yBXgyfG2ZBg5TrfB2hPjrDQH3RCQFJGkARStJb/mass-id-organic.png",
1362
+ "ipfs://QmYjtig7VJQ6XsnUjqqJvj7QaMcCAwtrgNdahSiFofrE7o"
1363
+ ],
1364
+ "type": "string",
1365
+ "minLength": 1,
1366
+ "pattern": "^ipfs:\\/\\/[a-zA-Z0-9]+(\\/.*)?$"
1367
+ },
1368
+ "background_color": {
1369
+ "title": "Background Color",
1370
+ "description": "Hex color code for marketplace background display",
1371
+ "examples": [
1372
+ "#2D5A27",
1373
+ "#FF5733",
1374
+ "#1E90FF"
1375
+ ],
1376
+ "type": "string",
1377
+ "minLength": 1,
1378
+ "pattern": "^#[0-9A-F]{6}$"
1379
+ },
1380
+ "animation_url": {
1381
+ "title": "Animation URL",
1382
+ "description": "IPFS URI pointing to an animated or interactive media file",
1383
+ "examples": [
1384
+ "ipfs://QmAnimation123/mass-id-animation.mp4",
1385
+ "ipfs://QmInteractive456/recycled-visualization.webm"
1386
+ ],
1387
+ "type": "string",
1388
+ "minLength": 1,
1389
+ "pattern": "^ipfs:\\/\\/[a-zA-Z0-9]+(\\/.*)?$"
1390
+ },
1391
+ "external_links": {
1392
+ "title": "External Links",
1393
+ "description": "Optional list of public resource links with labels",
1394
+ "examples": [
1395
+ [
1396
+ {
1397
+ "label": "Carrot Explorer",
1398
+ "url": "https://explore.carrot.eco/document/ad44dd3f-f176-4b98-bf78-5ee6e77d0530",
1399
+ "description": "Complete chain of custody and audit trail"
1400
+ },
1401
+ {
1402
+ "label": "Carrot White Paper",
1403
+ "url": "https://carrot.eco/whitepaper.pdf",
1404
+ "description": "Carrot Foundation technical and impact white paper"
1405
+ }
1406
+ ]
1407
+ ],
1408
+ "maxItems": 10,
1409
+ "type": "array",
1410
+ "items": {
1411
+ "title": "External Link",
1412
+ "description": "External link with label and description",
1413
+ "type": "object",
1414
+ "properties": {
1415
+ "label": {
1416
+ "title": "Link Label",
1417
+ "description": "Display name for the external link",
1418
+ "type": "string",
1419
+ "minLength": 1,
1420
+ "maxLength": 50
1421
+ },
1422
+ "url": {
1423
+ "title": "Link URL",
1424
+ "description": "Direct URI to the linked resource",
1425
+ "type": "string",
1426
+ "format": "uri"
1427
+ },
1428
+ "description": {
1429
+ "title": "Link Description",
1430
+ "description": "Optional context about what the link provides",
1431
+ "type": "string",
1432
+ "minLength": 10,
1433
+ "maxLength": 100
1434
+ }
1435
+ },
1436
+ "required": [
1437
+ "label",
1438
+ "url"
1439
+ ],
1440
+ "additionalProperties": false
1441
+ }
1442
+ },
1443
+ "attributes": {
1444
+ "title": "Credit Purchase Receipt NFT Attribute Array",
1445
+ "description": "Attributes for credit purchase receipts including per-credit breakdowns, totals, receiver, purchase date, and per-collection amounts. Attributes must have unique trait types.",
1446
+ "minItems": 5,
1447
+ "type": "array",
1448
+ "items": {
1449
+ "anyOf": [
1450
+ {
1451
+ "title": "Credit Attribute",
1452
+ "description": "Attribute representing purchased amount per credit token symbol",
1453
+ "type": "object",
1454
+ "properties": {
1455
+ "trait_type": {
1456
+ "title": "Credit Token Symbol",
1457
+ "description": "Symbol of the credit token (e.g., C-CARB, C-BIOW)",
1458
+ "examples": [
1459
+ "C-CARB",
1460
+ "C-BIOW"
1461
+ ],
1462
+ "type": "string",
1463
+ "minLength": 1,
1464
+ "maxLength": 10,
1465
+ "pattern": "^[A-Z0-9-]+$"
1466
+ },
1467
+ "value": {
1468
+ "title": "Credit Amount",
1469
+ "description": "Amount of credits purchased for the token symbol",
1470
+ "examples": [
1471
+ 0,
1472
+ 45.2,
1473
+ 72.5
1474
+ ],
1475
+ "type": "number",
1476
+ "minimum": 0
1477
+ },
1478
+ "display_type": {
1479
+ "type": "string",
1480
+ "const": "number"
1481
+ },
1482
+ "max_value": {
1483
+ "title": "Max Value",
1484
+ "description": "Maximum possible value for numeric traits",
1485
+ "examples": [
1486
+ 0,
1487
+ 45.2,
1488
+ 72.5
1489
+ ],
1490
+ "type": "number",
1491
+ "minimum": 0
1492
+ }
1493
+ },
1494
+ "required": [
1495
+ "trait_type",
1496
+ "value",
1497
+ "display_type"
1498
+ ],
1499
+ "additionalProperties": false
1500
+ },
1501
+ {
1502
+ "title": "Total Credits Purchased Attribute",
1503
+ "description": "Aggregate credits purchased attribute",
1504
+ "type": "object",
1505
+ "properties": {
1506
+ "trait_type": {
1507
+ "type": "string",
1508
+ "const": "Total Credits Purchased"
1509
+ },
1510
+ "value": {
1511
+ "title": "Total Credits Purchased",
1512
+ "description": "Total number of credits purchased across all tokens",
1513
+ "examples": [
1514
+ 0,
1515
+ 45.2,
1516
+ 72.5
1517
+ ],
1518
+ "type": "number",
1519
+ "minimum": 0
1520
+ },
1521
+ "display_type": {
1522
+ "type": "string",
1523
+ "const": "number"
1524
+ },
1525
+ "max_value": {
1526
+ "title": "Max Value",
1527
+ "description": "Maximum possible value for numeric traits",
1528
+ "examples": [
1529
+ 0,
1530
+ 45.2,
1531
+ 72.5
1532
+ ],
1533
+ "type": "number",
1534
+ "minimum": 0
1535
+ }
1536
+ },
1537
+ "required": [
1538
+ "trait_type",
1539
+ "value",
1540
+ "display_type"
1541
+ ],
1542
+ "additionalProperties": false
1543
+ },
1544
+ {
1545
+ "title": "Total USDC Amount Attribute",
1546
+ "description": "Aggregate USDC amount attribute",
1547
+ "type": "object",
1548
+ "properties": {
1549
+ "trait_type": {
1550
+ "type": "string",
1551
+ "const": "Total USDC Amount"
1552
+ },
1553
+ "value": {
1554
+ "title": "Total USDC Amount",
1555
+ "description": "Total USDC amount paid for the purchase",
1556
+ "examples": [
1557
+ 0,
1558
+ 45.2,
1559
+ 72.5
1560
+ ],
1561
+ "type": "number",
1562
+ "minimum": 0
1563
+ },
1564
+ "display_type": {
1565
+ "type": "string",
1566
+ "const": "number"
1567
+ },
1568
+ "max_value": {
1569
+ "title": "Max Value",
1570
+ "description": "Maximum possible value for numeric traits",
1571
+ "examples": [
1572
+ 0,
1573
+ 45.2,
1574
+ 72.5
1575
+ ],
1576
+ "type": "number",
1577
+ "minimum": 0
1578
+ }
1579
+ },
1580
+ "required": [
1581
+ "trait_type",
1582
+ "value",
1583
+ "display_type"
1584
+ ],
1585
+ "additionalProperties": false
1586
+ },
1587
+ {
1588
+ "title": "Purchase Date Attribute",
1589
+ "description": "Purchase date attribute using Unix timestamp in milliseconds",
1590
+ "type": "object",
1591
+ "properties": {
1592
+ "trait_type": {
1593
+ "type": "string",
1594
+ "const": "Purchase Date"
1595
+ },
1596
+ "value": {
1597
+ "title": "Purchase Date",
1598
+ "description": "Unix timestamp in milliseconds when the purchase was completed",
1599
+ "examples": [
1600
+ 1704067200000,
1601
+ 1735689600000,
1602
+ 1762371245149
1603
+ ],
1604
+ "type": "integer",
1605
+ "exclusiveMinimum": 0,
1606
+ "maximum": 9007199254740991
1607
+ },
1608
+ "display_type": {
1609
+ "type": "string",
1610
+ "const": "date"
1611
+ },
1612
+ "max_value": {
1613
+ "title": "Max Value",
1614
+ "description": "Maximum possible value for numeric traits",
1615
+ "examples": [
1616
+ 0,
1617
+ 45.2,
1618
+ 72.5
1619
+ ],
1620
+ "type": "number",
1621
+ "minimum": 0
1622
+ }
1623
+ },
1624
+ "required": [
1625
+ "trait_type",
1626
+ "value",
1627
+ "display_type"
1628
+ ],
1629
+ "additionalProperties": false
1630
+ },
1631
+ {
1632
+ "title": "Certificates Purchased Attribute",
1633
+ "description": "Attribute representing how many certificates were purchased",
1634
+ "type": "object",
1635
+ "properties": {
1636
+ "trait_type": {
1637
+ "type": "string",
1638
+ "const": "Certificates Purchased"
1639
+ },
1640
+ "value": {
1641
+ "title": "Certificates Purchased",
1642
+ "description": "Total number of certificates purchased",
1643
+ "examples": [
1644
+ 1,
1645
+ 123,
1646
+ 456
1647
+ ],
1648
+ "type": "integer",
1649
+ "minimum": 1,
1650
+ "maximum": 9007199254740991
1651
+ },
1652
+ "display_type": {
1653
+ "type": "string",
1654
+ "const": "number"
1655
+ },
1656
+ "max_value": {
1657
+ "title": "Max Value",
1658
+ "description": "Maximum possible value for numeric traits",
1659
+ "examples": [
1660
+ 0,
1661
+ 45.2,
1662
+ 72.5
1663
+ ],
1664
+ "type": "number",
1665
+ "minimum": 0
1666
+ }
1667
+ },
1668
+ "required": [
1669
+ "trait_type",
1670
+ "value",
1671
+ "display_type"
1672
+ ],
1673
+ "additionalProperties": false
1674
+ },
1675
+ {
1676
+ "title": "Receiver Attribute",
1677
+ "description": "Attribute containing the receiver display name",
1678
+ "type": "object",
1679
+ "properties": {
1680
+ "trait_type": {
1681
+ "type": "string",
1682
+ "const": "Receiver"
1683
+ },
1684
+ "value": {
1685
+ "title": "Receiver",
1686
+ "description": "Organization or individual receiving the credits from the purchase",
1687
+ "examples": [
1688
+ "EcoTech Solutions Inc."
1689
+ ],
1690
+ "type": "string",
1691
+ "minLength": 1,
1692
+ "maxLength": 100
1693
+ }
1694
+ },
1695
+ "required": [
1696
+ "trait_type",
1697
+ "value"
1698
+ ],
1699
+ "additionalProperties": false
1700
+ },
1701
+ {
1702
+ "title": "Collection Attribute",
1703
+ "description": "Attribute representing the amount of credits purchased from a collection",
1704
+ "type": "object",
1705
+ "properties": {
1706
+ "trait_type": {
1707
+ "title": "Collection Name",
1708
+ "description": "Display name of the collection",
1709
+ "examples": [
1710
+ "BOLD Cold Start - Carazinho",
1711
+ "BOLD Brazil"
1712
+ ],
1713
+ "type": "string",
1714
+ "minLength": 1,
1715
+ "maxLength": 150
1716
+ },
1717
+ "value": {
1718
+ "title": "Credits from Collection",
1719
+ "description": "Amount of credits purchased from the collection",
1720
+ "examples": [
1721
+ 0,
1722
+ 45.2,
1723
+ 72.5
1724
+ ],
1725
+ "type": "number",
1726
+ "minimum": 0
1727
+ },
1728
+ "display_type": {
1729
+ "type": "string",
1730
+ "const": "number"
1731
+ },
1732
+ "max_value": {
1733
+ "title": "Max Value",
1734
+ "description": "Maximum possible value for numeric traits",
1735
+ "examples": [
1736
+ 0,
1737
+ 45.2,
1738
+ 72.5
1739
+ ],
1740
+ "type": "number",
1741
+ "minimum": 0
1742
+ }
1743
+ },
1744
+ "required": [
1745
+ "trait_type",
1746
+ "value",
1747
+ "display_type"
1748
+ ],
1749
+ "additionalProperties": false
1750
+ }
1751
+ ]
1752
+ }
1753
+ }
1754
+ },
1755
+ "required": [
1756
+ "$schema",
1757
+ "schema",
1758
+ "created_at",
1759
+ "external_id",
1760
+ "external_url",
1761
+ "original_content_hash",
1762
+ "content_hash",
1763
+ "data",
1764
+ "blockchain",
1765
+ "name",
1766
+ "short_name",
1767
+ "description",
1768
+ "image",
1769
+ "attributes"
1770
+ ],
1771
+ "additionalProperties": false
1772
+ }