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.

Solutions built with the API

Apps and plugins that integrate third-party tools with Rovas are listed on the Rovas connectors page.

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).

Auth labels in this reference

Label Meaning
API-KEY Headers API-KEY + TOKEN (classic)
Bearer Authorization: Bearer with scope user_profile
Public No credentials (API-key auth disabled on the resource)
Optional Bearer Public read; Bearer adds user-specific fields

Classic API — how to use it

Credentials

  1. Sign in to Rovas and open My account → Rovas API.
  2. Generate credentials for the rovas_endpoint endpoint.
  3. 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.

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 & identity

Method Path Auth Purpose
POST /rovas/rovas_partner_user API-KEY Preferred create/link partner user; returns rovas_uid, api_key, token
POST /rovas/rules/rules_create_user API-KEY Legacy create/link (same body/response)
GET /rovas/rovas_hybridauth_providers.json Public* List HybridAuth providers for hybridauth_provider
POST /rovas/rules/rules_fetch_user_data API-KEY Profile info for the key owner
POST /rovas/rules/rules_users_chrons API-KEY Chron balances
POST /rovas/rules/rules_user_s_merits API-KEY Merit totals (optional NACE filter)
POST /rovas/rules/rules_check_enabled_language API-KEY Whether a 2-letter language code is enabled

*Usually public when “Disable API keys authentication” is set on the 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 Is work report editable by caller
POST /rovas/rules/rules_proxy_work_report_verifiability API-KEY Is work report verifiable by caller
POST /rovas/rules/rules_proxy_report_verification_status API-KEY Verification status
POST /rovas/rules/rules_create_verification API-KEY Create verification
POST /rovas/rules/rules_create_verification_with_acccess_token Public† Create verification via access token
POST /rovas/rules/rules_proxy_check_verifier_by_access_tokens see OpenAPI Verifiability via access tokens
POST /rovas/rules/rules_proxy_reward_work_report API-KEY Reward a work report
GET /rovas/rovas_verifications.json API-KEY List work-report verifications
GET /rovas/rovas_comment_notices.json API-KEY Pending watched-comment notices (same store as Civic Bearer twin)
PUT /rovas/node/{id} API-KEY Update node owned by key owner
DELETE /rovas/node/{id} API-KEY Delete node owned by key owner

†Typo in rule machine name (acccess) is intentional in the live path.

Shares, purchases, conversions

Method Path Auth Purpose
POST /rovas/rules/rules_proxy_check_or_add_shareholder API-KEY Ensure user share on project
POST /rovas/rules/rules_proxy_check_or_add_project_shareholder API-KEY Ensure project-as-shareholder
POST /rovas/rules/rules_proxy_purchase_product API-KEY Process product purchase
POST /rovas/rules/rules_proxy_create_aur API-KEY Asset usage record (usage fee)
POST /rovas/rules/rules_get_merits_for_projects API-KEY Merit values for pipe-separated 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 (leaderboards / feeds)

Method Path Auth Purpose
GET /rovas/views/top_10_workers_in_a_category see OpenAPI Top workers in a category
GET /rovas/views/project_merits_feed see OpenAPI Top rewarders of a project
GET /rovas/views/projects_merits see OpenAPI Top users across 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

Method Path Auth Notes
GET /oauth2/authorize browser session PKCE; Civic supports lang, intent
POST /oauth2/token public client + PKCE authorization_code / refresh_token
POST /oauth2/revoke token Revoke access/refresh
GET /oauth2/tokens/{access_token} — Introspect → user_id, client_id, expires, scope (404 if invalid)

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.

Token exchange (authorization code + PKCE)

curl -sS -X POST "https://rovas.app/oauth2/token" \
  -d grant_type=authorization_code \
  -d client_id=civic \
  -d redirect_uri=civic://oauth/callback \
  -d code=PASTE_CODE \
  -d code_verifier=$VERIFIER

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

API-key authentication is disabled on these resources. Use Bearer where required.

Home & profile

Method Path Auth Purpose
GET /rovas/me Bearer Profile: uid, username, display_name, total_me, total_chr, created, language, receipt_history_retention
GET /rovas/contributions/aggregate Public Community Merit total (+ category placeholders)
GET /rovas/merit_distribution Optional Bearer JSON Merit histogram; user_* fields when Bearer present
POST /rovas/civic_receipt_history_preference Bearer Set receipt history retention (keep | policy)
GET /rovas/civic_merit_history Bearer Caller’s Merit ledger rows

Users

Method Path Auth Purpose
GET /rovas/users_search?query= Bearer Typeahead search (param is query, not q)
GET /rovas/users_lookup?username= Bearer Public community profile (+ nace_expertise, tab aggregates). Users with total_me < 0 → 404

Optional: lang=sk|en on lookup for localized fields.

Tax claims

Method Path Auth Purpose
POST /rovas/rules/rules_proxy_claim_vat_receipt Bearer Claim eKasa VAT as donor Merits (split shares[])
GET /rovas/civic_claims?view=submitted|received Bearer Claim lists
GET /rovas/civic_claims?receipt_uid= Bearer { claimed, receipt_uid } only
GET /rovas/civic_claims/summary Bearer Totals for caller
GET /rovas/civic_national_hourly_rate?country= Public National hourly rate used in ME formula

Projects, charity catalog, gifts

Method Path Auth Purpose
GET /rovas/civic_project/{nid} Public‡ Project detail (donate_iban, org fields, …)
GET /rovas/civic_project_work_reports?project_nid= Public‡ Work reports for project
GET /rovas/civic_project_shareholders?project_nid= Public‡ Shareholders
GET /rovas/civic_charity_projects Public Approved public-benefit project catalog
POST /rovas/civic_create_charity_org Bearer Donor submits a public-benefit org

‡Anonymous allowed for NeoFund-approved public-benefit projects; otherwise Bearer / access rules apply.

Volunteer work reports

Method Path Auth Purpose
GET /rovas/civic_my_projects Bearer Recent projects the user reported on
GET /rovas/civic_projects_search?query= Bearer Search publishable projects (query ≥ 3 chars)
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 (proof: URL, photos, and/or map)
GET /rovas/civic_work_report_map_config Bearer Map widget config for location proof
POST /rovas/civic_ai_nace Bearer AI NACE + title suggestion (optional module)

Verification & notifications

Method Path Auth Purpose
GET /rovas/civic_pending_verifications Bearer Work reports assigned to caller to verify
GET /rovas/civic_work_report/{nid} Bearer Verifier-facing work-report detail
POST /rovas/civic_submit_verification Bearer Approve / reject / decline
GET /rovas/civic_pending_comment_notices Bearer Polled watched-comment notices

Merit index & spotlight

Method Path Auth Purpose
GET /rovas/civic_merit_index Public Snapshot leaderboard (by_category, by_source, …)
GET /rovas/civic_merit_index_countries Public Country filter options
GET /rovas/civic_merit_spotlight Public Period leads by Civic area
GET /rovas/civic_merit_period_index Public ME•ter period leaderboard

Support

Questions, OpenAPI schemas, or a new OAuth client: contact NeoFund.