localgreenchain/docs/api/transport-api.md
Claude ac93368e9a
Add seed-to-seed transport tracking, demand forecasting, and vertical farming systems
This comprehensive update implements:

Transport Tracking System:
- Complete seed-to-seed lifecycle tracking with 9 event types
- TransportChain blockchain for immutable transport records
- Carbon footprint calculation per transport method
- Food miles tracking with Haversine distance calculation
- QR code generation for full traceability

Demand Forecasting System:
- Consumer preference registration and aggregation
- Regional demand signal generation
- Supply gap identification and market matching
- Grower planting recommendations with risk assessment
- Seasonal planning integration

Vertical Farming Module:
- Multi-zone facility management
- Environmental control systems (HVAC, CO2, humidity, lighting)
- Growing recipes with stage-based environment targets
- Crop batch tracking with health scoring
- Farm analytics generation

Documentation:
- Complete docs/ folder structure for Turborepo
- Seed-to-seed transport concept documentation
- Demand forecasting and seasonal planning guides
- System architecture and user blockchain design
- Transport API reference
- Vertical farming integration guide

Agent Report:
- AGENT_REPORT.md with 5 parallel agent tasks for continued development
- API routes implementation task
- UI components task
- Vertical farming pages task
- Testing suite task
- Documentation completion task
2025-11-22 18:23:08 +00:00

476 lines
9.3 KiB
Markdown

