Pay for previewed results and receive them in full
Charges only for results not already unlocked by an earlier call against the same queryId -- re-sending the same ids costs nothing. Omit resultIds (or pass null) to unlock everything from the preview.
Set includeFigures to receive figure images as base64 in metadata.figures[].image_data. Images are returned for every result unlocked under this queryId, including ones unlocked by an earlier call -- so re-sending ids you have already paid for is how you fetch images you skipped the first time, and it charges nothing. At most 50 images are fetched per call; the ids in resultIds (or, when it is omitted, the results this call unlocked) get that budget first. Figures are free: they are not priced into the token cost, so the flag changes latency and response size and never the charge. Use the preview's figureCount to decide whether to ask.
/api/v1/search/unlockAuthorization
BearerAuth API key authentication. Pass your key in the Authorization header as Bearer sk_live_.... An X-API-Key: sk_live_... header is also accepted as an alternative. Keys are created in the Redpine Connect dashboard under Settings > API Keys.
Keys come in two kinds. A live key (sk_live_...) searches real content and spends credits. A sandbox key (sk_test_...) returns canned results at no cost and never reaches licensed content, so you can build and test an integration before spending anything. Sandbox responses have the same shape as live ones and every result is marked synthetic, so going live is a matter of swapping the key. Check the X-Billing-Mode response header to confirm which you are using.
In: header
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
curl -X POST "https://example.com/api/v1/search/unlock" \ -H "Content-Type: application/json" \ -d '{ "queryId": "string" }'{ "costCharged": null, "costToUnlockRemaining": "string", "discovery": { "callout": { "kind": "add_payment_method", "message": "string" }, "intent": "sources", "metricsNote": null, "nextActions": [ { "action": "string", "hint": "string" } ], "queryId": "string", "scopes": [ { "collection": "string", "displayName": "string", "issnValuesSeen": 0, "items": [ { "hIndex": null, "impactFactor": null, "issnL": null, "issns": [ "string" ], "kind": "journal", "publisher": null, "title": "string" } ], "note": null, "offset": 0, "publishers": [ "string" ], "rankedBy": null, "sampledEntries": 0, "shown": 0, "titleOnly": 0, "total": 0, "truncatedInventory": false, "unranked": [ { "hIndex": null, "impactFactor": null, "issnL": null, "issns": [ "string" ], "kind": "journal", "publisher": null, "title": "string" } ], "unresolvedIssns": 0 } ], "text": "string", "topic": null }, "filterWarnings": null, "filtersApplied": null, "journalMetricExpansions": null, "queryId": "string", "results": [ { "collection": null, "cost": null, "figureCount": 0, "id": "string", "locked": true, "metadata": null, "relevance": null, "text": "string", "tokens": null } ]}Search documents POST
Search one or more collections using natural language or keyword queries. Results are ranked by relevance using hybrid retrieval (dense + sparse). Pass `collections` (up to 5) to search several collections in one call and receive a single merged, relevance-ranked list with per-result origin labels.
Changelog
What changed in the API, the dashboard, the SDKs, the CLI and these docs, newest first.