The Africore REST API provides programmatic access to the Africore tokenization protocol — including asset listings, token issuance, cross-chain bridge operations, oracle price feeds, node data, and webhooks.
Base URL:
https://api.africore.io/v1
Authentication: All requests require a bearer token in the Authorization header:
Authorization: Bearer YOUR_API_KEY
All responses are JSON. Timestamps are ISO 8601 UTC. Rate limits: 100 req/min for standard keys; 1,000 req/min for institutional keys.
Example request:
curl -X GET https://api.africore.io/v1/assets \ -H "Authorization: Bearer afr_live_xxxxxxxxxxxx" \ -H "Content-Type: application/json"
API keys are issued per approved account through the Africore developer portal. Keys are prefixed afr_live_ for mainnet and afr_test_ for testnet. Two permission scopes are available: read-only and read-write.
| Key Tier | Scope | Access Level |
|---|---|---|
| Standard | read-only | Public asset data, oracle prices, node listings |
| Developer | read-write | Testnet operations — tokenization, bridge, webhooks |
| Institutional | read-write | Mainnet + private asset data, full tokenization API |
Retrieve tokenized assets from the Africore protocol registry. Public assets are accessible with a standard read-only key.
Query Parameters — GET /assets
| Parameter | Type | Required | Description |
|---|---|---|---|
| limit | integer | Optional | Number of results to return (default: 20, max: 100) |
| offset | integer | Optional | Pagination offset (default: 0) |
| jurisdiction | string | Optional | Filter by country code — ISO 3166-1 alpha-2 (e.g. KE, ZA) |
| category | enum | Optional | real-estate | agriculture | infrastructure | solar | minerals |
Example Response
[
{
"asset_id": "afr_asset_ke_0041",
"name": "Nairobi Farmland Portfolio — Block 7",
"jurisdiction": "KE",
"category": "agriculture",
"valuation_usd": 2400000,
"yield_rate_pct": 8.4,
"compliance_status": "verified",
"token_address": "0x3fA8B653F9aB942e0b28DcA4..."
}
]The tokenization API is available to approved institutional issuers only. Submit real-world assets for on-chain tokenization and track job status through the compliance pipeline.
Request Body — POST /tokenize
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_namerequired | string | Full legal name of the asset being tokenized | |
| jurisdictionrequired | string | ISO 3166-1 alpha-2 country code of asset location | |
| valuation_usdrequired | number | Current appraised value of the asset in USD | |
| asset_categoryrequired | enum | real-estate | agriculture | infrastructure | solar | minerals |
|
| legal_doc_urlrequired | string | Secure URL to legal title documentation (must be HTTPS) | |
| compliance_refrequired | string | Reference number from approved Africore compliance partner |
Example Response
{
"job_id": "tok_job_20260410_0087",
"status": "pending_review",
"estimated_completion": "2026-04-12T14:00:00Z",
"assigned_compliance_officer": "co_nairobi_003"
}The Africore Bridge enables cross-chain transfer of tokenized assets between Africore Chain and major EVM networks. Permissioned bridging preserves KYC/AML compliance across chains. Supported chains: africore | ethereum | polygon | bnb | arbitrum
Request Body — POST /bridge/transfer
| Parameter | Type | Required | Description |
|---|---|---|---|
| asset_idrequired | string | Africore asset identifier to transfer | |
| amountrequired | number | Token amount to bridge (in smallest token unit) | |
| source_chainrequired | enum | Origin chain: africore | ethereum | polygon | bnb | arbitrum |
|
| destination_chainrequired | enum | Destination chain (same enum as source_chain) | |
| recipient_addressrequired | string | Destination wallet address (must be KYC-verified on Africore) |
The Africore Oracle Network delivers real-time and historical price data for tokenized assets. Prices are aggregated from multiple on-the-ground data sources, signed on-chain for immutability, and surfaced via these endpoints.
Example Response — GET /oracle/price/{asset_id}
{
"asset_id": "afr_asset_ke_0041",
"price_usd": 2418500,
"last_updated": "2026-04-10T08:30:00Z",
"source_count": 7,
"confidence_score": 0.94
}confidence_score ranges from 0.0 to 1.0, reflecting oracle consensus across data sources. Scores below 0.6 are flagged for manual review.
Query active infrastructure nodes on the Africore network. Node operators earn AFRI and USDC rewards for running oracle infrastructure and providing network uptime.
Example Response — GET /nodes/{node_id}
{
"node_id": "node_ng_0014",
"tier": "genesis",
"owner_address": "0xaBc12...F9e4",
"uptime_pct": 99.7,
"earnings_afri": 1240.5,
"earnings_usdc": 310.12,
"last_reward_at": "2026-04-09T00:00:00Z"
}Register a public HTTPS endpoint to receive real-time protocol events. Africore will POST a signed JSON payload to your endpoint whenever a subscribed event occurs.
Available Events
| Event | Description |
|---|---|
| asset.tokenized | A new asset has been successfully tokenized and listed on-chain |
| asset.valuation_updated | Oracle has updated the valuation for a tracked asset |
| yield.distributed | Yield distribution has been executed for a tokenized asset |
| bridge.transfer_complete | A cross-chain bridge transfer has reached finality |
| node.reward_issued | A node operator reward has been distributed |
Payload Envelope
{
"event": "yield.distributed",
"timestamp": "2026-04-10T12:00:00Z",
"data": { ... }
}All webhook payloads include a X-Africore-Signature header containing an HMAC-SHA256 signature of the payload body, using your webhook secret as the key. Verify this signature before processing events.
All error responses follow a consistent envelope format. Inspect code for machine-readable error classification and message for a human-readable description.
Error Envelope
{
"code": "ERR_VALIDATION",
"message": "Required field 'jurisdiction' is missing.",
"details": { "field": "jurisdiction" }
}HTTP Status Codes
| Status | Code | Description |
|---|---|---|
| 400 | ERR_VALIDATION | Request body or query parameters failed validation |
| 401 | ERR_AUTH_INVALID | API key missing, expired, or invalid |
| 403 | ERR_FORBIDDEN | API key lacks required scope for this operation |
| 404 | ERR_NOT_FOUND | Requested resource does not exist |
| 422 | ERR_COMPLIANCE_FAIL | Request was rejected due to a compliance or KYC/AML failure |
| 429 | ERR_RATE_LIMIT | Rate limit exceeded — back off and retry after the indicated window |
| 500 | ERR_INTERNAL | Unexpected server error — contact support if this persists |