Navigation
~/ menu
v1.0

API

API Documentation

RESTful JSON API for programmatic access to project data.

https://ademolajoshua.dev/api 60 req/min

Projects

Project data including technologies and metrics

GET /api/projects

Lists all published projects.

{
  "data": [
    {
      "id": 1,
      "name": "FinPay",
      "domain": "FinTech",
      "tagline": "Real-time payment processing platform",
      "status": "active",
      "is_featured": true,
      "technologies": ["Laravel", "Redis", "PostgreSQL"],
      "metrics": [
        { "key": "uptime", "value": "99.99", "unit": "%" }
      ]
    }
  ]
}
GET /api/projects/{id}

Single project with full details.

id integer, required Project ID
{
  "data": {
    "id": 1,
    "name": "FinPay",
    "domain": "FinTech",
    "overview": "Full project description...",
    "status": "active",
    "architecture_data": { ... },
    "interfaces": [ ... ],
    "metrics": [ ... ],
    "technologies": [ ... ]
  }
}

Interfaces

GET /api/interfaces

All interface screenshots. Filter with ?project_id=

{
  "data": [
    {
      "id": 1,
      "project_id": 1,
      "screen_name": "Dashboard",
      "device_type": "desktop",
      "feature_tag": "analytics",
      "image_path": "/storage/interfaces/1/dashboard.png"
    }
  ]
}

Metrics

GET /api/metrics

All project metrics — performance stats, uptime, throughput.

{
  "data": [
    {
      "id": 1,
      "project_id": 1,
      "metric_key": "uptime",
      "metric_value": "99.99",
      "metric_unit": "%",
      "metric_label": "System Uptime"
    }
  ]
}

Technology Stack

GET /api/stacks

All technologies with categories and project counts.

{
  "data": [
    {
      "id": 1,
      "name": "Laravel",
      "category": "Backend",
      "icon": "laravel",
      "projects_count": 4
    }
  ]
}

Error Responses

404 Resource not found
429 Rate limit exceeded
500 Internal server error
~/joshua.ai live
JA

Joshua Ademola

$ rm -rf ./messages are you sure?

>_
processing
$ connect --live joshua@portfolio

// optional helps Joshua personalise his reply

$

send shift+ newline

minimised click to expand