CropSense

Search documentation

Search for a command to run...

API Reference

YieldRank

Credit-risk scoring for farms — submit scores, and get repayment capacity, recommended loan limits, and portfolio farm intelligence.

post/yieldrank/score

Submit a farm for YieldRank scoring

Requires an Authorization: Bearer header.

Request body

farm_idstringrequired
field_idstringoptional
crop_typestringoptional
scoring_contextenum<string>optional
loan_referencestringoptional
async_modebooleanoptional
as_ofstring<date>optional

Response 200

score_idstringrequired
cropsense_score_idstringoptional
farm_idstringrequired
portfolio_idstringoptional
statusenum<string>optional
scoreintegerrequired
raw_scoreintegeroptional
risk_bandstringrequired
risk_band_labelstringoptional
confidence_levelstringoptional
data_tierstringoptional
crop_typestringoptional
scoring_contextstringoptional
scoring_scopestringoptional
score_versionstringoptional
scored_atstring<date-time>required
next_review_datestring<date>optional
score_inputs_snapshotScoreInputsSnapshotoptional
data_completenessDataCompletenessDetailoptional
pillar_scoresPillarScoresoptional
score_breakdownScoreContributionsoptional
key_risk_factorsRiskFactor[]optional
recommendationsstring[]optional
loan_referencestringoptional
farmer_idstringoptional
farmer_namestringoptional
farm_namestringoptional
fields_assessedFieldAssessedItem[]optional
requested_amountstringoptional
loan_currencystringoptional
loan_contextLoanContextoptional
adverse_action_factorsAdverseActionFactor[]optional
auditAuditTrailoptional
POST /yieldrank/score
curl -X POST "https://api.cropsense.africa/yieldrank/score" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "farm_id": "3fa2c9e1-6b3a-4d2e-9c11-4a8e5f9d2b7a",
    "field_id": "8b6e1a2f-2d4c-4e9a-9b0f-1c7d3e5a6f42",
    "crop_type": "crop_type",
    "scoring_context": "credit_origination",
    "loan_reference": "loan_reference",
    "async_mode": false,
    "as_of": "2026-06-15"
  }'
Example response · 200
{
  "score_id": "4b8d2f6a-1c9e-4a3d-8f5b-2e7c6a9d0f1b",
  "cropsense_score_id": "cropsense_score_id",
  "farm_id": "3fa2c9e1-6b3a-4d2e-9c11-4a8e5f9d2b7a",
  "portfolio_id": "portfolio_id",
  "status": "pending",
  "score": 1,
  "raw_score": 1,
  "risk_band": "risk_band",
  "risk_band_label": "risk_band_label",
  "confidence_level": "confidence_level",
  "data_tier": "data_tier",
  "crop_type": "crop_type",
  "scoring_context": "scoring_context",
  "scoring_scope": "scoring_scope",
  "score_version": "score_version",
  "scored_at": "2026-06-15T09:30:00Z",
  "next_review_date": "2026-06-15",
  "score_inputs_snapshot": {
    "as_of": "2026-06-15",
    "data_as_of": "2026-06-15",
    "satellite_window_days": 1,
    "alert_window_days": 1,
    "max_cloud_coverage_pct": 1.5,
    "defaulted_features": [
      "defaulted_features"
    ],
    "defaulted_feature_count": 1,
    "satellite_record_count": 1,
    "soil_test_count": 1,
    "weather_month_count": 1,
    "alert_count": 1,
    "field_area_ha": 1.5,
    "has_evaluation_metrics": true,
    "avg_ndvi": 1.5,
    "avg_health_score": 1.5,
    "avg_stress_level": 1.5,
    "avg_yield_prediction": 1.5,
    "soil_ph": 1.5,
    "soil_fertility_score": 1.5,
    "soil_suitability_score": 1.5,
    "ndvi_trend_numeric": 1.5,
    "season_stage": "season_stage",
    "area_size_band": "area_size_band",
    "total_rainfall_mm": 1.5,
    "observed_rainfall_mm": 1.5,
    "weather_observed_day_count": 1,
    "weather_day_coverage_pct": 1.5,
    "weather_coverage_insufficient": true,
    "rainfall_score": 1.5,
    "avg_environmental_risk_score": 1.5,
    "extreme_event_count": 1,
    "cooperative_membership_status": "cooperative_membership_status",
    "transaction_count": 1,
    "input_spend_per_ha": 1.5,
    "income_expense_ratio": 1.5,
    "days_since_last_transaction": 1,
    "avg_monthly_balance": 1.5,
    "momo_frequency_score": 1.5,
    "is_in_cooperative": true,
    "input_purchase_count": 1,
    "market_risk_score": 1.5,
    "crop_type_resolved": "crop_type_resolved",
    "optimal_rainfall_min": 1.5,
    "optimal_rainfall_max": 1.5,
    "demand_index": 1.5,
    "susceptibility_index": 1.5
  },
  "data_completeness": {
    "satellite_data": false,
    "weather_data": false,
    "soil_data": false,
    "yield_history": false,
    "farm_activities": false,
    "financial_data": false,
    "overall_pct": 1.5,
    "defaulted_features": [
      "defaulted_features"
    ],
    "defaulted_feature_count": 1,
    "fields_excluded": [
      {
        "field_id": "8b6e1a2f-2d4c-4e9a-9b0f-1c7d3e5a6f42",
        "area_ha": 1.5,
        "reason": "reason",
        "detail": "detail"
      }
    ]
  },
  "pillar_scores": {
    "agronomic": 1.5,
    "climate": 1.5,
    "financial": 1.5,
    "weight_agronomic": 0.4,
    "weight_climate": 0.35,
    "weight_financial": 0.25,
    "pillar_evidence": {},
    "weights_redistributed": true
  },
  "score_breakdown": {
    "agronomic": {
      "components": [
        {
          "label": "label",
          "actual": 1.5,
          "max": 1.5,
          "gap": 1.5,
          "pct_of_max": 1,
          "driver": "driver"
        }
      ]
    },
    "climate": {
      "components": [
        {
          "label": "label",
          "actual": 1.5,
          "max": 1.5,
          "gap": 1.5,
          "pct_of_max": 1,
          "driver": "driver"
        }
      ]
    },
    "financial": {
      "components": [
        {
          "label": "label",
          "actual": 1.5,
          "max": 1.5,
          "gap": 1.5,
          "pct_of_max": 1,
          "driver": "driver"
        }
      ]
    }
  },
  "key_risk_factors": [
    {
      "factor": "factor",
      "severity": "severity",
      "description": "Notes about this record."
    }
  ],
  "recommendations": [
    "recommendations"
  ],
  "loan_reference": "loan_reference",
  "farmer_id": "farmer_id",
  "farmer_name": "farmer_name",
  "farm_name": "farm_name",
  "fields_assessed": [
    {
      "field_id": "8b6e1a2f-2d4c-4e9a-9b0f-1c7d3e5a6f42",
      "field_name": "field_name",
      "area_ha": 1.5,
      "weight_pct": 1.5,
      "score": 1,
      "risk_band": "risk_band",
      "open_in_crop_monitor": "open_in_crop_monitor"
    }
  ],
  "requested_amount": "requested_amount",
  "loan_currency": "loan_currency",
  "loan_context": {
    "application_id": "application_id",
    "loan_product_type": "loan_product_type",
    "requested_amount": "requested_amount",
    "loan_currency": "loan_currency",
    "loan_tenor_months": 1,
    "loan_purpose": "loan_purpose",
    "application_status": "application_status"
  },
  "adverse_action_factors": [],
  "audit": {
    "assessed_at": "2026-06-15T09:30:00Z",
    "assessed_by_name": "assessed_by_name",
    "model_version": "model_version",
    "data_as_of": "2026-06-15",
    "rescore_cadence": "Manual",
    "next_review_date": "2026-06-15"
  }
}
post/yieldrank/scores/batch

