EvidenceItem

Extensible source metadata. Unknown item-level field names receive non-blocking input_interpretation notices on successful licensed evidence responses; acceptance is not proof that a control was evaluated. Suggested names require checking source facts and are never applied automatically. Nested open metadata is not recursively classified by this notice mechanism. Recovery: Codes: FIELD_PROVENANCE_REQUIRED,FIELD_PROVENANCE_CONFLICT,FIELDWORK_CAPACITY_CONTRADICTION,SOURCE_INDEPENDENCE_CONTRADICTION,SOURCE_VERIFICATION_CONTRADICTION,FIELD_SOURCE_MODALITY_CONFLICT,DECISION_GEOGRAPHY_SCOPE_REQUIRED,DECISION_SCOPE_REQUIRED,DECISION_SCOPE_REVIEW_REQUIRED,DECISION_SCOPE_CROSS_CHECK_LIMIT,SOURCE_EXTRACTION_INVALID,SOURCE_EXTRACTION_REFERENCE_CONFLICT,ADVERSE_SOURCE_REVIEW_REQUIRED,INVALID_CLAIM_INPUT,OUTPUT_RECEIPT_NOT_REQUEST_AUTHORITY,ARTIFACT_ROLE_NOT_SOURCE_EVIDENCE. HTTP 422: details/validation_errors; fix missing_fields. Never invent facts. These codes do not authenticate sources or authorize action. /docs/mcp-integration.md.

CompanyMarket IntelligenceAI AgentsAPIAfrican Markets

Properties

Name Type Description
id string
evidence_id string
claim string
load_bearing boolean
is_load_bearing boolean
source_date string Declared source date at its actual precision: YYYY, YYYY-MM, YYYY-MM-DD, or ISO timestamp with seconds and timezone (up to 6 fractional digits). Years 0001-9999; real calendar dates only. Partial date
source_date_range object Optional inclusive declared bounds, usable without source_date. Both endpoints must have the same precision and be ordered. Every supplied source_date/freshness_date must contain the whole range; an e
source_url string
source_doc_id string
sample_size integer Actual sample for collector-administered evidence, including groups. Sample aliases must agree; never invent counts for documentary or self-administered sources.
population_size integer
population_definition string
sampling_method string Use census for a declared complete finite population; this does not override weighted sample admission.
is_complete_population boolean
census boolean Alias for is_complete_population. Only literal true with consistent positive integer sample_size = population_size enables the disclosure.
collection_context object Source-grounded collection declarations, not source authentication. Unknown facts must remain missing; do not invent values to pass. Field decision use requires source modality, collector relationship
evidence_type string
entity_archetype string
source_class string Source-evidence classes only. Model-inferred artifacts are context and are rejected with ARTIFACT_ROLE_NOT_SOURCE_EVIDENCE.
source_grade string
stakeholder_class string
guardian_tier string Guardian role classification, not an adverse score setting. Only guardian evidence activates guardian-specific analysis; stance, observed substance and actual veto authority determine applicable gates
evidence_origin string Explicit public documentary survey tables do not require caller fieldwork metadata or become direct field coverage. Contradictory explicit field origins still require reconciliation.
collection_method string
source_confidence string
stance string Declared stakeholder stance. Opposed or hostile load-bearing evidence requires stakeholder review even when linked as direct_support. This does not rewrite the factual claim relationship or authentica
verification_status string Caller declaration, not independent verification. No confidence boost from this label. Disputed evidence blocks authorization until reconciled or segregated.
freshness_date string
evidence_geography object Use a supported ISO country code, not a country name. Explicit districts declare source coverage, not authenticity or representativeness. Do not relabel geography to match the decision.
geography object
temporal object
public_metric_scope string
public_metrics object
structured_values object Ingestible field-observed MVR dimension values. Canonical production scale is 0-100. Accepted core keys: permission, trust, belonging, embeddedness, reciprocity, cultural_fit, guardian_strength, conti
structured_values_scale string Optional hint for agents. Use '0-1 fraction' only when sending fractional structured_values; otherwise omit and send canonical 0-100 scores.
behavioral_values object Supported on corporate telemetry. The current check pairs high consumer field permission with low 30_day_active_retention_percent under the configured maturity policy, caps scale at pilot_ready and em
structured_values_provenance object Per-dimension map using exact keys present in structured_values, for example {trust:"observed",permission:"imputed"}. input_score_provenance is not a blanket override and is rejected as an unknown dim
human_reviewed boolean Caller-declared review required for AI-extracted material before strict or decisive use. Not identity verification, a signature, authenticated reviewer approval or independent source verification.
review_status string
reviewed_by string Caller-supplied reviewer name for AI-extracted material when human_reviewed=true. The name is not authenticated; supplying it does not establish identity, independence or that review occurred.
reviewed_at string
human_review object Optional structured review record; may include by/reviewer_id, status, and reviewed_at.
organ_attestation object MVR Examiner or other organ-produced evidence attestation. The deterministic kernel treats unreviewed organ evidence as imputed/non-decisive.
_verifier_attestation object Verifier-organ attestation for extraction review. Internal/audit use; unreviewed AI extraction remains non-decisive.
privacy_envelope object
uncertainty_envelope object Named 0-1 components influence evidence weighting. interval_80, score_point_estimate and basis are caller-supplied descriptions, not calibrated output intervals or gate overrides. Unknown component na
survey_payload object For survey evidence, include survey_name, population_definition, sampling_method and sample_frame. Panel and census are accepted sampling methods. Census additionally requires consistent declared popu
payload object Generic typed evidence payload, including telemetry or evaluation details. Retains supplied context only; prose does not become observed numeric scores or authenticated proof. Evaluation payloads need
program_payload object
admin_data_payload object
retail_audit_payload object
provenance_ledger object
source_artifacts array
View JSON Schema on GitHub

