Track up to 100 keywords at once, with your research figures.
Use it after keyword research with your own tools. Every keyword gets its own result: added, already_tracked, invalid (with a message) or cap_reached when the per-site cap is full. The call answers 200 even when some keywords were skipped. their_monthly_searches and their_difficulty are kept as your tool estimate, labelled with source_label, and never mixed with Search Console numbers. Spends no SoftSolz AI credits.
https://app.softsolz.uk/api/v1/services/seo/sites/{site_id}/keywords/bulkRecent Requests
Kept only in this browserPath Params
site_idstringrequiredHeaders
AuthorizationstringrequiredBearer token: `Bearer sk_live_...` (or `sk_test_...` for sandbox). A login token will not work here.
Idempotency-KeystringOptional idempotency key for safe retries.
Body Params
keywordsarray of objectsrequired1 to 100 keywords.
Response
Response Body
resultsarray of objectsOne result per keyword sent, in the same order.addedintegerHow many were added.skippedintegerHow many were not added.Request
curl --request POST \ --url https://app.softsolz.uk/api/v1/services/seo/sites/{site_id}/keywords/bulk \ --header 'Authorization: Bearer sk_live_your_key' \ --header 'Content-Type: application/json' \ --data '{ "keywords": [ { "query_text": "sourdough starter", "source_label": "Ahrefs via Claude", "their_monthly_searches": 2400, "their_difficulty": 35, "target_url": "/sourdough-starter", "notes": "Main money keyword." } ]}'Credentials
Sent as a Bearer token and used in the samples above and in Try it. Kept only in this browser tab until you close it. Use an sk_test_ key to stay in your sandbox.
Response · 200
{ "data": { "results": [ { "query_text": "sourdough starter", "status": "added", "id": "3f2b9c44-8f4e-4d0a-9c1b-2a7d6e5f1a23", "message": null } ], "added": 1, "skipped": 0 }}