Unif API Docs

Collect a live ChatGPT or Gemini web answer

Execute one custom prompt against the ChatGPT or Gemini web interface. Returns answer evidence, cited sources, and separate brand-name/domain observations. This is a single unpersonalized sample; repeated runs may differ. 30 credits ($0.03) per successful response, including no-answer results. Credits are reserved before collection; errors are not charged. May take up to 120 seconds. Gemini does not support force_web_search. Use a client timeout of at least 150 seconds. No conversation history or recommendation rank is inferred.

Pricing — $$ · min $0.03

Billed per record at 30 credit ($0.001) each, with a 30-credit ($0.03) minimum per call.

POST
/geo/answers

Authorization

bearerAuth
AuthorizationBearer <token>

UnifAPI API key. Provider credentials are managed by UnifAPI.

In: header

Header Parameters

X-Unifapi-Max-Credits?string

Optional maximum credit budget for this request. The gateway validates the required reservation before collection and rejects a lower cap without charging. Unused reserved credits are released after settlement. Omit to use your available balance.

Match^\d+$
Unifapi-Version?"2026-07-01"

Pin the API version an integration was built against (date-based, e.g. 2026-07-01). Omit to use the current version. Public URL paths stay stable and unversioned; breaking changes ship under a new dated version and are announced with Deprecation and Sunset response headers. The served version is echoed in every response's Unifapi-Version header. Policy: https://unifapi.com/versioning.md

Default"2026-07-01"

Value in

  • "2026-07-01"
Idempotency-Key?string

Client-supplied unique key that makes a write request safe to retry. If a request with the same key was already processed, the original response is replayed (with Idempotency-Replayed: true) instead of executing — and billing — again. Send a fresh UUID per logical operation. Best-effort with a 24h window.

Lengthlength <= 255

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/geo/answers" \  -H "Content-Type: application/json" \  -d '{    "prompt": "string",    "engine": "chatgpt"  }'
{  "request_id": "string",  "data": {    "engine": "chatgpt",    "surface": "chatgpt_web",    "measurement": "live_prompt",    "prompt": "string",    "location": "string",    "language": "string",    "search_mode": "natural",    "model": "string",    "observed_at": "string",    "status": "completed",    "answer": "string",    "sources": [      {        "url": "string",        "domain": "string",        "title": "string",        "snippet": "string"      }    ],    "search_results": [      {        "url": "string",        "domain": "string",        "title": "string",        "snippet": "string"      }    ],    "fan_out_queries": [      "string"    ],    "brand_entities": [      {        "name": "string",        "category": "string"      }    ],    "blocks": [      {        "type": "string",        "position": 0,        "markdown": "string",        "text": "string"      }    ],    "observations": [      {        "brand_id": "string",        "mentioned": true,        "matched_names": [          "string"        ],        "cited": true,        "citation_urls": [          "string"        ],        "mention_method": "answer_text_alias_match"      }    ]  },  "billing": {    "credits_charged": 0,    "records_charged": 0,    "balance_remaining": 0,    "truncated_due_to_balance": true  }}