Submit multiple farms for YieldRank scoring in one request

Requires an Authorization: Bearer header.

Request body

requestsScoreSubmitRequest[]required

Response 200

resultsScoreBatchItem[]required
totalintegerrequired
succeededintegerrequired
failedintegerrequired
POST /yieldrank/scores/batch
curl -X POST "https://api.cropsense.africa/yieldrank/scores/batch" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "requests": [
      {
        "farm_id": "3fa2c9e1-6b3a-4d2e-9c11-4a8e5f9d2b7a",
        "field_id": "8b6e1a2f-2d4c-4e9a-9b0f-1c7d3e5a6f42",
        "crop_type": "crop_type",
        "scoring_context": "credit_origination",
        "loan_reference": "loan_reference",
        "async_mode": false,
        "as_of": "2026-06-15"
      }
    ]
  }'
Example response · 200
{
  "results": [
    {
      "farm_id": "3fa2c9e1-6b3a-4d2e-9c11-4a8e5f9d2b7a",
      "field_id": "8b6e1a2f-2d4c-4e9a-9b0f-1c7d3e5a6f42",
      "result": {
        "score_id": "4b8d2f6a-1c9e-4a3d-8f5b-2e7c6a9d0f1b",
        "cropsense_score_id": "cropsense_score_id",
        "farm_id": "3fa2c9e1-6b3a-4d2e-9c11-4a8e5f9d2b7a",
        "portfolio_id": "portfolio_id",
        "status": "pending",
        "score": 1,
        "raw_score": 1,
        "risk_band": "risk_band",
        "risk_band_label": "risk_band_label",
        "confidence_level": "confidence_level",
        "data_tier": "data_tier",
        "crop_type": "crop_type",
        "scoring_context": "scoring_context",
        "scoring_scope": "scoring_scope",
        "score_version": "score_version",
        "scored_at": "2026-06-15T09:30:00Z",
        "next_review_date": "2026-06-15",
        "score_inputs_snapshot": {
          "as_of": "2026-06-15",
          "data_as_of": "2026-06-15",
          "satellite_window_days": 1,
          "alert_window_days": 1,
          "max_cloud_coverage_pct": 1.5,
          "defaulted_features": [
            "defaulted_features"
          ],
          "defaulted_feature_count": 1,
          "satellite_record_count": 1,
          "soil_test_count": 1,
          "weather_month_count": 1,
          "alert_count": 1,
          "field_area_ha": 1.5,
          "has_evaluation_metrics": true,
          "avg_ndvi": 1.5,
          "avg_health_score": 1.5,
          "avg_stress_level": 1.5,
          "avg_yield_prediction": 1.5,
          "soil_ph": 1.5,
          "soil_fertility_score": 1.5,
          "soil_suitability_score": 1.5,
          "ndvi_trend_numeric": 1.5,
          "season_stage": "season_stage",
          "area_size_band": "area_size_band",
          "total_rainfall_mm": 1.5,
          "observed_rainfall_mm": 1.5,
          "weather_observed_day_count": 1,
          "weather_day_coverage_pct": 1.5,
          "weather_coverage_insufficient": true,
          "rainfall_score": 1.5,
          "avg_environmental_risk_score": 1.5,
          "extreme_event_count": 1,
          "cooperative_membership_status": "cooperative_membership_status",
          "transaction_count": 1,
          "input_spend_per_ha": 1.5,
          "income_expense_ratio": 1.5,
          "days_since_last_transaction": 1,
          "avg_monthly_balance": 1.5,
          "momo_frequency_score": 1.5,
          "is_in_cooperative": true,
          "input_purchase_count": 1,
          "market_risk_score": 1.5,
          "crop_type_resolved": "crop_type_resolved",
          "optimal_rainfall_min": 1.5,
          "optimal_rainfall_max": 1.5,
          "demand_index": 1.5,
          "susceptibility_index": 1.5
        },
        "data_completeness": {
          "satellite_data": false,
          "weather_data": false,
          "soil_data": false,
          "yield_history": false,
          "farm_activities": false,
          "financial_data": false,
          "overall_pct": 1.5,
          "defaulted_features": [
            "defaulted_features"
          ],
          "defaulted_feature_count": 1,
          "fields_excluded": [
            {
              "field_id": "8b6e1a2f-2d4c-4e9a-9b0f-1c7d3e5a6f42",
              "area_ha": null,
              "reason": null,
              "detail": null
            }
          ]
        },
        "pillar_scores": {
          "agronomic": 1.5,
          "climate": 1.5,
          "financial": 1.5,
          "weight_agronomic": 0.4,
          "weight_climate": 0.35,
          "weight_financial": 0.25,
          "pillar_evidence": {},
          "weights_redistributed": true
        },
        "score_breakdown": {
          "agronomic": {
            "components": [
              null
            ]
          },
          "climate": {
            "components": [
              null
            ]
          },
          "financial": {
            "components": [
              null
            ]
          }
        },
        "key_risk_factors": [
          {
            "factor": "factor",
            "severity": "severity",
            "description": "Notes about this record."
          }
        ],
        "recommendations": [
          "recommendations"
        ],
        "loan_reference": "loan_reference",
        "farmer_id": "farmer_id",
        "farmer_name": "farmer_name",
        "farm_name": "farm_name",
        "fields_assessed": [
          {
            "field_id": "8b6e1a2f-2d4c-4e9a-9b0f-1c7d3e5a6f42",
            "field_name": "field_name",
            "area_ha": 1.5,
            "weight_pct": 1.5,
            "score": 1,
            "risk_band": "risk_band",
            "open_in_crop_monitor": "open_in_crop_monitor"
          }
        ],
        "requested_amount": "requested_amount",
        "loan_currency": "loan_currency",
        "loan_context": {
          "application_id": "application_id",
          "loan_product_type": "loan_product_type",
          "requested_amount": "requested_amount",
          "loan_currency": "loan_currency",
          "loan_tenor_months": 1,
          "loan_purpose": "loan_purpose",
          "application_status": "application_status"
        },
        "adverse_action_factors": [],
        "audit": {
          "assessed_at": "2026-06-15T09:30:00Z",
          "assessed_by_name": "assessed_by_name",
          "model_version": "model_version",
          "data_as_of": "2026-06-15",
          "rescore_cadence": "Manual",
          "next_review_date": "2026-06-15"
        }
      },
      "accepted": {
        "score_id": "4b8d2f6a-1c9e-4a3d-8f5b-2e7c6a9d0f1b",
        "cropsense_score_id": "cropsense_score_id",
        "status": "pending",
        "message": "message",
        "estimated_completion_seconds": 60
      },
      "error": "error"
    }
  ],
  "total": 1,
  "succeeded": 1,
  "failed": 1
}
get/yieldrank/score/{score_id}

