GoviraaAPIGet your API key

Goviraa API Reference

Everything you need to place orders, check status, and manage your account programmatically.

Introduction

The Goviraa API lets you integrate Goviraa's full service catalog — followers, likes, views, and every other growth service available on the platform — directly into your own application, the same way Goviraa itself integrates with its upstream providers.

Every request is scoped to your own account and wallet balance. There is no way to see or act on another user's data through this API.

Base URL

https://api.goviraa.com/external/v1

Authentication

Authenticate every request with an X-API-Key header. Generate a key from your dashboard under Developer API. Keys are shown in full only once, at creation — Goviraa stores only a one-way hash of it.

Example
curl https://api.goviraa.com/external/v1/balance \
  -H "X-API-Key: gv_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

A missing, invalid, or revoked key returns 401 unauthorized. A blocked account returns 403 forbidden.

Response Format

Every response is JSON with an explicit success flag.

Success
{
  "success": true,
  "data": { ... }
}
Success (paginated)
{
  "success": true,
  "data": [ ... ],
  "meta": { "page": 1, "limit": 20, "total": 134 }
}
Error
{
  "success": false,
  "error": { "code": "bad_request", "message": "quantity is required" }
}

Errors

Errors never include stack traces, database details, or any other internal information — only a stable code and a human-readable message.

FieldTypeRequiredDescription
400 bad_requestNoInvalid or missing parameters.
401 unauthorizedNoMissing, invalid, or revoked API key.
403 forbiddenNoAccount is blocked.
404 not_foundNoThe resource doesn't exist, or doesn't belong to you.
429 rate_limitedNoToo many requests — see Rate Limits.
500 internal_errorNoUnexpected error. Contact support if this persists.

Rate Limits

Each API key is limited to 60 requests per minute. Every response includes rate limit headers:

Headers
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 42

Exceeding the limit returns a 429 with code rate_limited.

Service Types & Required Fields

Every service returned by GET /services has a type that determines which fields POST /orders needs. Sending only link + quantity for every service is not enough — most types need it, but a few need something else entirely.

FieldTypeRequiredDescription
DefaultNolink, quantity
Custom CommentsNolink, quantity, comment (one comment per line)
Custom Comments PackageNolink, comment (quantity is fixed by the package)
SubscriptionsNousername, quantity, posts (optional), oldPosts (optional), delay (optional), expiry (optional, format d/m/Y) — no link at all
PollNolink, quantity, answerNumber
Mentions User FollowersNolink, quantity, username

List Services

GET/services

Returns the full priced service catalog, personalized to your account's discount (if any).

FieldTypeRequiredDescription
searchstringNoFilter by name or category (query param)
categorystringNoFilter by category substring (query param)
Request
curl "https://api.goviraa.com/external/v1/services?search=instagram" \
  -H "X-API-Key: gv_live_xxxx"
Response
{
  "success": true,
  "data": [
    {
      "service": "1-1825",
      "name": "Nigeria Instagram Likes ( Auto Likes )",
      "category": "Instagram: Nigerian Services",
      "type": "Subscriptions",
      "pricingModel": "per_1000",
      "price": 8800,
      "currency": "NGN",
      "min": 20,
      "max": 2000,
      "refill": false,
      "cancel": false
    }
  ]
}

service is Goviraa's own ID — use it exactly as returned when placing orders. price is per 1000 units unless pricingModel is flat, in which case it's the total price for the service as-is.

Create Order

POST/orders

Places a real order and deducts its cost from your wallet balance immediately.

FieldTypeRequiredDescription
servicestringYesGoviraa service ID from GET /services
quantityintegerYesWithin the service's min/max
linkstringNoRequired for most types — see Service Types
commentstringNoCustom Comments types — one comment per line
usernamestringNoSubscriptions / Mentions User Followers types
postsintegerNoSubscriptions type — new posts to cover (omit for unlimited)
oldPostsintegerNoSubscriptions type — existing posts to cover
delayintegerNoSubscriptions type — minutes between actions
expirystringNoSubscriptions type — format d/m/Y
answerNumberintegerNoPoll type — which option to vote for
Request
curl -X POST https://api.goviraa.com/external/v1/orders \
  -H "X-API-Key: gv_live_xxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "service": "1-36",
    "link": "https://instagram.com/username",
    "quantity": 100
  }'
Response
{
  "success": true,
  "data": {
    "orderId": "6403766",
    "service": "1-36",
    "serviceName": "Nigerian Instagram Likes",
    "target": "https://instagram.com/username",
    "quantity": 100,
    "status": "Pending",
    "charge": 880,
    "currency": "NGN",
    "createdAt": "2026-08-07T02:00:00.000Z",
    "completedAt": null
  }
}

Insufficient balance returns 400 bad_request with message "Insufficient wallet balance" — nothing is deducted.

List Orders

GET/orders

Your own order history, paginated. Always scoped to your account regardless of any parameter sent.

FieldTypeRequiredDescription
pageintegerNoDefault 1
limitintegerNoDefault 10, max 100
statusstringNoPending | Partial | Completed | InProgress | Cancelled | Refunded

Get Order Status

GET/orders/:orderId

orderId is the value returned by Create Order or List Orders. Returns 404 not_found if the order doesn't exist or belongs to another account — both cases look identical, by design.

Cancel Order

POST/orders/:orderId/cancel

Only works for orders still Pending or InProgress, and only for services that support cancellation (see the cancel flag on the service in GET /services). On success, the order's cost is refunded to your wallet.

Get Balance

GET/balance
Response
{
  "success": true,
  "data": { "balance": 99648, "currency": "NGN" }
}
API Reference - Goviraa