Skip to content

API

Scan, submit and track URLs from your own tools

The API does everything the dashboard does, with the same checks and the same credit rules. Every account has an API key on its profile page.

Authentication

Send your API key in the x-api-key header. Keep it secret: anyone who has it can use your credits. You can generate a new key from your profile at any time.

Base URL
https://api.storewike.store

Endpoints

MethodPathWhat it does
POST/api/urls/preflightScan up to 100 URLs for indexing blockers. Streams progress as Server-Sent Events.
POST/api/urls/submitSubmit one URL.
POST/api/urls/submit/bulkSubmit up to 50 URLs. Streams one result per URL as Server-Sent Events.
GET/api/urls/jobsList your jobs. Filter with ?status=INDEXED; paginate with page and limit.
GET/api/urls/status/:jobIdGet one job and its latest Search Console check.
POST/api/urls/status/:jobId/refreshRun a live Search Console check for one job now.

Submit a URL

Request
curl -X POST https://api.storewike.store/api/urls/submit \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/blog/my-post"}'
Response (201)
{
  "success": true,
  "jobId": "6540f3c2a1b2c3d4e5f60718",
  "status": "QUEUED",
  "message": "URL submitted. Indexing started."
}

If Search Console already shows the page as indexed, the response is 200 with alreadyIndexed: true and no credit is charged.

Check a job

Request
curl https://api.storewike.store/api/urls/status/6540f3c2a1b2c3d4e5f60718 \
  -H "x-api-key: YOUR_API_KEY"
Response
{
  "success": true,
  "job": {
    "id": "6540f3c2a1b2c3d4e5f60718",
    "originalUrl": "https://example.com/blog/my-post",
    "status": "WAITING_CRAWL",
    "retryCount": 0,
    "latestCheck": { "status": "NOT_FOUND", "source": "GSC_API" }
  }
}

Poll this endpoint, or the job list, until the status is INDEXED or FAILED. Checks run on a schedule, so polling more than every few minutes brings nothing new.

Bulk submit and scan

/api/urls/preflight and /api/urls/submit/bulk take a JSON body with a urls array and answer with a Server-Sent Events stream: a start event, one result event per URL as soon as it is ready, and a final done event with the totals. Read the stream with fetch, not EventSource, because you need to send a POST body and a header.

Job statuses

StatusMeaning
PENDINGThe job was created and is about to be queued.
QUEUEDWaiting in the queue for its turn.
WRAPPER_CREATEDPrepared and about to be sent to Google.
WAITING_CRAWLSent to Google. Waiting for it to crawl and index the page.
CRAWLED_NOT_INDEXEDGoogle crawled the page but has not indexed it (yet).
RETRYINGBeing submitted again.
INDEXEDSearch Console confirms the page is indexed. The credit is used.
FAILEDNot indexed after the retries, or rejected. The credit is refunded.

Errors

HTTP statusMeaning
400The request was invalid or cannot be accepted: a missing url, no credits left, the daily limit reached, or no Search Console access (code: "NO_SEARCH_CONSOLE").
401The API key is missing or wrong.
422The pre-flight scan found a blocker such as a 404 or a noindex tag (code: "PREFLIGHT_BLOCKED"). The issues list says what.
429Too many requests. Wait and try again.

Every error response has success: false and a human-readable message.