F
Developers

The Fineduc REST API.

The same API our own dashboard runs on. Nothing separate, nothing held back: what the app can do, you can do.

Base URL

https://api.fineeduc.com

Authentication

Every call carries a JWT in the Authorization header. You get one by signing in with your school account; it is scoped to that school and reaches nothing else.

Authorization: Bearer <access_token>

Try a request

These calls go to the production API, straight from your browser. Nothing passes through our web servers.

Held in memory only, never stored. Close the tab and it is gone.

Get a token

Replace :id and other parameters with real values.

Response

No request sent yet.

Endpoints

Authentication

  • POST/auth/login-schoolSigns in to a school and returns the tokens.
  • POST/auth/refreshExchanges a refresh token for a new access token.
  • GET/auth/meThe current user and their role.
  • POST/auth/logoutRevokes the session.

Students

  • GET/studentsPaginated, filterable list.
  • GET/students/:idOne student’s full record.
  • POST/students/:id/enrollEnrols the student and generates their instalments.
  • GET/students/:id/guardiansThe paying guardians attached to them.

Billing

  • GET/fee-schedulesFee schedules.
  • POST/fee-schedules/:id/publishPublishes a version — it becomes immutable.
  • GET/invoices/:idOne invoice and its instalments.
  • GET/invoices/:studentId/statementA student’s statement: owed, paid, outstanding.

Cash desk

  • POST/cash-sessionsOpens a session with a starting float.
  • POST/cash-sessions/paymentsRecords a cash payment.
  • GET/cash-sessions/:id/expectedWhat the drawer should hold right now.
  • POST/cash-sessions/:id/closeCloses with a count; any variance needs a reason.

Online payment

  • GET/pay/:tokenThe public parent page — no session needed.
  • POST/pay/:token/initiateStarts a mobile money or card payment.

Payment delays

  • GET/moratoire/:tokenThe parent-facing delay request.
  • POST/moratoriums/:id/approveGrants the delay and reschedules the instalments.
  • POST/moratoriums/:id/refuseRefuses the request, with a reason.

Subscription

  • GET/tenant/subscriptionThe plan, the deadline and the time remaining.
  • POST/tenant/subscription/checkoutOpens a renewal payment.

Service

  • GET/healthLiveness probe.
  • GET/health/readyDatabase and Redis reachable.

Errors

Every error follows RFC 9457 (application/problem+json). The code field is stable and meant for your code; detail is written for a human and may be reworded.

{
  "type": ".../errors/HTTP_402",
  "title": "PaymentRequired",
  "status": 402,
  "code": "SUBSCRIPTION_LAPSED",
  "detail": "…",
  "traceId": "…"
}

Rate limits

Per minute, per IP: 10 on auth routes, 30 on the public payment pages, 120 on webhooks. Exceeding one returns 429 with the standard RateLimit headers.

API keys: not yet

There is no API key today that lets a third-party service call Fineduc without a session. Authentication is by user token only. We would rather say so than document something you could not actually use.

Ready to recover what your school loses every year?

Send your request in 2 minutes. Our team reviews it within 24 hours and sends you your access details — then 7 days free.