API reference / Admin
/v1/admin/statsQueue and revenue totals
- Operation
adminStats- Authentication
- API key
Counts by status, and captured versus merely authorised. The authorised figure is the one to watch: it is money held on a customer’s card while we wait on a government.
Request
Responses
systemsobjectby_statusobjectrequiredHow many applications sit in each status. A record rather than a list, and sparse: a status nobody is in is absent rather than zero. Read a missing key as zero.
payment_recovery_countintegerrequiredLatest unpaid payment attempts at least 30 minutes old; used for the checkout recovery work badge.
awaiting_reviewobject[]requiredPaid applications we have not finished reviewing, oldest hold first, capped at eight. The counts elsewhere say how much is held and how many applications that is. This says **who** — money held on our clock, a customer waiting, and the only queue here with nobody else in it. `under_review` is included because an application somebody opened and did not finish is more stuck than one nobody has touched.
pipelineobjectrequiredThe two queues behind the scenes, each with a depth **and an age**. Depth alone cannot answer "is the worker alive": a queue reads `queued: 1` whether the sweep is mid-run or the process has not started for a week, and those want opposite responses. The age is the half that tells them apart.
moneyAdminMoneyrequiredbillingobjectrequiredReported rather than hardcoded in the dashboard, so the banner cannot lie.
undelivered_notificationsobjectrequiredMessages we owe that did not land. `failed` retries itself; `abandoned` and `skipped` never will, which is why they are counted apart rather than summed.
ageing_authorisationsAdminAgeingAuthorisation[]requiredThe five authorisations held longest, oldest first. A total says how much is exposed; this says what to act on next, which is why it carries the reference.
expiringobjectrequiredHow many authorisations are inside the monitor’s warning window. Counted here rather than derived by the dashboard, so it cannot disagree with the alerts.
errorobjectrequirederrorobjectrequirederrorobjectrequirederrorobjectrequiredExample
curl -X GET https://api.haavisa.com/v1/admin/stats \
-H "Authorization: Bearer $HAAVISA_API_KEY"More in Admin
GET/v1/admin/activityGET/v1/admin/applicant-usersPOST/v1/admin/applicantsGET/v1/admin/applicationsGET/v1/admin/applications/{id}POST/v1/admin/applications/{id}/decision-documentPOST/v1/admin/applications/{id}/documents-requestPOST/v1/admin/applications/{id}/documents-request/{requestId}/reviewGET/v1/admin/applications/{id}/documents/{documentId}POST/v1/admin/applications/{id}/emailGET/v1/admin/applications/{id}/evidence/{filename}POST/v1/admin/applications/{id}/government-paymentPOST/v1/admin/applications/{id}/government-payment/recordPOST/v1/admin/applications/{id}/requirements/reviewPOST/v1/admin/applications/{id}/status-checkPOST/v1/admin/applications/{id}/submissionPOST/v1/admin/applications/{id}/submission/enqueueGET/v1/admin/applications/{id}/timelineGET/v1/admin/automationGET/v1/admin/customersGET/v1/admin/customers/{id}POST/v1/admin/customers/{id}/verification-emailGET/v1/admin/documentsGET/v1/admin/government-paymentsGET/v1/admin/mailboxGET/v1/admin/mailbox/{source}/{messageId}GET/v1/admin/notificationsPOST/v1/admin/notifications/{id}/requeueGET/v1/admin/operatorsPOST/v1/admin/operatorsPATCH/v1/admin/operators/{email}POST/v1/admin/operators/{email}/invitationGET/v1/admin/operators/authorization/{email}GET/v1/admin/payment-recoveryPOST/v1/admin/payment-recovery/{id}/remindGET/v1/admin/paymentsPATCH/v1/admin/products/{code}/availabilityPATCH/v1/admin/products/{code}/pricingPATCH/v1/admin/service-tiers/{id}/pricingPOST/v1/admin/stripe/catalog/syncGET/v1/admin/system/submission-workerPATCH/v1/admin/system/submission-workerGET/v1/admin/visa-dataPATCH/v1/admin/visa-data/{destination}/availabilityPOST/v1/admin/visa-data/{destination}/requirementsPOST/v1/admin/visa-data/{destination}/sourcesDELETE/v1/admin/visa-data/sources/{id}PATCH/v1/admin/visa-data/sources/{id}GET/v1/checkout-returnGET/v1/rules/freshnessGET/v2/projectsPOST/v2/projectsGET/v2/projects/{id}PUT/v2/projects/{id}DELETE/v2/projects/{id}/keys/{prefix}GET/v2/projects/{id}/usersPOST/v2/projects/{id}/users
Something unclear? The eligibility guide explains the model behind the answers; the errors guide covers the envelope.