Read what installing an app would grant
get/v1/tenants/{tenant_id}/apps/{app_id}/consent
Requires an API key
The consent screen's data: the scopes the app requests (sensitive ones flagged: stations:control, billing:write, tariffs:write, settlement:write), the per-install rate limit and the revision to send back when installing.
Path parameters
- tenant_idintegerRequired
- app_idstringRequiredPattern
^app_[0-9a-f]{32}$
Returns · 200
- appAppRecordRequired
Child attributes
- idstringRequired
- team_idstringRequired
- namestringRequired
- descriptionstring | nullRequired
- icon_urlstring | nullRequired
- ui_originsarray of stringRequired
- extensionsarray of objectRequired
- scopesarray of stringRequiredThe scopes the app requests; an install holds the part its installer consented to.
- webhook_urlstring | nullRequiredNull for a first_party app read from another team's project.
- revisionintegerRequiredCounts the changes to the app's scopes, origins and extensions. A consent is valid only for the revision it was given on.
- visibilityenumRequiredprivate: only the owning team's projects can install it. first_party: Ivora's own app, installable by every project and shown as made by Ivora; only Ivora administrators set it (403 otherwise).One of
private,first_party - publisherstring | nullIvora for a first_party app, which the dashboard shows as made by Ivora; null: the team that registered it.
- statusenumRequiredOne of
active,archived - checkout_servicebooleanRequiredWhether Ivora trusts the app's backend to name the driver's IP address (X-Ivora-Driver-Address) on payment creation, so the 30-a-minute per-address limit counts per driver: honoured only on a client_credentials token of an install holding billing:write, never on a session or exchanged token. Only Ivora administrators set it (403 otherwise), on an app that requests billing:write.
- secret_prefixstring | nullRequiredThe client secret's first characters, to recognise it; the secret is shown only when it is created or rotated. Null for a first_party app read from another team's project.
- secret_rotated_atstring | nullRequired
- created_bystring | nullRequiredNull for a first_party app read from another team's project.
- created_atstringRequired
- updated_atstringRequired
- installsinteger | nullActive installs, in the team's projects.
- tenant_idintegerRequired
- scopesarray of ScopeInfoRequiredThe scopes the app requests, as the consent screen lists them.
Child attributes
- scopestringRequired
- sensitivebooleanRequiredTrue where the app could act on chargers or money: it needs your explicit consent and is rate limited per install.
- descriptionstringRequired
- rate_limit_per_minuteintegerRequired
- revisionintegerRequiredSend this as consent_revision when installing.
- installedobject | nullRequiredThe active install, when the app is already installed here.
Child attributes
- idstringRequired
- app_idstringRequired
- app_namestring | null
- tenant_idintegerRequired
- scopesarray of stringRequiredWhat the app holds in this project: its consented scopes, never more than the app requests.
- consent_revisionintegerRequired
- rate_limit_per_minuteintegerRequired
- statusenumRequiredOne of
active,revoked - installed_bystringRequired
- installed_atstringRequired
- updated_atstringRequired
- revoked_atstring | nullRequired
- revoked_bystring | nullRequired
- revoked_reasonstring | nullRequireduninstalled or app_archived.
- staff_reasonstring | nullSet when Ivora staff installed the app on the project's request: why. Null for an install by the project's own team.
- can_installbooleanRequiredWhether you may install this app in this project: a team owner, admin or developer (only an owner or admin for another team's first_party app), or an Ivora administrator.
- reason_requiredbooleanTrue for Ivora administrators outside the project's team: installing needs a reason, which the project's audit trail keeps.Default
false
GET /v1/tenants/{tenant_id}/apps/{app_id}/consent
curl --fail-with-body "https://api.ivoracharge.com/v1/tenants/1042/apps/app_0123456789abcdef0123456789abcdef/consent" \
-H "Authorization: Bearer $IVORA_API_KEY"Response · 200JSON
{
"app": {
"id": "id_0123456789abcdef",
"team_id": "team_0123456789abcdef",
"name": "bay-01",
"description": "string",
"icon_url": "https://app.example.com/return",
"ui_origins": [
"string"
],
"extensions": [
{}
],
"scopes": [
"string"
],
"webhook_url": "https://app.example.com/return",
"revision": 1,
"visibility": "private",
"publisher": "Ivora",
"status": "active",
"checkout_service": false,
"secret_prefix": "string",
"secret_rotated_at": "2026-09-30T17:00:00Z",
"created_by": "string",
"created_at": "2026-09-30T17:00:00Z",
"updated_at": "2026-09-30T17:00:00Z",
"installs": 1
},
"tenant_id": 1042,
"scopes": [
{
"scope": "string",
"sensitive": false,
"description": "string"
}
],
"rate_limit_per_minute": 1,
"revision": 1,
"installed": {
"id": "id_0123456789abcdef",
"app_id": "app_0123456789abcdef",
"app_name": "string",
"tenant_id": 1042,
"scopes": [
"string"
],
"consent_revision": 1,
"rate_limit_per_minute": 1,
"status": "active",
"installed_by": "string",
"installed_at": "2026-09-30T17:00:00Z",
"updated_at": "2026-09-30T17:00:00Z",
"revoked_at": "2026-09-30T17:00:00Z",
"revoked_by": "string",
"revoked_reason": "string",
"staff_reason": "string"
},
"can_install": false,
"reason_required": false
}Requires an approved production API keyProduction access starts with a request, a short meeting with Ivora and a card on file, after which Ivora staff grant your account access. How to request access
Try itproduction · api.ivoracharge.com
Paste a production api key (iv_live_…). Create keys in Developer tools. The key stays in this page's memory, is sent only to https://api.ivoracharge.com and clears when you reload. Test keys are refused.