# Transport API Reference
The Transport API enables seed-to-seed tracking of all plant movement and transformation events within the LocalGreenChain ecosystem.
## Base URL
```
Development: http://localhost:3001/api/transport
Production: https://api.localgreenchain.org/transport
```
## Authentication
All transport endpoints require authentication:
```http
Authorization: Bearer <user_token>
X-Wallet-Address: <wallet_address>
```
## Endpoints
### Record Seed Acquisition
Record the acquisition of seeds from any source.
```http
POST /api/transport/seed-acquisition
Content-Type: application/json
{
"seedBatchId": "batch-2025-001",
"sourceType": "seed_bank",
"species": "Solanum lycopersicum",
"variety": "Cherokee Purple",
"quantity": 50,
"quantityUnit": "seeds",
"geneticLineageId": "lineage-tomato-cp-001",
"generation": 0,
"fromLocation": {
"latitude": 40.7128,
"longitude": -74.0060,
"locationType": "seed_bank",
"facilityName": "Baker Creek Seeds"
},
"toLocation": {
"latitude": 40.7589,
"longitude": -73.9851,
"locationType": "farm",
"facilityName": "Urban Farm NYC"
},
"transportMethod": "local_delivery",
"certifications": ["organic", "heirloom"]
}
```
**Response:**
```json
{
"success": true,
"event": {
"id": "evt-seed-acq-123",
"timestamp": "2025-01-15T10:30:00Z",
"eventType": "seed_acquisition",
"status": "verified"
},
"block": {
"index": 5,
"hash": "0000abc123...",
"carbonFootprintKg": 0.02,
"foodMiles": 5.2
}
}
```
---
### Record Planting
Record when seeds are planted.
```http
POST /api/transport/planting
Content-Type: application/json
{
"seedBatchId": "batch-2025-001",
"plantIds": ["plant-001", "plant-002", "plant-003"],
"plantingMethod": "transplant",
"quantityPlanted": 25,
"growingEnvironment": "vertical_farm",
"location": {
"latitude": 40.7589,
"longitude": -73.9851,
"locationType": "vertical_farm",
"facilityName": "Urban Farm NYC"
},
"expectedHarvestDate": "2025-03-15T00:00:00Z"
}
```
**Response:**
```json
{
"success": true,
"event": {
"id": "evt-planting-124",
"timestamp": "2025-01-20T08:00:00Z",
"eventType": "planting",
"plantIds": ["plant-001", "plant-002", "plant-003"]
},
"block": {
"index": 6,
"hash": "0000def456..."
}
}
```
---
### Record Growing Transport
Record plant movement during growing (transplanting, relocating).
```http
POST /api/transport/growing
Content-Type: application/json
{
"plantIds": ["plant-001", "plant-002"],
"reason": "transplant",
"plantStage": "seedling",
"handlingMethod": "potted",
"fromLocation": {
"latitude": 40.7589,
"longitude": -73.9851,
"locationType": "greenhouse",
"facilityName": "Seedling House A"
},
"toLocation": {
"latitude": 40.7589,
"longitude": -73.9852,
"locationType": "vertical_farm",
"facilityName": "Main Growing Tower"
},
"transportMethod": "walking",
"rootDisturbance": "minimal",
"acclimatizationRequired": true,
"acclimatizationDays": 3
}
```
---
### Record Harvest
Record harvest events with yield data.
```http
POST /api/transport/harvest
Content-Type: application/json
{
"plantIds": ["plant-001", "plant-002", "plant-003"],
"harvestBatchId": "harvest-2025-050",
"harvestType": "full",
"produceType": "tomatoes",
"grossWeight": 15.5,
"netWeight": 14.2,
"weightUnit": "kg",
"qualityGrade": "A",
"packagingType": "compostable_clamshell",
"temperatureRequired": {
"min": 10,
"max": 15,
"optimal": 12,
"unit": "celsius"
},
"shelfLifeHours": 168,
"seedsSaved": true,
"seedBatchIdCreated": "batch-2025-002"
}
```
**Response:**
```json
{
"success": true,
"event": {
"id": "evt-harvest-125",
"timestamp": "2025-03-15T06:00:00Z",
"eventType": "harvest",
"harvestBatchId": "harvest-2025-050",
"netWeight": 14.2
},
"block": {
"index": 25,
"hash": "0000ghi789...",
"carbonFootprintKg": 0.1
},
"seedBatch": {
"id": "batch-2025-002",
"parentPlants": ["plant-001", "plant-002", "plant-003"],
"generation": 1
}
}
```
---
### Record Distribution
Record movement through distribution chain.
```http
POST /api/transport/distribution
Content-Type: application/json
{
"batchIds": ["harvest-2025-050"],
"destinationType": "consumer",
"fromLocation": {
"latitude": 40.7589,
"longitude": -73.9851,
"locationType": "vertical_farm"
},
"toLocation": {
"latitude": 40.7614,
"longitude": -73.9776,
"locationType": "consumer"
},
"transportMethod": "bicycle",
"orderId": "order-2025-1234",
"customerType": "individual",
"deliveryWindow": {
"start": "2025-03-15T14:00:00Z",
"end": "2025-03-15T18:00:00Z"
}
}
```
---
### Record Seed Saving
Record seed saving from harvested plants.
```http
POST /api/transport/seed-saving
Content-Type: application/json
{
"parentPlantIds": ["plant-001", "plant-002"],
"newSeedBatchId": "batch-2025-003",
"collectionMethod": "fermentation",
"seedCount": 200,
"seedWeight": 15,
"seedWeightUnit": "grams",
"storageConditions": {
"temperature": 10,
"humidity": 40,
"lightExposure": "dark",
"containerType": "vacuum_sealed",
"desiccant": true,
"estimatedViability": 5
},
"newGenerationNumber": 2,
"availableForSharing": true,
"sharingTerms": "trade"
}
```
---
### Record Seed Sharing
Record when seeds are shared with others.
```http
POST /api/transport/seed-sharing
Content-Type: application/json
{
"seedBatchId": "batch-2025-003",
"quantityShared": 25,
"quantityUnit": "seeds",
"sharingType": "trade",
"tradeDetails": "Traded for 25 basil seeds",
"recipientId": "user-xyz-456",
"fromLocation": {...},
"toLocation": {...},
"recipientAgreement": true,
"growingCommitment": "Will grow and report back",
"reportBackRequired": true
}
```
---
## Query Endpoints
### Get Plant Journey
Get complete transport history for a plant.
```http
GET /api/transport/journey/:plantId
```
**Response:**
```json
{
"plantId": "plant-001",
"seedBatchOrigin": "batch-2025-001",
"currentCustodian": "user-abc-123",
"currentLocation": {
"latitude": 40.7614,
"longitude": -73.9776,
"locationType": "consumer"
},
"currentStage": "post_harvest",
"events": [
{
"eventType": "seed_acquisition",
"timestamp": "2025-01-15T10:30:00Z",
"fromLocation": {...},
"toLocation": {...}
},
{
"eventType": "planting",
"timestamp": "2025-01-20T08:00:00Z",
...
},
...
],
"totalFoodMiles": 12.5,
"totalCarbonKg": 0.35,
"daysInTransit": 2,
"daysGrowing": 54,
"generation": 1,
"ancestorPlantIds": ["parent-plant-001"],
"descendantSeedBatches": ["batch-2025-003"]
}
```
---
### Get Environmental Impact
Get carbon footprint and food miles for a user.
```http
GET /api/transport/footprint/:userId
```
**Response:**
```json
{
"totalCarbonKg": 15.5,
"totalFoodMiles": 250,
"carbonPerKgProduce": 0.25,
"milesPerKgProduce": 4.0,
"breakdownByMethod": {
"bicycle": { "distance": 50, "carbon": 0 },
"electric_vehicle": { "distance": 150, "carbon": 3.0 },
"walking": { "distance": 50, "carbon": 0 }
},
"breakdownByEventType": {
"seed_acquisition": { "count": 5, "carbon": 0.5 },
"distribution": { "count": 50, "carbon": 10.0 },
...
},
"comparisonToConventional": {
"carbonSaved": 140.5,
"milesSaved": 74750,
"percentageReduction": 90
}
}
```
---
### Verify Block
Verify a transport block's integrity.
```http
GET /api/transport/verify/:blockHash
```
**Response:**
```json
{
"valid": true,
"block": {
"index": 25,
"hash": "0000ghi789...",
"previousHash": "0000fgh678...",
"timestamp": "2025-03-15T06:00:00Z"
},
"chainValid": true,
"crossReferences": [
{
"userId": "user-xyz-456",
"blockIndex": 12,
"type": "receiver",
"verified": true
}
]
}
```
---
### Generate QR Code
Generate QR code data for a plant or batch.
```http
GET /api/transport/qr/:plantId
```
**Response:**
```json
{
"plantId": "plant-001",
"blockchainAddress": "0x1234567890abcdef...",
"quickLookupUrl": "https://localgreenchain.org/track/plant-001",
"lineageHash": "a1b2c3d4e5f6...",
"currentCustodian": "user-abc-123",
"lastEventType": "distribution",
"lastEventTimestamp": "2025-03-15T14:30:00Z",
"verificationCode": "A1B2C3D4",
"qrCodeImage": "data:image/png;base64,..."
}
```
---
## Error Codes
| Code | Message | Description |
|------|---------|-------------|
| 400 | Invalid request | Missing or invalid parameters |
| 401 | Unauthorized | Invalid or missing auth token |
| 403 | Forbidden | Not authorized for this resource |
| 404 | Not found | Plant/batch/block not found |
| 409 | Conflict | Duplicate event or chain conflict |
| 422 | Validation error | Data validation failed |
| 500 | Server error | Internal server error |
## Rate Limits
| Endpoint Type | Limit | Window |
|---------------|-------|--------|
| Read (GET) | 100 | per minute |
| Write (POST) | 20 | per minute |
| Batch operations | 5 | per minute |
## Webhooks
Subscribe to transport events:
```http
POST /api/transport/webhooks
Content-Type: application/json
{
"url": "https://your-server.com/webhook",
"events": ["seed_acquisition", "harvest", "distribution"],
"filters": {
"plantIds": ["plant-001", "plant-002"],
"userId": "user-abc-123"
}
}
```