Guides for getting started on the platform, plus API reference for developers integrating with Porta.
Porta brings management & Lite Web, Lite Booking, Marketplace, Lite Shop, Boost, Utilities, Finance and Rewards into a single account. This guide covers the basics of getting set up, followed by a reference for developers building on top of the Porta API.
Sign up with your email or phone number from the Porta app or at portahq.net/app. You'll be asked to verify your email and complete identity verification (KYC) before you can send payments, host paid events, or list products, see our KYC Policy for what's required.
From your dashboard, choose Lite Web → Create Page. Add your business name, logo, bio, and links to your social profiles. You can attach a booking calendar, product listings, or a simple contact form, enable only what you need.
Your Lite Web URL is reserved once claimed. Choose a handle you'll want to keep, it can be changed later from Settings, but existing links won't redirect automatically.
Add funds via bank transfer or card from Finance → Wallet → Add Money. Funds are typically available within a few minutes for cards and up to a few hours for bank transfers, depending on your bank.
To host an event, go to Lite Booking → Create Event, set your ticket tiers and capacity, and publish. Attendees receive a digital ticket with a QR code you can scan at the door using the Porta organizer app.
Sellers list products under Marketplace → My Listings. Orders, shipping status and buyer messages are managed from the same screen. Lite Shop purchases are handled the same way from the buyer side, with delivery tracking for supported categories.
Choose a platform (Instagram, TikTok, YouTube, and more), select a package, and provide the content link. Delivery times vary by package and are shown before you confirm.
Pay airtime, data, TV subscriptions and electricity bills from Utilities. Enter the recipient details, confirm the amount, and pay from your wallet or card, no markup on face-value bills.
The Porta API lets you reach your own data on Porta, your LiteShop orders, wallet balance, Lite Fund campaigns, System invoices, Lite Gigs, LiteBookings events and P2P orders, from your own website or backend, using a single set of credentials that covers every service. It's a REST API: JSON in, JSON out, one base URL, plain HTTP status codes.
AML/fraud detection and KYC/verification are internal risk-control systems and are not exposed through this API, in any scope, under any plan. Everything else Porta does is either live below or listed as coming soon.
There are two independent ways to unlock API access. Either one is enough on its own, they don't stack into a discount on each other:
Once either path applies to your account, generate your credentials from Management → Developer → API Keys in the app. That screen is also where you turn individual services on or off, regenerate, stop, or permanently delete your credentials, all of it is covered under Managing Credentials below.
Porta issues one credential set per developer account: an API key, a secret, and a passkey. Unlike a typical single-token API, all three are required on every request, sent as three separate headers. A leaked key alone (for example, accidentally logged by your own server) is not enough on its own to authenticate:
All three are shown to you exactly once, at the moment you create or regenerate your credentials. Porta stores only a hash of each, never the original values, the same way your account password is handled, so if you lose them, the only recovery path is to regenerate a fresh set (see Managing Credentials).
Keep all three values server-side. Never ship them in client-side JavaScript, a mobile app bundle, or a public repo, treat them like a database password.
Your credential set doesn't call everything by default, you choose which services it's allowed to reach from Management → Developer → API Keys, where each service has its own on/off toggle. A request to a service you haven't enabled returns 403, even with a valid key/secret/passkey. Turn on only what you actually use.
| Scope | Covers | Status |
|---|---|---|
liteshop | Your stores' orders, products and inventory | Live |
wallet | Your Porta wallet balance and transaction history | Live |
litefund | Your fundraising campaigns and donations received | Live |
system | Your System invoices and their payment status | Live |
gigs | Your Lite Gigs listings and orders | Live |
bookings | Your LiteBookings events and their bookings | Live |
p2p | Your P2P ads and orders (trade execution only) | Live |
liteweb | Your LiteWeb page content and site stats | Live |
liteform | Your forms and their submission counts | Live |
boost | Your Boost campaigns and delivery status | Live |
accounts | Your purchased Accounts S1/S2 inventory | Live |
numbers | Your purchased virtual numbers | Live |
telly | Send a message to Ask Telly and get a reply | Live |
requests | Your posted requests and offers received | Live |
payments | Your fiat and crypto payment/checkout links and their status | Live |
pngn | Your pNGN balance and transfer history | Live |
convert | Live conversion rate quotes between supported currencies/assets | Live |
Every scope in the table above is live. If we ever add a new one ahead of its endpoint being ready, it'll show as "coming soon" here and you can still toggle it on early - calling it before it's live just returns 404 with a message pointing back to this page.
Prices differ for every product and service, such as each account type, number, Boost package and utility plan, and they can change when provider costs change. Developer prices, which apply to requests made with your API key, are listed next to the Agent prices and the Porta user prices with the product ID for each item.
View the full list on the pricing page and search by product name or product ID before you integrate.
Every endpoint below is read access to data your account already owns and requires its matching scope to be enabled. All are GET except POST /telly/ask, which sends a message. Every response is JSON with a top-level success boolean.
GET /liteshop/orders requires liteshopYour own LiteShop stores' most recent 100 orders, across every store you own, newest first.
GET /wallet/balance requires walletYour current Porta wallet balance, in Naira.
GET /wallet/transactions requires walletYour most recent 100 wallet transactions, newest first.
GET /litefund/campaigns requires litefundYour Lite Fund campaigns, with live raised/target amounts.
GET /liteweb/page requires litewebYour LiteWeb page, its links in order, and total visit/click counts. page is null if you haven't created a LiteWeb page yet.
GET /liteform/forms requires liteformYour Lite Forms, most recent 100, each with its total submission count.
GET /system/invoices requires systemYour System invoices, most recent 100.
GET /boost/campaigns requires boostYour Boost campaigns, most recent 100.
GET /accounts/orders requires accountsYour purchased Accounts S1 & S2 inventory, most recent 100, across both servers.
GET /numbers/rentals requires numbersYour purchased virtual numbers, most recent 100.
GET /gigs requires gigsYour Lite Gigs listings.
GET /bookings/events requires bookingsEvents you host on LiteBookings.
GET /p2p/orders requires p2pYour P2P trade orders, on either side (buy or sell). This is trade execution status only, it does not expose Porta's AML/fraud or KYC/verification systems.
POST /telly/ask requires tellySend Ask Telly a message and get a reply, the same assistant the in-app widget uses, on the plain "Ask Telly" mode only (Ask Business/Ask Trade are never reachable through this API). Send either message (a single string) or messages (a full array of {role, content} turns for multi-turn context). Counts against your account's monthly Ask Telly credit allowance, same as the in-app widget.
GET /requests/list requires requestsRequests you've posted (custom quote requests or catalog eSIMs), most recent 100.
GET /payments/links requires paymentsYour fiat checkout links (Lite Shop "pay for me" / "split the bill" links, across every store you own) and your crypto payment invoices, each most recent 100.
GET /pngn/wallet requires pngnYour pNGN wallet balance (the same figure /wallet/balance reports) plus your most recent 100 internal pNGN transfers to/from other Porta users.
GET /convert/quote requires convertA live rate quote between two supported currencies/assets - not a trade execution, just pricing. from/to accept NGN (or pNGN, treated the same) plus any supported crypto ticker (e.g. USDT, USDC, BTC). amount is denominated in whichever currency you're converting from. Optional network disambiguates a multi-chain asset (e.g. TRC20 vs BEP20 for USDT) when converting from NGN/pNGN into it.
Everything below lives in the app, under Management → Developer → API Keys:
Errors always come back as JSON with success: false and a human-readable error message.
| Status | Meaning |
|---|---|
401 | Missing or invalid credentials, check all three headers are present and correct. |
403 | Valid credentials, but that scope isn't enabled for this request. Enable it under API Keys. |
404 | Unknown route, or a "coming soon" scope with no live endpoint yet. |
405 | Wrong HTTP method for that route (every endpoint is GET except POST /telly/ask). |
429 | Rate limit exceeded, see Rate Limits. |
500 | Something went wrong on Porta's side. Safe to retry with backoff. |
Subscribe to events, like liteshop.order.created, so your systems find out the moment something happens, rather than polling. Configure endpoints from Management → Developer → Webhooks. Each delivery is a signed POST to your URL:
Verify the signature before trusting a payload, recompute the HMAC-SHA256 of the exact raw request body using your webhook's secret (shown once, at creation, same rule as the API credentials above) and compare it to X-Porta-Signature.
A slow or unreachable receiver never blocks the underlying Porta action, deliveries are fire-and-forget with an 8-second timeout, so treat your webhook handler as best-effort notification, not a required step in your own critical path.
API requests are limited to 60 requests per minute per credential set, on a fixed 60-second window. Exceeding this returns 429 with a Retry-After header (seconds until the window resets). If you need a higher limit for a production integration, contact portadigitalplc@gmail.com with your use case.