Retrieve a score result

Requires an Authorization: Bearer header.

Parameters

score_idstringpathrequired

Response 200

score_idstringrequired
cropsense_score_idstringoptional
farm_idstringrequired
portfolio_idstringoptional
statusenum<string>optional
scoreintegerrequired
raw_scoreintegeroptional
risk_bandstringrequired
risk_band_labelstringoptional
confidence_levelstringoptional
data_tierstringoptional
crop_typestringoptional
scoring_contextstringoptional
scoring_scopestringoptional
score_versionstringoptional
scored_atstring<date-time>required
next_review_datestring<date>optional
score_inputs_snapshotScoreInputsSnapshotoptional
data_completenessDataCompletenessDetailoptional
pillar_scoresPillarScoresoptional
score_breakdownScoreContributionsoptional
key_risk_factorsRiskFactor[]optional
recommendationsstring[]optional
loan_referencestringoptional
farmer_idstringoptional
farmer_namestringoptional
farm_namestringoptional
fields_assessedFieldAssessedItem[]optional
requested_amountstringoptional
loan_currencystringoptional
loan_contextLoanContextoptional
adverse_action_factorsAdverseActionFactor[]optional
auditAuditTrailoptional
GET /yieldrank/score/{score_id}
curl -X GET "https://api.cropsense.africa/yieldrank/score/4b8d2f6a-1c9e-4a3d-8f5b-2e7c6a9d0f1b" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Example response · 200
{
  "score_id": "4b8d2f6a-1c9e-4a3d-8f5b-2e7c6a9d0f1b",
  "cropsense_score_id": "cropsense_score_id",
  "farm_id": "3fa2c9e1-6b3a-4d2e-9c11-4a8e5f9d2b7a",
  "portfolio_id": "portfolio_id",
  "status": "pending",
  "score": 1,
  "raw_score": 1,
  "risk_band": "risk_band",
  "risk_band_label": "risk_band_label",
  "confidence_level": "confidence_level",
  "data_tier": "data_tier",
  "crop_type": "crop_type",
  "scoring_context": "scoring_context",
  "scoring_scope": "scoring_scope",
  "score_version": "score_version",
  "scored_at": "2026-06-15T09:30:00Z",
  "next_review_date": "2026-06-15",
  "score_inputs_snapshot": {
    "as_of": "2026-06-15",
    "data_as_of": "2026-06-15",
    "satellite_window_days": 1,
    "alert_window_days": 1,
    "max_cloud_coverage_pct": 1.5,
    "defaulted_features": [
      "defaulted_features"
    ],
    "defaulted_feature_count": 1,
    "satellite_record_count": 1,
    "soil_test_count": 1,
    "weather_month_count": 1,
    "alert_count": 1,
    "field_area_ha": 1.5,
    "has_evaluation_metrics": true,
    "avg_ndvi": 1.5,
    "avg_health_score": 1.5,
    "avg_stress_level": 1.5,
    "avg_yield_prediction": 1.5,
    "soil_ph": 1.5,
    "soil_fertility_score": 1.5,
    "soil_suitability_score": 1.5,
    "ndvi_trend_numeric": 1.5,
    "season_stage": "season_stage",
    "area_size_band": "area_size_band",
    "total_rainfall_mm": 1.5,
    "observed_rainfall_mm": 1.5,
    "weather_observed_day_count": 1,
    "weather_day_coverage_pct": 1.5,
    "weather_coverage_insufficient": true,
    "rainfall_score": 1.5,
    "avg_environmental_risk_score": 1.5,
    "extreme_event_count": 1,
    "cooperative_membership_status": "cooperative_membership_status",
    "transaction_count": 1,
    "input_spend_per_ha": 1.5,
    "income_expense_ratio": 1.5,
    "days_since_last_transaction": 1,
    "avg_monthly_balance": 1.5,
    "momo_frequency_score": 1.5,
    "is_in_cooperative": true,
    "input_purchase_count": 1,
    "market_risk_score": 1.5,
    "crop_type_resolved": "crop_type_resolved",
    "optimal_rainfall_min": 1.5,
    "optimal_rainfall_max": 1.5,
    "demand_index": 1.5,
    "susceptibility_index": 1.5
  },
  "data_completeness": {
    "satellite_data": false,
    "weather_data": false,
    "soil_data": false,
    "yield_history": false,
    "farm_activities": false,
    "financial_data": false,
    "overall_pct": 1.5,
    "defaulted_features": [
      "defaulted_features"
    ],
    "defaulted_feature_count": 1,
    "fields_excluded": [
      {
        "field_id": "8b6e1a2f-2d4c-4e9a-9b0f-1c7d3e5a6f42",
        "area_ha": 1.5,
        "reason": "reason",
        "detail": "detail"
      }
    ]
  },
  "pillar_scores": {
    "agronomic": 1.5,
    "climate": 1.5,
    "financial": 1.5,
    "weight_agronomic": 0.4,
    "weight_climate": 0.35,
    "weight_financial": 0.25,
    "pillar_evidence": {},
    "weights_redistributed": true
  },
  "score_breakdown": {
    "agronomic": {
      "components": [
        {
          "label": "label",
          "actual": 1.5,
          "max": 1.5,
          "gap": 1.5,
          "pct_of_max": 1,
          "driver": "driver"
        }
      ]
    },
    "climate": {
      "components": [
        {
          "label": "label",
          "actual": 1.5,
          "max": 1.5,
          "gap": 1.5,
          "pct_of_max": 1,
          "driver": "driver"
        }
      ]
    },
    "financial": {
      "components": [
        {
          "label": "label",
          "actual": 1.5,
          "max": 1.5,
          "gap": 1.5,
          "pct_of_max": 1,
          "driver": "driver"
        }
      ]
    }
  },
  "key_risk_factors": [
    {
      "factor": "factor",
      "severity": "severity",
      "description": "Notes about this record."
    }
  ],
  "recommendations": [
    "recommendations"
  ],
  "loan_reference": "loan_reference",
  "farmer_id": "farmer_id",
  "farmer_name": "farmer_name",
  "farm_name": "farm_name",
  "fields_assessed": [
    {
      "field_id": "8b6e1a2f-2d4c-4e9a-9b0f-1c7d3e5a6f42",
      "field_name": "field_name",
      "area_ha": 1.5,
      "weight_pct": 1.5,
      "score": 1,
      "risk_band": "risk_band",
      "open_in_crop_monitor": "open_in_crop_monitor"
    }
  ],
  "requested_amount": "requested_amount",
  "loan_currency": "loan_currency",
  "loan_context": {
    "application_id": "application_id",
    "loan_product_type": "loan_product_type",
    "requested_amount": "requested_amount",
    "loan_currency": "loan_currency",
    "loan_tenor_months": 1,
    "loan_purpose": "loan_purpose",
    "application_status": "application_status"
  },
  "adverse_action_factors": [],
  "audit": {
    "assessed_at": "2026-06-15T09:30:00Z",
    "assessed_by_name": "assessed_by_name",
    "model_version": "model_version",
    "data_as_of": "2026-06-15",
    "rescore_cadence": "Manual",
    "next_review_date": "2026-06-15"
  }
}
get/yieldrank/scores

