Rovas exposes a REST API so partners, plugins, and apps can create accounts, file work reports, read Merits, and plug into NeoFund products such as Civic.
| Environment | Base URL |
|---|---|
| Production | https://rovas.app |
| Development | https://dev.rovas.app |
Service paths use the prefix /rovas. OAuth protocol paths use /oauth2.
Send Accept: application/json and, for POST/PUT bodies, Content-Type: application/json.
If you are planning an integration, contact us — we can provision partner access and review your use case.
Which API should I use?
| Model | How you authenticate | Best for |
|---|---|---|
| Classic | HTTP headers API-KEY and TOKEN |
Partner backends, website plugins, server-to-server jobs |
| OAuth 2 (Bearer) | Authorization: Bearer <access_token> |
Mobile / SPA clients with browser login (e.g. Civic) |
Do not mix both on one request. Classic endpoints expect API keys; Civic-oriented endpoints have API-key auth disabled and expect Bearer (or are public).
Classic API — how to use it
Credentials
- Sign in to Rovas and open My account → Rovas API.
- Generate credentials for the
rovas_endpointendpoint. - On each authenticated call, send:
API-KEY: <your api key>
TOKEN: <your token>
Each key pair belongs to one Rovas user. Calls run as that user.
Partner signup (create or link an end user)
Charities and other partners that create Rovas accounts for donors or members need a technical account with the api client role (assigned by NeoFund/Rovas admins). That account’s API key is used only for account provisioning.
Preferred endpoint
POST /rovas/rovas_partner_user
Legacy equivalent: POST /rovas/rules/rules_create_user (same body and response).
Request body (required fields)
| Field | Description |
|---|---|
user_name |
Display name |
user_id |
Your external numeric user id |
user_email |
Email (used to find an existing Rovas account) |
user_country |
ISO 3166-1 alpha-2, uppercase (e.g. SK) |
user_language |
Language code (e.g. sk, en) |
server_url |
Your site base URL (e.g. https://partner.example/) |
Optional: hybridauth_provider (defaults to Nabezky if empty), partner_client_id.
List allowed providers: GET /rovas/rovas_hybridauth_providers.json (usually public).
Success response
{
"rovas_uid": 123,
"api_key": "…",
"token": "…"
}
Store the returned api_key / token and use them as API-KEY / TOKEN for later calls on behalf of that end user.
Example
curl -sS -X POST "https://rovas.app/rovas/rovas_partner_user" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "API-KEY: $PARTNER_API_KEY" \
-H "TOKEN: $PARTNER_TOKEN" \
-d '{
"user_name": "Jane Partner User",
"user_id": 12345,
"user_email": "jane@example.com",
"user_country": "SK",
"user_language": "en",
"server_url": "https://partner.example/",
"hybridauth_provider": "Nabezky"
}'
Typical errors: 400 validation, 401 bad credentials, 403 missing api client permission.
Classic endpoint reference
Request/response schemas for these calls are maintained in an OpenAPI file (available on request). Summary:
Accounts & balances
| Method | Path | Auth | Purpose |
|---|---|---|---|
POST |
/rovas/rovas_partner_user |
API-KEY | Create or link user (preferred) |
POST |
/rovas/rules/rules_create_user |
API-KEY | Create or link user (legacy) |
GET |
/rovas/rovas_hybridauth_providers.json |
Public* | HybridAuth providers |
POST |
/rovas/rules/rules_fetch_user_data |
API-KEY | Profile for key owner |
POST |
/rovas/rules/rules_users_chrons |
API-KEY | Chron balances |
POST |
/rovas/rules/rules_user_s_merits |
API-KEY | Merit balances |
POST |
/rovas/rules/rules_check_enabled_language |
API-KEY | Language enabled? |
*When “Disable API keys authentication” is enabled for that resource.
Projects & work reports
| Method | Path | Auth | Purpose |
|---|---|---|---|
POST |
/rovas/rules/rules_proxy_create_new_project |
API-KEY | Create project |
POST |
/rovas/rules/rules_proxy_delete_project |
API-KEY | Delete project |
POST |
/rovas/rules/rules_proxy_create_work_report |
API-KEY | Create work report |
POST |
/rovas/rules/rules_proxy_delete_work_report |
API-KEY | Delete work report |
POST |
/rovas/rules/rules_proxy_report_editability |
API-KEY | Editable? |
POST |
/rovas/rules/rules_proxy_work_report_verifiability |
API-KEY | Verifiable by caller? |
POST |
/rovas/rules/rules_proxy_report_verification_status |
API-KEY | Verification status |
POST |
/rovas/rules/rules_create_verification |
API-KEY | Submit verification |
POST |
/rovas/rules/rules_create_verification_with_acccess_token |
Public | Verification via access token |
POST |
/rovas/rules/rules_proxy_reward_work_report |
API-KEY | Reward work report |
GET |
/rovas/rovas_verifications.json |
API-KEY | List verifications |
PUT |
/rovas/node/{id} |
API-KEY | Update owned node |
DELETE |
/rovas/node/{id} |
API-KEY | Delete owned node |
Shares, purchases, quotes
| Method | Path | Auth | Purpose |
|---|---|---|---|
POST |
/rovas/rules/rules_proxy_check_or_add_shareholder |
API-KEY | Ensure user share |
POST |
/rovas/rules/rules_proxy_check_or_add_project_shareholder |
API-KEY | Ensure project share |
POST |
/rovas/rules/rules_proxy_purchase_product |
API-KEY | Process purchase |
POST |
/rovas/rules/rules_proxy_create_aur |
API-KEY | Asset usage fee record |
POST |
/rovas/rules/rules_get_merits_for_projects |
API-KEY | Merits for project IDs |
POST |
/rovas/rules/rules_convert_euros_to_chrons |
API-KEY | EUR → Chron quote |
POST |
/rovas/rules/rules_convert_euros_to_chrons_reverse |
API-KEY | Chron → EUR quote |
Views
| Method | Path | Purpose |
|---|---|---|
GET |
/rovas/views/top_10_workers_in_a_category |
Top workers in a category |
GET |
/rovas/views/project_merits_feed |
Top rewarders of a project |
GET |
/rovas/views/projects_merits |
Top users for same-site projects |
OAuth 2 / Bearer — how to use it
OAuth is used by NeoFund’s Civic app and by other clients we register. New products need their own OAuth client — do not reuse Civic’s client_id from a third-party app.
Protocol endpoints
| Step | URL |
|---|---|
| Authorize | {base}/oauth2/authorize |
| Token | {base}/oauth2/token |
| Revoke | {base}/oauth2/revoke |
| Introspect | {base}/oauth2/tokens/{access_token} |
Civic client (reference)
| Setting | Value |
|---|---|
client_id |
civic |
| Client type | Public (no secret) |
| Grants | Authorization code + refresh token |
| PKCE | Required (S256) |
| Scope | user_profile |
| Redirect | civic://oauth/callback |
Authorize query extras: lang=sk|en, intent=login|register.
Call an API with Bearer
curl -sS "https://rovas.app/rovas/me" \
-H "Accept: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN"
Example GET /rovas/me response:
{
"uid": 42,
"username": "sano",
"display_name": "Alexander Žaťko",
"total_me": 1248.35,
"total_chr": 320.0,
"created": "2019-03-12T14:22:01+00:00",
"language": "sk",
"receipt_history_retention": null
}
OAuth / Civic endpoint reference
Auth labels: Bearer = required access token; Public = no token; Optional Bearer = public, with extra fields when signed in.
Home & profile
| Method | Path | Auth | Purpose |
|---|---|---|---|
GET |
/rovas/me |
Bearer | Signed-in profile + Merit/Chron totals |
GET |
/rovas/contributions/aggregate |
Public | Community Merit total |
GET |
/rovas/merit_distribution |
Optional Bearer | Merit histogram |
POST |
/rovas/civic_receipt_history_preference |
Bearer | Receipt history retention |
GET |
/rovas/civic_merit_history |
Bearer | Personal Merit ledger |
Users
| Method | Path | Auth | Purpose |
|---|---|---|---|
GET |
/rovas/users_search?query= |
Bearer | User typeahead (use query, not q) |
GET |
/rovas/users_lookup?username= |
Bearer | Community profile |
Tax (VAT) claims
| Method | Path | Auth | Purpose |
|---|---|---|---|
POST |
/rovas/rules/rules_proxy_claim_vat_receipt |
Bearer | Claim eKasa VAT as Merits |
GET |
/rovas/civic_claims |
Bearer | Lists (view=submitted|received) or status (receipt_uid=) |
GET |
/rovas/civic_claims/summary |
Bearer | Claim totals |
GET |
/rovas/civic_national_hourly_rate?country= |
Public | National hourly rate |
Projects & public-benefit orgs
| Method | Path | Auth | Purpose |
|---|---|---|---|
GET |
/rovas/civic_project/{nid} |
Public* | Project detail |
GET |
/rovas/civic_project_work_reports |
Public* | Work reports for a project |
GET |
/rovas/civic_project_shareholders |
Public* | Shareholders |
GET |
/rovas/civic_charity_projects |
Public | Approved charity / public-benefit catalog |
POST |
/rovas/civic_create_charity_org |
Bearer | Submit a public-benefit organization |
*Anonymous access for approved public-benefit projects; otherwise access rules apply.
Volunteer work reports
| Method | Path | Auth | Purpose |
|---|---|---|---|
GET |
/rovas/civic_my_projects |
Bearer | Projects the user recently reported on |
GET |
/rovas/civic_projects_search?query= |
Bearer | Search projects |
GET |
/rovas/civic_nace_tree |
Public | NACE activity tree |
POST |
/rovas/civic_create_project |
Bearer | Create project |
POST |
/rovas/civic_create_work_report |
Bearer | Create work report |
GET |
/rovas/civic_work_report_map_config |
Bearer | Map proof configuration |
POST |
/rovas/civic_ai_nace |
Bearer | AI NACE + title suggestion |
Verification & notices
| Method | Path | Auth | Purpose |
|---|---|---|---|
GET |
/rovas/civic_pending_verifications |
Bearer | Reports waiting for your verification |
GET |
/rovas/civic_work_report/{nid} |
Bearer | Work-report detail for verifiers |
POST |
/rovas/civic_submit_verification |
Bearer | Approve, reject, or decline |
GET |
/rovas/civic_pending_comment_notices |
Bearer | Watched-comment notices |
Merit index
| Method | Path | Auth | Purpose |
|---|---|---|---|
GET |
/rovas/civic_merit_index |
Public | Leaderboard snapshot |
GET |
/rovas/civic_merit_index_countries |
Public | Country filters |
GET |
/rovas/civic_merit_spotlight |
Public | Period spotlight |
GET |
/rovas/civic_merit_period_index |
Public | Period leaderboard |
Support
Questions, OpenAPI schemas, or a new OAuth client: contact NeoFund.