{
  "info": {
    "name": "TopIndexer API",
    "description": "Submit URLs for Google indexing and read back verified index status.\n\nSet the `apiKey` collection variable to your `ti_live_…` key (Dashboard → Settings → API keys). All requests authenticate with `Authorization: Bearer {{apiKey}}`.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "_postman_id": "b0a1c2d3-e4f5-4a6b-8c9d-0e1f2a3b4c5d"
  },
  "auth": {
    "type": "bearer",
    "bearer": [{ "key": "token", "value": "{{apiKey}}", "type": "string" }]
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://api.topindexer.com",
      "type": "string"
    },
    {
      "key": "apiKey",
      "value": "ti_live_REPLACE_ME",
      "type": "string"
    }
  ],
  "item": [
    {
      "name": "Submit URLs",
      "request": {
        "method": "POST",
        "header": [{ "key": "Content-Type", "value": "application/json" }],
        "url": {
          "raw": "{{baseUrl}}/api/v1/submit",
          "host": ["{{baseUrl}}"],
          "path": ["api", "v1", "submit"]
        },
        "body": {
          "mode": "raw",
          "raw": "{\n  \"urls\": [\n    \"https://example.com/page-a\",\n    \"https://example.com/page-b\"\n  ]\n}"
        },
        "description": "Submit 1–50 http(s) URLs. Deducts one credit per accepted URL and begins triggering the crawl. Non-http(s) URLs are dropped and counted in `ignoredInvalid`. Returns 202."
      },
      "response": [
        {
          "name": "202 Accepted",
          "originalRequest": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "url": {
              "raw": "{{baseUrl}}/api/v1/submit",
              "host": ["{{baseUrl}}"],
              "path": ["api", "v1", "submit"]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"urls\": [\"https://example.com/page-a\"]\n}"
            }
          },
          "status": "Accepted",
          "code": 202,
          "_postman_previewlanguage": "json",
          "header": [{ "key": "Content-Type", "value": "application/json" }],
          "body": "{\n  \"submitted\": 1,\n  \"ignoredInvalid\": 0,\n  \"submissions\": [\n    { \"id\": \"01J9Z0R8H8Q9X2K3M4N5P6Q7R8\", \"url\": \"https://example.com/page-a\", \"status\": \"queued\" }\n  ]\n}"
        }
      ]
    },
    {
      "name": "List Submissions",
      "request": {
        "method": "GET",
        "header": [],
        "url": {
          "raw": "{{baseUrl}}/api/v1/submissions?status=indexed&limit=50",
          "host": ["{{baseUrl}}"],
          "path": ["api", "v1", "submissions"],
          "query": [
            {
              "key": "status",
              "value": "indexed",
              "description": "Optional. Filter by one status: queued, processing, submitted, crawled, indexed, not_indexed, failed, refunded."
            },
            {
              "key": "limit",
              "value": "50",
              "description": "Optional. Default 50, max 200."
            }
          ]
        },
        "description": "List your team's submissions, newest first."
      },
      "response": [
        {
          "name": "200 OK",
          "originalRequest": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/submissions?status=indexed&limit=50",
              "host": ["{{baseUrl}}"],
              "path": ["api", "v1", "submissions"],
              "query": [
                { "key": "status", "value": "indexed" },
                { "key": "limit", "value": "50" }
              ]
            }
          },
          "status": "OK",
          "code": 200,
          "_postman_previewlanguage": "json",
          "header": [{ "key": "Content-Type", "value": "application/json" }],
          "body": "{\n  \"submissions\": [\n    {\n      \"id\": \"01J9Z0R8H8Q9X2K3M4N5P6Q7R8\",\n      \"url\": \"https://example.com/page-a\",\n      \"normalizedUrl\": \"https://example.com/page-a\",\n      \"status\": \"indexed\",\n      \"providerRef\": \"mi_abc123\",\n      \"submittedAt\": \"2026-06-01T12:00:00.000Z\",\n      \"indexedAt\": \"2026-06-02T09:14:00.000Z\",\n      \"attempts\": 1,\n      \"createdAt\": \"2026-06-01T11:59:58.000Z\"\n    }\n  ]\n}"
        }
      ]
    },
    {
      "name": "Get Me",
      "request": {
        "method": "GET",
        "header": [],
        "url": {
          "raw": "{{baseUrl}}/api/v1/me",
          "host": ["{{baseUrl}}"],
          "path": ["api", "v1", "me"]
        },
        "description": "Return the authenticated team and its current credit balance."
      },
      "response": [
        {
          "name": "200 OK",
          "originalRequest": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/me",
              "host": ["{{baseUrl}}"],
              "path": ["api", "v1", "me"]
            }
          },
          "status": "OK",
          "code": 200,
          "_postman_previewlanguage": "json",
          "header": [{ "key": "Content-Type", "value": "application/json" }],
          "body": "{\n  \"team\": { \"id\": \"team_8a1b2c\", \"name\": \"Acme\", \"creditBalance\": 480 },\n  \"keyId\": \"key_2b9f1c\"\n}"
        }
      ]
    }
  ]
}