List all YieldRank scores for the organisation

Requires an Authorization: Bearer header.

Parameters

farm_idstringquery
risk_bandstringquery

A, B, C, D, or E

from_datestringquery

ISO 8601 date

to_datestringquery

ISO 8601 date

limitintegerquery
offsetintegerquery

Response 200

resultsScoreResult[]required
totalintegerrequired
limitintegerrequired
offsetintegerrequired
GET /yieldrank/scores
curl -X GET "https://api.cropsense.africa/yieldrank/scores?farm_id=3fa2c9e1-6b3a-4d2e-9c11-4a8e5f9d2b7a&risk_band=risk_band&from_date=2026-06-15&to_date=2026-06-15&limit=50&offset=0" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Example response · 200
{
  "results": [
    {
      "score_id": "4b8d2f6a-1c9e-4a3d-8f5b-2e7c6a9d0f1b",
      "cropsense_score_id": "cropsense_score_id",
      "farm_id": "3fa2c9e1-6b3a-4d2e-9c11-4a8e5f9d2b7a",
      "portfolio_id": "portfolio_id",
      "status": "pending",
      "score": 1,
      "raw_score": 1,
      "risk_band": "risk_band",
      "risk_band_label": "risk_band_label",
      "confidence_level": "confidence_level",
      "data_tier": "data_tier",
      "crop_type": "crop_type",
      "scoring_context": "scoring_context",
      "scoring_scope": "scoring_scope",
      "score_version": "score_version",
      "scored_at": "2026-06-15T09:30:00Z",
      "next_review_date": "2026-06-15",
      "score_inputs_snapshot": {
        "as_of": "2026-06-15",
        "data_as_of": "2026-06-15",
        "satellite_window_days": 1,
        "alert_window_days": 1,
        "max_cloud_coverage_pct": 1.5,
        "defaulted_features": [
          "defaulted_features"
        ],
        "defaulted_feature_count": 1,
        "satellite_record_count": 1,
        "soil_test_count": 1,
        "weather_month_count": 1,
        "alert_count": 1,
        "field_area_ha": 1.5,
        "has_evaluation_metrics": true,
        "avg_ndvi": 1.5,
        "avg_health_score": 1.5,
        "avg_stress_level": 1.5,
        "avg_yield_prediction": 1.5,
        "soil_ph": 1.5,
        "soil_fertility_score": 1.5,
        "soil_suitability_score": 1.5,
        "ndvi_trend_numeric": 1.5,
        "season_stage": "season_stage",
        "area_size_band": "area_size_band",
        "total_rainfall_mm": 1.5,
        "observed_rainfall_mm": 1.5,
        "weather_observed_day_count": 1,
        "weather_day_coverage_pct": 1.5,
        "weather_coverage_insufficient": true,
        "rainfall_score": 1.5,
        "avg_environmental_risk_score": 1.5,
        "extreme_event_count": 1,
        "cooperative_membership_status": "cooperative_membership_status",
        "transaction_count": 1,
        "input_spend_per_ha": 1.5,
        "income_expense_ratio": 1.5,
        "days_since_last_transaction": 1,
        "avg_monthly_balance": 1.5,
        "momo_frequency_score": 1.5,
        "is_in_cooperative": true,
        "input_purchase_count": 1,
        "market_risk_score": 1.5,
        "crop_type_resolved": "crop_type_resolved",
        "optimal_rainfall_min": 1.5,
        "optimal_rainfall_max": 1.5,
        "demand_index": 1.5,
        "susceptibility_index": 1.5
      },
      "data_completeness": {
        "satellite_data": false,
        "weather_data": false,
        "soil_data": false,
        "yield_history": false,
        "farm_activities": false,
        "financial_data": false,
        "overall_pct": 1.5,
        "defaulted_features": [
          "defaulted_features"
        ],
        "defaulted_feature_count": 1,
        "fields_excluded": [
          {
            "field_id": "8b6e1a2f-2d4c-4e9a-9b0f-1c7d3e5a6f42",
            "area_ha": 1.5,
            "reason": "reason",
            "detail": "detail"
          }
        ]
      },
      "pillar_scores": {
        "agronomic": 1.5,
        "climate": 1.5,
        "financial": 1.5,
        "weight_agronomic": 0.4,
        "weight_climate": 0.35,
        "weight_financial": 0.25,
        "pillar_evidence": {},
        "weights_redistributed": true
      },
      "score_breakdown": {
        "agronomic": {
          "components": [
            {
              "label": null,
              "actual": null,
              "max": null,
              "gap": null,
              "pct_of_max": null,
              "driver": null
            }
          ]
        },
        "climate": {
          "components": [
            {
              "label": null,
              "actual": null,
              "max": null,
              "gap": null,
              "pct_of_max": null,
              "driver": null
            }
          ]
        },
        "financial": {
          "components": [
            {
              "label": null,
              "actual": null,
              "max": null,
              "gap": null,
              "pct_of_max": null,
              "driver": null
            }
          ]
        }
      },
      "key_risk_factors": [
        {
          "factor": "factor",
          "severity": "severity",
          "description": "Notes about this record."
        }
      ],
      "recommendations": [
        "recommendations"
      ],
      "loan_reference": "loan_reference",
      "farmer_id": "farmer_id",
      "farmer_name": "farmer_name",
      "farm_name": "farm_name",
      "fields_assessed": [
        {
          "field_id": "8b6e1a2f-2d4c-4e9a-9b0f-1c7d3e5a6f42",
          "field_name": "field_name",
          "area_ha": 1.5,
          "weight_pct": 1.5,
          "score": 1,
          "risk_band": "risk_band",
          "open_in_crop_monitor": "open_in_crop_monitor"
        }
      ],
      "requested_amount": "requested_amount",
      "loan_currency": "loan_currency",
      "loan_context": {
        "application_id": "application_id",
        "loan_product_type": "loan_product_type",
        "requested_amount": "requested_amount",
        "loan_currency": "loan_currency",
        "loan_tenor_months": 1,
        "loan_purpose": "loan_purpose",
        "application_status": "application_status"
      },
      "adverse_action_factors": [],
      "audit": {
        "assessed_at": "2026-06-15T09:30:00Z",
        "assessed_by_name": "assessed_by_name",
        "model_version": "model_version",
        "data_as_of": "2026-06-15",
        "rescore_cadence": "Manual",
        "next_review_date": "2026-06-15"
      }
    }
  ],
  "total": 1,
  "limit": 1,
  "offset": 1
}
get/yieldrank/score/{score_id}/repayment-capacity

