# Mobile CMS — frontend

Public, no auth:

```
GET /api/v1/app-content
```

Use this one payload for onboarding, loan-type info, WhatsApp desk, and legal links.

## Response

```json
{
  "data": {
    "onboarding": [
      {
        "id": 1,
        "title": "Take Control of Your Finances",
        "subtitle": "Access the financial support you need...",
        "image_url": "https://api.example.com/storage/onboarding/onboarding_1_....jpg",
        "sort_order": 1
      }
    ],
    "loan_snapshot": {
      "setoff_info": "Interest and applicable fees are deducted upfront...",
      "capitalize_info": "You receive the full approved loan amount requested..."
    },
    "support": {
      "email": "support@nextpayday.co",
      "whatsapp_desk": [
        {
          "id": 1,
          "title": "Chat with Osere",
          "phone": "8130000000",
          "url": "https://wa.me/8130000000"
        }
      ]
    },
    "legals": [
      {
        "type": "terms",
        "title": "Terms and Conditions",
        "subtitle": "Access more offers and more features",
        "url": "https://nextpayday.co/terms"
      }
    ]
  }
}
```

Inactive slides/agents are not returned. Arrays can be empty. `image_url` and legal `url` are `null` until admin fills them in.

## How to use it

**Onboarding**  
Show slides in `sort_order`. Image is **330×375**. Skip a slide if `image_url` is null.

**Loan snapshot**  
`setoff_info` → Set-Off / Settle info popup.  
`capitalize_info` → Capitalize info popup.

**WhatsApp desk**  
List `support.whatsapp_desk`. Open `url` (already `https://wa.me/{number}`). Do not rebuild the link.  
Email support: `mailto:` + `support.email`.

**Legals**  
Open `url` **outside the app** (external browser / popup). Do not render HTML in-app. Hide an item if `url` is null.

Same legal list is also on `GET /api/v1/legals/menu` (`{ "legals": [...] }`). Prefer `/app-content` so you only fetch once.