JSON Schema

africanmarketos-com-evidence-item-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/africanmarketos-com/json-schema/africanmarketos-com-evidence-item-schema.json",
  "title": "EvidenceItem",
  "description": "Extensible source metadata. Unknown item-level field names receive non-blocking input_interpretation notices on successful licensed evidence responses; acceptance is not proof that a control was evaluated. Suggested names require checking source facts and are never applied automatically. Nested open metadata is not recursively classified by this notice mechanism. Recovery: Codes: FIELD_PROVENANCE_REQUIRED,FIELD_PROVENANCE_CONFLICT,FIELDWORK_CAPACITY_CONTRADICTION,SOURCE_INDEPENDENCE_CONTRADICTION,SOURCE_VERIFICATION_CONTRADICTION,FIELD_SOURCE_MODALITY_CONFLICT,DECISION_GEOGRAPHY_SCOPE_REQUIRED,DECISION_SCOPE_REQUIRED,DECISION_SCOPE_REVIEW_REQUIRED,DECISION_SCOPE_CROSS_CHECK_LIMIT,SOURCE_EXTRACTION_INVALID,SOURCE_EXTRACTION_REFERENCE_CONFLICT,ADVERSE_SOURCE_REVIEW_REQUIRED,INVALID_CLAIM_INPUT,OUTPUT_RECEIPT_NOT_REQUEST_AUTHORITY,ARTIFACT_ROLE_NOT_SOURCE_EVIDENCE. HTTP 422: details/validation_errors; fix missing_fields. Never invent facts. These codes do not authenticate sources or authorize action. /docs/mcp-integration.md.",
  "x-generated": "2026-10-31",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/africanmarketos-com-openapi.yml#/components/schemas/EvidenceItem",
  "type": "object",
  "additionalProperties": true,
  "x-compatible-item-field-names": [
    "provenance",
    "privacy",
    "modality",
    "pack_type",
    "source_type",
    "source_family",
    "source_locator",
    "source_hash",
    "upstream_source_ids",
    "parent_source_ids",
    "support_links",
    "source_relationship",
    "claim_id",
    "collected_at",
    "submitted_at",
    "public_metric_period_end",
    "collection_period_start",
    "collection_period_end",
    "score_scale",
    "value_scale",
    "scale",
    "category",
    "subject",
    "demographics",
    "independence_metadata",
    "dependence_metadata",
    "independence_group_id",
    "dependency_group_id",
    "independence_basis",
    "event_id",
    "dataset_id",
    "method_id",
    "instrument_id",
    "collector_id",
    "error_process_id",
    "source_review",
    "review",
    "reviewer_id",
    "extraction_method",
    "extraction_confidence"
  ],
  "properties": {
    "id": {
      "type": "string"
    },
    "evidence_id": {
      "type": "string"
    },
    "claim": {
      "type": "string"
    },
    "load_bearing": {
      "type": "boolean"
    },
    "is_load_bearing": {
      "type": "boolean"
    },
    "source_date": {
      "type": "string",
      "minLength": 4,
      "maxLength": 32,
      "description": "Declared source date at its actual precision: YYYY, YYYY-MM, YYYY-MM-DD, or ISO timestamp with seconds and timezone (up to 6 fractional digits). Years 0001-9999; real calendar dates only. Partial dates describe inclusive calendar bounds, never an invented day. Source truth and current applicability remain unverified. Metadata only: typed scoring still requires an exact freshness date and excludes partial-date or range-bearing items."
    },
    "source_date_range": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "earliest",
        "latest"
      ],
      "properties": {
        "earliest": {
          "type": "string",
          "minLength": 4,
          "maxLength": 32,
          "description": "Declared source date at its actual precision: YYYY, YYYY-MM, YYYY-MM-DD, or ISO timestamp with seconds and timezone (up to 6 fractional digits). Years 0001-9999; real calendar dates only. Partial dates describe inclusive calendar bounds, never an invented day. Source truth and current applicability remain unverified."
        },
        "latest": {
          "type": "string",
          "minLength": 4,
          "maxLength": 32,
          "description": "Declared source date at its actual precision: YYYY, YYYY-MM, YYYY-MM-DD, or ISO timestamp with seconds and timezone (up to 6 fractional digits). Years 0001-9999; real calendar dates only. Partial dates describe inclusive calendar bounds, never an invented day. Source truth and current applicability remain unverified."
        }
      },
      "description": "Optional inclusive declared bounds, usable without source_date. Both endpoints must have the same precision and be ordered. Every supplied source_date/freshness_date must contain the whole range; an exact timestamp cannot be widened. Aliases must agree before narrowing. Unknown dates are not clipped to the analysis date. Bounds are declarations, not source verification."
    },
    "source_url": {
      "type": "string"
    },
    "source_doc_id": {
      "type": "string"
    },
    "sample_size": {
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991,
      "description": "Actual sample for collector-administered evidence, including groups. Sample aliases must agree; never invent counts for documentary or self-administered sources."
    },
    "population_size": {
      "type": "integer",
      "minimum": 1
    },
    "population_definition": {
      "type": "string"
    },
    "sampling_method": {
      "type": "string",
      "description": "Use census for a declared complete finite population; this does not override weighted sample admission."
    },
    "is_complete_population": {
      "type": "boolean"
    },
    "census": {
      "type": "boolean",
      "description": "Alias for is_complete_population. Only literal true with consistent positive integer sample_size = population_size enables the disclosure."
    },
    "collection_context": {
      "type": "object",
      "additionalProperties": true,
      "description": "Source-grounded collection declarations, not source authentication. Unknown facts must remain missing; do not invent values to pass. Field decision use requires source modality, collector relationship, interview mode, source-document identity and an explicit parent-source list. Collector-administered modes require staffing, duration, available minutes per collector and sample size. Group modes additionally require session_count, participants_per_session, session_duration_minutes and collectors_per_session, never inferred from an individual interview duration. Online, observation and administrative_record modes require collection_administration; self-administered online and automated observation/record sources do not need invented collector capacity. Explicit public/documentary origins are not caller fieldwork solely because evidence_type is survey; conflicting explicit field origins still block. Independent verification labels require a separate reviewer relationship; persisted review is still checked separately.",
      "properties": {
        "source_modality": {
          "type": "string",
          "enum": [
            "direct_observation",
            "documentary",
            "secondary_summary",
            "unknown"
          ]
        },
        "collector_relationship": {
          "type": "string",
          "enum": [
            "independent",
            "employee",
            "company_staff",
            "internal",
            "contractor",
            "partner",
            "self_collected",
            "unknown"
          ],
          "pattern": "\\S"
        },
        "reviewer_relationship": {
          "type": "string",
          "enum": [
            "independent",
            "employee",
            "company_staff",
            "internal",
            "contractor",
            "partner",
            "self_collected",
            "unknown"
          ]
        },
        "interview_mode": {
          "type": "string",
          "enum": [
            "face_to_face",
            "telephone",
            "online",
            "focus_group",
            "group_interview",
            "observation",
            "administrative_record",
            "unknown"
          ],
          "pattern": "\\S"
        },
        "collection_administration": {
          "type": "string",
          "enum": [
            "collector_administered",
            "self_administered",
            "automated",
            "unknown"
          ],
          "description": "Source-grounded administration, required for online, observation and administrative_record modes. self_administered is supported for online; automated for observation or administrative_record. Face-to-face, telephone and group modes are collector-administered and cannot opt out."
        },
        "enumerator_count": {
          "type": "integer",
          "minimum": 1,
          "maximum": 9007199254740991
        },
        "interview_duration_minutes": {
          "type": "number",
          "exclusiveMinimum": true,
          "description": "Collector time per individual interview or per observed/processed sample record for collector-administered non-group modes.",
          "minimum": 0
        },
        "fieldwork_window_minutes": {
          "type": "number",
          "exclusiveMinimum": true,
          "description": "Total available collection minutes per collector across the entire period, not daily or team-person-minutes.",
          "minimum": 0
        },
        "session_count": {
          "type": "integer",
          "minimum": 1,
          "maximum": 9007199254740991,
          "description": "Actual number of group sessions in the source records."
        },
        "participants_per_session": {
          "type": "integer",
          "minimum": 1,
          "maximum": 9007199254740991,
          "description": "Source-grounded maximum participants in any session. Sample size cannot exceed session_count times this bound; no default group size is assumed."
        },
        "session_duration_minutes": {
          "type": "number",
          "exclusiveMinimum": true,
          "description": "Source-recorded duration of each group session in this declaration, not an alias for individual interview duration.",
          "minimum": 0
        },
        "collectors_per_session": {
          "type": "integer",
          "minimum": 1,
          "maximum": 9007199254740991,
          "description": "Collectors required concurrently for each group session, drawn from enumerator_count. No default facilitator count is assumed."
        },
        "sample_size": {
          "type": "integer",
          "minimum": 1,
          "maximum": 9007199254740991
        },
        "source_extraction": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "source_ref",
            "fields"
          ],
          "description": "Optional caller-supplied second reading of source facts for conflict comparison only. Not independently authenticated; cannot supply missing primary declarations or establish source authenticity.",
          "properties": {
            "source_ref": {
              "type": "string",
              "minLength": 1,
              "maxLength": 512
            },
            "fields": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "source_modality": {
                  "type": "string",
                  "enum": [
                    "direct_observation",
                    "documentary",
                    "secondary_summary",
                    "unknown"
                  ]
                },
                "collector_relationship": {
                  "type": "string",
                  "enum": [
                    "independent",
                    "employee",
                    "company_staff",
                    "internal",
                    "contractor",
                    "partner",
                    "self_collected",
                    "unknown"
                  ]
                },
                "reviewer_relationship": {
                  "type": "string",
                  "enum": [
                    "independent",
                    "employee",
                    "company_staff",
                    "internal",
                    "contractor",
                    "partner",
                    "self_collected",
                    "unknown"
                  ]
                },
                "interview_mode": {
                  "type": "string",
                  "enum": [
                    "face_to_face",
                    "telephone",
                    "online",
                    "focus_group",
                    "group_interview",
                    "observation",
                    "administrative_record",
                    "unknown"
                  ]
                },
                "collection_administration": {
                  "type": "string",
                  "enum": [
                    "collector_administered",
                    "self_administered",
                    "automated",
                    "unknown"
                  ],
                  "description": "Source-grounded administration, required for online, observation and administrative_record modes. self_administered is supported for online; automated for observation or administrative_record. Face-to-face, telephone and group modes are collector-administered and cannot opt out."
                },
                "enumerator_count": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 9007199254740991
                },
                "interview_duration_minutes": {
                  "type": "number",
                  "exclusiveMinimum": true,
                  "description": "Collector time per individual interview or per observed/processed sample record for collector-administered non-group modes.",
                  "minimum": 0
                },
                "fieldwork_window_minutes": {
                  "type": "number",
                  "exclusiveMinimum": true,
                  "description": "Total available collection minutes per collector across the entire period, not daily or team-person-minutes.",
                  "minimum": 0
                },
                "session_count": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 9007199254740991,
                  "description": "Actual number of group sessions in the source records."
                },
                "participants_per_session": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 9007199254740991,
                  "description": "Source-grounded maximum participants in any session. Sample size cannot exceed session_count times this bound; no default group size is assumed."
                },
                "session_duration_minutes": {
                  "type": "number",
                  "exclusiveMinimum": true,
                  "description": "Source-recorded duration of each group session in this declaration, not an alias for individual interview duration.",
                  "minimum": 0
                },
                "collectors_per_session": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 9007199254740991,
                  "description": "Collectors required concurrently for each group session, drawn from enumerator_count. No default facilitator count is assumed."
                },
                "sample_size": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 9007199254740991
                }
              }
            }
          }
        },
        "collection_tool": {
          "type": "string",
          "enum": [
            "structured_interview_protocol",
            "expert_ethnographic_observation",
            "field_observation",
            "survey_platform_verified",
            "survey_paper_based",
            "key_informant_interview",
            "team_consensus_estimate",
            "founder_intuition",
            "inferred_from_secondary",
            "direct",
            "inferred",
            "secondary_source",
            "corporate_telemetry",
            "database_aggregation",
            "expert_opinion",
            "intercept_interview"
          ]
        },
        "population_size": {
          "type": "integer",
          "minimum": 1
        },
        "population_definition": {
          "type": "string"
        },
        "sampling_method": {
          "type": "string",
          "description": "Use census for a declared complete finite population; this does not override weighted sample admission."
        },
        "is_complete_population": {
          "type": "boolean"
        },
        "census": {
          "type": "boolean",
          "description": "Alias for is_complete_population. Only literal true with consistent positive integer sample_size = population_size enables the disclosure."
        }
      }
    },
    "evidence_type": {
      "type": "string",
      "enum": [
        "public_filing",
        "survey",
        "interview",
        "observation",
        "telemetry",
        "admin_data",
        "evaluation",
        "retail_audit",
        "social_listening",
        "partner_network",
        "program_monitoring"
      ]
    },
    "entity_archetype": {
      "type": "string",
      "enum": [
        "telecom_operator",
        "mobile_money_operator",
        "fintech_platform",
        "financial_services_bank",
        "fintech_lending",
        "logistics_platform",
        "energy_utility",
        "extractives_operator",
        "real_estate_construction",
        "education_provider",
        "passenger_mobility",
        "b2b_saas_platform",
        "healthtech_platform",
        "insurance_platform",
        "fmcg_brand",
        "retail_chain",
        "ecommerce_platform",
        "manufacturer",
        "distributor_network",
        "ngo",
        "development_program",
        "public_institution",
        "survey_dataset",
        "solo_entrepreneur",
        "family_business",
        "cooperative_sacco",
        "cross_border_trader",
        "university_spinout",
        "diaspora_venture",
        "creator_economy_individual",
        "agritech_aggregator",
        "impact_enterprise",
        "religious_institution",
        "chama_savings_group"
      ]
    },
    "source_class": {
      "type": "string",
      "enum": [
        "entity_reported",
        "independently_audited",
        "regulator_published",
        "administrative_record",
        "probability_sample_survey",
        "nonprobability_survey",
        "structured_field_research",
        "third_party_evaluation",
        "retail_audit",
        "telemetry_internal",
        "media_reported"
      ],
      "description": "Source-evidence classes only. Model-inferred artifacts are context and are rejected with ARTIFACT_ROLE_NOT_SOURCE_EVIDENCE."
    },
    "source_grade": {
      "type": "string",
      "enum": [
        "A",
        "B",
        "C",
        "D"
      ]
    },
    "stakeholder_class": {
      "type": "string",
      "enum": [
        "agent",
        "anchor_customer",
        "bank_lender",
        "beneficiary",
        "board",
        "board_member",
        "chama_member",
        "channel_gatekeeper",
        "chief",
        "civil_society_org",
        "clinic",
        "community_guardian",
        "community_leader",
        "competitor",
        "competitors",
        "consumer",
        "cooperative_member",
        "court",
        "courts",
        "creditor",
        "creditors",
        "customary_land_authority",
        "customer",
        "customs",
        "customs_authority",
        "distributor",
        "donor",
        "donor_guardian",
        "enumerator",
        "farmer",
        "field_agent",
        "field_supervisor",
        "gatekeeper",
        "guarantor",
        "guardian",
        "guardian_node",
        "implementing_partner",
        "incumbent",
        "incumbent_competitor",
        "incumbents",
        "influencer",
        "informal_logistics",
        "informal_logistics_partner",
        "institutional_guardian",
        "internal_operations",
        "internal_operator",
        "investor",
        "investor_board",
        "investors",
        "journalist",
        "journalists",
        "judiciary",
        "judiciary_court",
        "labor_union",
        "labour_union",
        "land_custodian",
        "land_owner",
        "landlord",
        "landowner",
        "lender",
        "lender_creditor",
        "lenders",
        "market_queen",
        "media",
        "media_press",
        "member",
        "micro_logistics",
        "mobile_money_agent",
        "organized_labour",
        "platform_partner",
        "political_guardian",
        "press",
        "public_official",
        "regulator",
        "regulatory_body",
        "religious_leader",
        "research_respondent_group",
        "retail_partner",
        "retailer",
        "retailer_partner",
        "revenue_authority",
        "sacco_member",
        "school",
        "service_provider",
        "shareholder",
        "shareholders",
        "supplier",
        "suppliers",
        "tax_authority",
        "tax_revenue_authority",
        "teacher",
        "traditional_chief",
        "union",
        "upstream_supplier",
        "upstream_vendor",
        "vc",
        "vendor",
        "vendors",
        "venture_capital",
        "worker_association",
        "works_council"
      ]
    },
    "guardian_tier": {
      "type": "string",
      "enum": [
        "macro_regulator",
        "meso_community",
        "micro_street"
      ],
      "description": "Guardian role classification, not an adverse score setting. Only guardian evidence activates guardian-specific analysis; stance, observed substance and actual veto authority determine applicable gates. A tier change need not change the verdict."
    },
    "evidence_origin": {
      "type": "string",
      "enum": [
        "public_osint",
        "field_research",
        "mixed",
        "corporate_telemetry",
        "platform_telemetry"
      ],
      "description": "Explicit public documentary survey tables do not require caller fieldwork metadata or become direct field coverage. Contradictory explicit field origins still require reconciliation."
    },
    "collection_method": {
      "type": "string",
      "enum": [
        "structured_interview_protocol",
        "expert_ethnographic_observation",
        "field_observation",
        "survey_platform_verified",
        "survey_paper_based",
        "key_informant_interview",
        "team_consensus_estimate",
        "founder_intuition",
        "inferred_from_secondary",
        "direct",
        "inferred",
        "secondary_source",
        "corporate_telemetry",
        "database_aggregation",
        "expert_opinion",
        "intercept_interview"
      ]
    },
    "source_confidence": {
      "type": "string",
      "enum": [
        "high",
        "medium",
        "low"
      ]
    },
    "stance": {
      "type": "string",
      "enum": [
        "hostile",
        "neutral",
        "friendly",
        "opposed"
      ],
      "description": "Declared stakeholder stance. Opposed or hostile load-bearing evidence requires stakeholder review even when linked as direct_support. This does not rewrite the factual claim relationship or authenticate the source."
    },
    "verification_status": {
      "type": "string",
      "enum": [
        "unverified",
        "self_reported",
        "document_supported",
        "independently_verified",
        "verified",
        "disputed"
      ],
      "description": "Caller declaration, not independent verification. No confidence boost from this label. Disputed evidence blocks authorization until reconciled or segregated."
    },
    "freshness_date": {
      "type": "string",
      "format": "date"
    },
    "evidence_geography": {
      "type": "object",
      "properties": {
        "country": {
          "type": "string",
          "enum": [
            "AD",
            "AE",
            "AF",
            "AG",
            "AI",
            "AL",
            "AM",
            "AO",
            "AQ",
            "AR",
            "AS",
            "AT",
            "AU",
            "AW",
            "AX",
            "AZ",
            "BA",
            "BB",
            "BD",
            "BE",
            "BF",
            "BG",
            "BH",
            "BI",
            "BJ",
            "BL",
            "BM",
            "BN",
            "BO",
            "BQ",
            "BR",
            "BS",
            "BT",
            "BV",
            "BW",
            "BY",
            "BZ",
            "CA",
            "CC",
            "CD",
            "CF",
            "CG",
            "CH",
            "CI",
            "CK",
            "CL",
            "CM",
            "CN",
            "CO",
            "CR",
            "CU",
            "CV",
            "CW",
            "CX",
            "CY",
            "CZ",
            "DE",
            "DJ",
            "DK",
            "DM",
            "DO",
            "DZ",
            "EC",
            "EE",
            "EG",
            "EH",
            "ER",
            "ES",
            "ET",
            "FI",
            "FJ",
            "FK",
            "FM",
            "FO",
            "FR",
            "GA",
            "GB",
            "GD",
            "GE",
            "GF",
            "GG",
            "GH",
            "GI",
            "GL",
            "GM",
            "GN",
            "GP",
            "GQ",
            "GR",
            "GS",
            "GT",
            "GU",
            "GW",
            "GY",
            "HK",
            "HM",
            "HN",
            "HR",
            "HT",
            "HU",
            "ID",
            "IE",
            "IL",
            "IM",
            "IN",
            "IO",
            "IQ",
            "IR",
            "IS",
            "IT",
            "JE",
            "JM",
            "JO",
            "JP",
            "KE",
            "KG",
            "KH",
            "KI",
            "KM",
            "KN",
            "KP",
            "KR",
            "KW",
            "KY",
            "KZ",
            "LA",
            "LB",
            "LC",
            "LI",
            "LK",
            "LR",
            "LS",
            "LT",
            "LU",
            "LV",
            "LY",
            "MA",
            "MC",
            "MD",
            "ME",
            "MF",
            "MG",
            "MH",
            "MK",
            "ML",
            "MM",
            "MN",
            "MO",
            "MP",
            "MQ",
            "MR",
            "MS",
            "MT",
            "MU",
            "MV",
            "MW",
            "MX",
            "MY",
            "MZ",
            "NA",
            "NC",
            "NE",
            "NF",
            "NG",
            "NI",
            "NL",
            "NO",
            "NP",
            "NR",
            "NU",
            "NZ",
            "OM",
            "PA",
            "PE",
            "PF",
            "PG",
            "PH",
            "PK",
            "PL",
            "PM",
            "PN",
            "PR",
            "PS",
            "PT",
            "PW",
            "PY",
            "QA",
            "RE",
            "RO",
            "RS",
            "RU",
            "RW",
            "SA",
            "SB",
            "SC",
            "SD",
            "SE",
            "SG",
            "SH",
            "SI",
            "SJ",
            "SK",
            "SL",
            "SM",
            "SN",
            "SO",
            "SR",
            "SS",
            "ST",
            "SV",
            "SX",
            "SY",
            "SZ",
            "TC",
            "TD",
            "TF",
            "TG",
            "TH",
            "TJ",
            "TK",
            "TL",
            "TM",
            "TN",
            "TO",
            "TR",
            "TT",
            "TV",
            "TW",
            "TZ",
            "UA",
            "UG",
            "UM",
            "US",
            "UY",
            "UZ",
            "VA",
            "VC",
            "VE",
            "VG",
            "VI",
            "VN",
            "VU",
            "WF",
            "WS",
            "YE",
            "YT",
            "ZA",
            "ZM",
            "ZW"
          ]
        },
        "region": {
          "type": "string"
        },
        "city": {
          "type": "string"
        },
        "district": {
          "type": "string",
          "pattern": "\\S"
        },
        "districts": {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "\\S"
          }
        },
        "town_or_zone": {
          "type": "string"
        }
      },
      "description": "Use a supported ISO country code, not a country name. Explicit districts declare source coverage, not authenticity or representativeness. Do not relabel geography to match the decision."
    },
    "geography": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "object",
          "properties": {
            "district": {
              "type": "string",
              "pattern": "\\S"
            },
            "districts": {
              "type": "array",
              "items": {
                "type": "string",
                "pattern": "\\S"
              }
            }
          },
          "additionalProperties": true
        }
      ]
    },
    "temporal": {
      "type": "object",
      "properties": {
        "freshness_date": {
          "type": "string",
          "description": "ISO calendar date for the collection/freshness alias. Must satisfy the same runtime date checks as freshness_date."
        },
        "expired": {
          "type": "boolean",
          "description": "Literal true requires review for decision-relevant evidence, regardless of a recent source date."
        }
      }
    },
    "public_metric_scope": {
      "type": "string",
      "enum": [
        "entity_scale",
        "country_scale",
        "regional_scale",
        "city_scale",
        "site_scale"
      ]
    },
    "public_metrics": {
      "type": "object"
    },
    "structured_values": {
      "type": "object",
      "description": "Ingestible field-observed MVR dimension values. Canonical production scale is 0-100. Accepted core keys: permission, trust, belonging, embeddedness, reciprocity, cultural_fit, guardian_strength, continuity, channel_permission, infrastructural_intimacy, absence_sensitivity, narrative_looping, whispered_credibility, fractal_trust, cultural_calibration. Agent-safety note: if at least two valid core dimensions on the same evidence item are all between 0 and 1, the worker normalizes them from fractional 0-1 to 0-100 before scoring; production clients should still send 0-100 to avoid ambiguity. Do not submit derived concepts such as evidence_completeness, market_carry, local_legitimacy; submit the listed underlying dimensions instead.",
      "additionalProperties": {
        "type": "number",
        "minimum": 0,
        "maximum": 100
      },
      "x-ingestible-dimensions": [
        "permission",
        "trust",
        "belonging",
        "embeddedness",
        "reciprocity",
        "cultural_fit",
        "guardian_strength",
        "continuity",
        "channel_permission",
        "infrastructural_intimacy",
        "absence_sensitivity",
        "narrative_looping",
        "whispered_credibility",
        "fractal_trust",
        "cultural_calibration"
      ],
      "x-derived-concepts": [
        "evidence_completeness",
        "market_carry",
        "local_legitimacy"
      ],
      "x-canonical-scale": "0-100",
      "x-fraction-scale-normalization": "unambiguous 0-1 core-dimension rows are normalized to 0-100"
    },
    "structured_values_scale": {
      "type": "string",
      "description": "Optional hint for agents. Use '0-1 fraction' only when sending fractional structured_values; otherwise omit and send canonical 0-100 scores."
    },
    "behavioral_values": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "30_day_active_retention_percent": {
          "type": "number",
          "minimum": 0,
          "maximum": 100
    

# --- truncated at 32 KB (43 KB total) ---
# Full source: https://artifacts.apis.io/africanmarketos-com/json-schema/africanmarketos-com-evidence-item-schema.json

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/africanmarketos-com-evidence-item"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.