Compute expected harvest value, net cash flow, and DSCR for a scored farm

Requires an Authorization: Bearer header.

Parameters

score_idstringpathrequired

Response 200

expected_harvest_valuenumberoptional
expected_yield_kg_hanumberoptional
yield_basisstringoptional
currencystringoptional
modelled_net_cash_flownumberoptional
dscrnumberoptional
dscr_signalstringoptional
data_sourcesstring[]optional
data_completeness_pctintegeroptional
GET /yieldrank/score/{score_id}/repayment-capacity
curl -X GET "https://api.cropsense.africa/yieldrank/score/4b8d2f6a-1c9e-4a3d-8f5b-2e7c6a9d0f1b/repayment-capacity" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Example response · 200
{
  "expected_harvest_value": 1.5,
  "expected_yield_kg_ha": 1.5,
  "yield_basis": "yield_basis",
  "currency": "USD",
  "modelled_net_cash_flow": 1.5,
  "dscr": 1.5,
  "dscr_signal": "dscr_signal",
  "data_sources": [],
  "data_completeness_pct": 0
}
get/yieldrank/score/{score_id}/explain

Generate an AI narrative explanation for a YieldRank score

Requires an Authorization: Bearer header.

Parameters

score_idstringpathrequired

Response 200

score_idstringrequired
cropsense_score_idstringoptional
summarystringrequired
pillar_narrativesPillarNarrativesrequired
outlookstringrequired
generated_atstring<date-time>required
modelstringoptional
cachedbooleanoptional
GET /yieldrank/score/{score_id}/explain
curl -X GET "https://api.cropsense.africa/yieldrank/score/4b8d2f6a-1c9e-4a3d-8f5b-2e7c6a9d0f1b/explain" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Example response · 200
{
  "score_id": "4b8d2f6a-1c9e-4a3d-8f5b-2e7c6a9d0f1b",
  "cropsense_score_id": "cropsense_score_id",
  "summary": "summary",
  "pillar_narratives": {
    "agronomic": "agronomic",
    "climate": "climate",
    "financial": "financial"
  },
  "outlook": "outlook",
  "generated_at": "2026-06-15T09:30:00Z",
  "model": "deepseek-v4-flash",
  "cached": false
}
get/yieldrank/farms/{farm_id}/satellite

