@carrot-foundation/schemas 0.1.37 → 0.1.39

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