Get satellite intelligence for a portfolio farm

Requires an Authorization: Bearer header.

Parameters

farm_idstringpathrequired
field_idstringquery

Scope to a specific field

limitintegerquery

Response 200

farm_idstringrequired
field_idstringoptional
recordsSatelliteRecord[]required
totalintegerrequired
GET /yieldrank/farms/{farm_id}/satellite
curl -X GET "https://api.cropsense.africa/yieldrank/farms/3fa2c9e1-6b3a-4d2e-9c11-4a8e5f9d2b7a/satellite?field_id=8b6e1a2f-2d4c-4e9a-9b0f-1c7d3e5a6f42&limit=10" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Example response · 200
{
  "farm_id": "3fa2c9e1-6b3a-4d2e-9c11-4a8e5f9d2b7a",
  "field_id": "8b6e1a2f-2d4c-4e9a-9b0f-1c7d3e5a6f42",
  "records": [
    {
      "image_id": "image_id",
      "farm_id": "3fa2c9e1-6b3a-4d2e-9c11-4a8e5f9d2b7a",
      "field_id": "8b6e1a2f-2d4c-4e9a-9b0f-1c7d3e5a6f42",
      "captured_at": "2026-06-15T09:30:00Z",
      "cloud_coverage_pct": 1.5,
      "data_source": "data_source",
      "health_indices": {
        "ndvi": 1.5,
        "ndmi": 1.5,
        "evi": 1.5,
        "msavi2": 1.5
      },
      "evaluation_metrics": {
        "stress_level": "stress_level",
        "stress_score": 1,
        "yield_prediction_index": 1.5,
        "crop_coverage_pct": 1.5
      },
      "recommendations": [
        "recommendations"
      ]
    }
  ],
  "total": 1
}
get/yieldrank/farms/{farm_id}/yield-forecast

Get yield forecast for a portfolio farm

Requires an Authorization: Bearer header.

Parameters

farm_idstringpathrequired

Response 200

farm_idstringrequired
crop_typestringoptional
data_tierstringrequired
forecast_kg_hanumberrequired
forecast_total_kgnumberoptional
optimal_yield_kg_hanumberoptional
yield_gap_pctnumberoptional
trendstringoptional
confidencestringrequired
generated_atstring<date-time>required
GET /yieldrank/farms/{farm_id}/yield-forecast
curl -X GET "https://api.cropsense.africa/yieldrank/farms/3fa2c9e1-6b3a-4d2e-9c11-4a8e5f9d2b7a/yield-forecast" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Example response · 200
{
  "farm_id": "3fa2c9e1-6b3a-4d2e-9c11-4a8e5f9d2b7a",
  "crop_type": "crop_type",
  "data_tier": "data_tier",
  "forecast_kg_ha": 1.5,
  "forecast_total_kg": 1.5,
  "optimal_yield_kg_ha": 1.5,
  "yield_gap_pct": 1.5,
  "trend": "trend",
  "confidence": "confidence",
  "generated_at": "2026-06-15T09:30:00Z"
}
get/yieldrank/farms/{farm_id}/summary

Get full farm intelligence summary

Requires an Authorization: Bearer header.

Parameters

farm_idstringpathrequired

Response 200

farm_idstringrequired
farm_namestringrequired
countrystringoptional
locationstringoptional
area_hanumberoptional
soil_typestringoptional
has_irrigationbooleanoptional
crop_typesstring[]optional
latest_scoreScoreResultoptional
latest_satelliteSatelliteRecordoptional
yield_forecastYieldForecastResponseoptional
active_alertsobject[]optional
data_completenessDataCompletenessDetailoptional
GET /yieldrank/farms/{farm_id}/summary
curl -X GET "https://api.cropsense.africa/yieldrank/farms/3fa2c9e1-6b3a-4d2e-9c11-4a8e5f9d2b7a/summary" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Example response · 200
{
  "farm_id": "3fa2c9e1-6b3a-4d2e-9c11-4a8e5f9d2b7a",
  "farm_name": "farm_name",
  "country": "Kenya",
  "location": "Kiambu County",
  "area_ha": 1.5,
  "soil_type": "soil_type",
  "has_irrigation": true,
  "crop_types": [
    "crop_types"
  ],
  "latest_score": {
    "score_id": "4b8d2f6a-1c9e-4a3d-8f5b-2e7c6a9d0f1b",
    "cropsense_score_id": "cropsense_score_id",
    "farm_id": "3fa2c9e1-6b3a-4d2e-9c11-4a8e5f9d2b7a",
    "portfolio_id": "portfolio_id",
    "status": "pending",
    "score": 1,
    "raw_score": 1,
    "risk_band": "risk_band",
    "risk_band_label": "risk_band_label",
    "confidence_level": "confidence_level",
    "data_tier": "data_tier",
    "crop_type": "crop_type",
    "scoring_context": "scoring_context",
    "scoring_scope": "scoring_scope",
    "score_version": "score_version",
    "scored_at": "2026-06-15T09:30:00Z",
    "next_review_date": "2026-06-15",
    "score_inputs_snapshot": {
      "as_of": "2026-06-15",
      "data_as_of": "2026-06-15",
      "satellite_window_days": 1,
      "alert_window_days": 1,
      "max_cloud_coverage_pct": 1.5,
      "defaulted_features": [
        "defaulted_features"
      ],
      "defaulted_feature_count": 1,
      "satellite_record_count": 1,
      "soil_test_count": 1,
      "weather_month_count": 1,
      "alert_count": 1,
      "field_area_ha": 1.5,
      "has_evaluation_metrics": true,
      "avg_ndvi": 1.5,
      "avg_health_score": 1.5,
      "avg_stress_level": 1.5,
      "avg_yield_prediction": 1.5,
      "soil_ph": 1.5,
      "soil_fertility_score": 1.5,
      "soil_suitability_score": 1.5,
      "ndvi_trend_numeric": 1.5,
      "season_stage": "season_stage",
      "area_size_band": "area_size_band",
      "total_rainfall_mm": 1.5,
      "observed_rainfall_mm": 1.5,
      "weather_observed_day_count": 1,
      "weather_day_coverage_pct": 1.5,
      "weather_coverage_insufficient": true,
      "rainfall_score": 1.5,
      "avg_environmental_risk_score": 1.5,
      "extreme_event_count": 1,
      "cooperative_membership_status": "cooperative_membership_status",
      "transaction_count": 1,
      "input_spend_per_ha": 1.5,
      "income_expense_ratio": 1.5,
      "days_since_last_transaction": 1,
      "avg_monthly_balance": 1.5,
      "momo_frequency_score": 1.5,
      "is_in_cooperative": true,
      "input_purchase_count": 1,
      "market_risk_score": 1.5,
      "crop_type_resolved": "crop_type_resolved",
      "optimal_rainfall_min": 1.5,
      "optimal_rainfall_max": 1.5,
      "demand_index": 1.5,
      "susceptibility_index": 1.5
    },
    "data_completeness": {
      "satellite_data": false,
      "weather_data": false,
      "soil_data": false,
      "yield_history": false,
      "farm_activities": false,
      "financial_data": false,
      "overall_pct": 1.5,
      "defaulted_features": [
        "defaulted_features"
      ],
      "defaulted_feature_count": 1,
      "fields_excluded": [
        {
          "field_id": "8b6e1a2f-2d4c-4e9a-9b0f-1c7d3e5a6f42",
          "area_ha": 1.5,
          "reason": "reason",
          "detail": "detail"
        }
      ]
    },
    "pillar_scores": {
      "agronomic": 1.5,
      "climate": 1.5,
      "financial": 1.5,
      "weight_agronomic": 0.4,
      "weight_climate": 0.35,
      "weight_financial": 0.25,
      "pillar_evidence": {},
      "weights_redistributed": true
    },
    "score_breakdown": {
      "agronomic": {
        "components": [
          {
            "label": "label",
            "actual": 1.5,
            "max": 1.5,
            "gap": 1.5,
            "pct_of_max": 1,
            "driver": "driver"
          }
        ]
      },
      "climate": {
        "components": [
          {
            "label": "label",
            "actual": 1.5,
            "max": 1.5,
            "gap": 1.5,
            "pct_of_max": 1,
            "driver": "driver"
          }
        ]
      },
      "financial": {
        "components": [
          {
            "label": "label",
            "actual": 1.5,
            "max": 1.5,
            "gap": 1.5,
            "pct_of_max": 1,
            "driver": "driver"
          }
        ]
      }
    },
    "key_risk_factors": [
      {
        "factor": "factor",
        "severity": "severity",
        "description": "Notes about this record."
      }
    ],
    "recommendations": [
      "recommendations"
    ],
    "loan_reference": "loan_reference",
    "farmer_id": "farmer_id",
    "farmer_name": "farmer_name",
    "farm_name": "farm_name",
    "fields_assessed": [
      {
        "field_id": "8b6e1a2f-2d4c-4e9a-9b0f-1c7d3e5a6f42",
        "field_name": "field_name",
        "area_ha": 1.5,
        "weight_pct": 1.5,
        "score": 1,
        "risk_band": "risk_band",
        "open_in_crop_monitor": "open_in_crop_monitor"
      }
    ],
    "requested_amount": "requested_amount",
    "loan_currency": "loan_currency",
    "loan_context": {
      "application_id": "application_id",
      "loan_product_type": "loan_product_type",
      "requested_amount": "requested_amount",
      "loan_currency": "loan_currency",
      "loan_tenor_months": 1,
      "loan_purpose": "loan_purpose",
      "application_status": "application_status"
    },
    "adverse_action_factors": [],
    "audit": {
      "assessed_at": "2026-06-15T09:30:00Z",
      "assessed_by_name": "assessed_by_name",
      "model_version": "model_version",
      "data_as_of": "2026-06-15",
      "rescore_cadence": "Manual",
      "next_review_date": "2026-06-15"
    }
  },
  "latest_satellite": {
    "image_id": "image_id",
    "farm_id": "3fa2c9e1-6b3a-4d2e-9c11-4a8e5f9d2b7a",
    "field_id": "8b6e1a2f-2d4c-4e9a-9b0f-1c7d3e5a6f42",
    "captured_at": "2026-06-15T09:30:00Z",
    "cloud_coverage_pct": 1.5,
    "data_source": "data_source",
    "health_indices": {
      "ndvi": 1.5,
      "ndmi": 1.5,
      "evi": 1.5,
      "msavi2": 1.5
    },
    "evaluation_metrics": {
      "stress_level": "stress_level",
      "stress_score": 1,
      "yield_prediction_index": 1.5,
      "crop_coverage_pct": 1.5
    },
    "recommendations": [
      "recommendations"
    ]
  },
  "yield_forecast": {
    "farm_id": "3fa2c9e1-6b3a-4d2e-9c11-4a8e5f9d2b7a",
    "crop_type": "crop_type",
    "data_tier": "data_tier",
    "forecast_kg_ha": 1.5,
    "forecast_total_kg": 1.5,
    "optimal_yield_kg_ha": 1.5,
    "yield_gap_pct": 1.5,
    "trend": "trend",
    "confidence": "confidence",
    "generated_at": "2026-06-15T09:30:00Z"
  },
  "active_alerts": [
    {}
  ],
  "data_completeness": {
    "satellite_data": false,
    "weather_data": false,
    "soil_data": false,
    "yield_history": false,
    "farm_activities": false,
    "financial_data": false,
    "overall_pct": 1.5,
    "defaulted_features": [
      "defaulted_features"
    ],
    "defaulted_feature_count": 1,
    "fields_excluded": [
      {
        "field_id": "8b6e1a2f-2d4c-4e9a-9b0f-1c7d3e5a6f42",
        "area_ha": 1.5,
        "reason": "reason",
        "detail": "detail"
      }
    ]
  }
}