{
  "info": {
    "_postman_id": "5f8c2d1e-9b4a-4c6f-a7d8-2e1b9c5a4f7d",
    "name": "deepaidetector API",
    "description": "Official Postman collection for the deepaidetector REST API.\n\n## Setup\n\n1. Import this collection into Postman (or Insomnia / Bruno — both support v2.1.0).\n2. Create a new environment with two variables:\n   - `base_url`  →  `https://api.deepaidetector.com`\n   - `api_key`   →  your bearer key (starts with `dad_live_` or `dad_test_`)\n3. The collection is pre-wired to read both variables — every request sends the key as `Authorization: Bearer {{api_key}}`.\n\n## Tier reminders\n\n- `/v1/detect` is available on every tier (subject to per-tier rate limit).\n- `/v1/detect/deep` and `/v1/plagiarism` are Pro+ only — they return 402 on free.\n- `/v1/account/*` requires a session or API key on every tier.\n\n## Code samples\n\nFor curl / JavaScript / Python / Go / Ruby copy-paste examples, see https://deepaidetector.com/api-docs and the SDKs under apps/sdk/{js,python}.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "_exporter_id": "deepaidetector"
  },
  "auth": {
    "type": "bearer",
    "bearer": [{ "key": "token", "value": "{{api_key}}", "type": "string" }]
  },
  "variable": [
    { "key": "base_url", "value": "https://api.deepaidetector.com", "type": "string" },
    { "key": "api_key", "value": "dad_live_REPLACE_ME", "type": "string", "description": "Bearer token. Generate in your dashboard at https://deepaidetector.com/dashboard/api-keys" }
  ],
  "item": [
    {
      "name": "Detection",
      "description": "AI text detection endpoints.",
      "item": [
        {
          "name": "POST /v1/detect — single-shot detection",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"text\": \"Climate change is reshaping the way coastal cities approach long-term planning. Rising sea levels and intensifying storms have moved infrastructure resilience from a niche topic to the top of every mayor's agenda. Engineers, planners, and insurers are recalibrating decades of assumptions about flood maps, drainage capacity, and which neighborhoods will remain viable for the families that have lived in them for generations.\",\n  \"strictness\": \"balanced\"\n}"
            },
            "url": {
              "raw": "{{base_url}}/v1/detect",
              "host": ["{{base_url}}"],
              "path": ["v1", "detect"]
            },
            "description": "Runs the full six-layer ensemble. ~80ms warm. Free tier capped at 1,000 words; Pro+ up to 5,000."
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Status is 200', () => pm.response.to.have.status(200));",
                  "const body = pm.response.json();",
                  "pm.test('Has score 0-1', () => pm.expect(body.score).to.be.within(0, 1));",
                  "pm.test('Has band', () => pm.expect(body.band).to.be.a('string'));"
                ]
              }
            }
          ]
        },
        {
          "name": "POST /v1/detect/deep — per-paragraph scan (Pro+)",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"text\": \"Coastal cities face a difficult transition as sea levels rise and storms grow more intense. Planners and engineers are revisiting flood defenses, drainage networks, and transit corridors built for a quieter climate. Insurance markets are repricing risk, and homeowners are renegotiating long-held assumptions about what land is buildable. The next decade of infrastructure investment will reshape how dense urban centers cope with water that no longer stays in its channels.\",\n  \"strategy\": \"combo\",\n  \"mc_k\": 7\n}"
            },
            "url": {
              "raw": "{{base_url}}/v1/detect/deep",
              "host": ["{{base_url}}"],
              "path": ["v1", "detect", "deep"]
            },
            "description": "Per-paragraph LoRA-adapter detection with selectable strategy. Returns 402 on free/anonymous tiers."
          }
        }
      ]
    },
    {
      "name": "Plagiarism",
      "description": "Multi-source plagiarism scanning (Pro+ only).",
      "item": [
        {
          "name": "POST /v1/plagiarism — multi-source scan",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"text\": \"Paste the passage you want to check against the open web, academic databases, and Wikipedia. Minimum 200 characters / 80 words. The scan runs 7 parallel source layers and typically returns within 5-15 seconds. Matches are returned as a per-passage citation list with similarity scores.\",\n  \"similarity_floor\": 0.6,\n  \"use_embeddings\": true,\n  \"max_ngrams\": 30\n}"
            },
            "url": {
              "raw": "{{base_url}}/v1/plagiarism",
              "host": ["{{base_url}}"],
              "path": ["v1", "plagiarism"]
            }
          }
        },
        {
          "name": "GET /v1/plagiarism/scans — list recent scans",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{base_url}}/v1/plagiarism/scans",
              "host": ["{{base_url}}"],
              "path": ["v1", "plagiarism", "scans"]
            }
          }
        },
        {
          "name": "GET /v1/plagiarism/scans/:id — full report",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{base_url}}/v1/plagiarism/scans/:id",
              "host": ["{{base_url}}"],
              "path": ["v1", "plagiarism", "scans", ":id"],
              "variable": [{ "key": "id", "value": "00000000-0000-0000-0000-000000000000", "description": "Scan UUID returned by /v1/plagiarism" }]
            }
          }
        }
      ]
    },
    {
      "name": "Usage",
      "item": [
        {
          "name": "GET /v1/usage — current billing-cycle usage",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{base_url}}/v1/usage",
              "host": ["{{base_url}}"],
              "path": ["v1", "usage"]
            },
            "description": "Detections this cycle, quota, balance (PAYG), 30-day daily breakdown, AI/human verdict ratios."
          }
        }
      ]
    },
    {
      "name": "Account",
      "description": "Account info + API key lifecycle.",
      "item": [
        {
          "name": "GET /v1/account — account info",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{base_url}}/v1/account",
              "host": ["{{base_url}}"],
              "path": ["v1", "account"]
            }
          }
        },
        {
          "name": "GET /v1/account/api-keys — list keys",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{base_url}}/v1/account/api-keys",
              "host": ["{{base_url}}"],
              "path": ["v1", "account", "api-keys"]
            }
          }
        },
        {
          "name": "POST /v1/account/api-keys — create key",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Production server\"\n}"
            },
            "url": {
              "raw": "{{base_url}}/v1/account/api-keys",
              "host": ["{{base_url}}"],
              "path": ["v1", "account", "api-keys"]
            },
            "description": "The plaintext `key` field is returned exactly ONCE. Store it securely."
          }
        },
        {
          "name": "DELETE /v1/account/api-keys/:id — revoke key",
          "request": {
            "method": "DELETE",
            "url": {
              "raw": "{{base_url}}/v1/account/api-keys/:id",
              "host": ["{{base_url}}"],
              "path": ["v1", "account", "api-keys", ":id"],
              "variable": [{ "key": "id", "value": "00000000-0000-0000-0000-000000000000", "description": "API key UUID (NOT the key value itself)" }]
            },
            "description": "Permanent. Rotate by creating a new key first, migrating clients, then revoking the old key."
          }
        }
      ]
    },
    {
      "name": "System",
      "item": [
        {
          "name": "GET /v1/health — liveness",
          "request": {
            "method": "GET",
            "auth": { "type": "noauth" },
            "url": {
              "raw": "{{base_url}}/v1/health",
              "host": ["{{base_url}}"],
              "path": ["v1", "health"]
            }
          }
        },
        {
          "name": "GET /v1/health/deep — readiness with component status",
          "request": {
            "method": "GET",
            "auth": { "type": "noauth" },
            "url": {
              "raw": "{{base_url}}/v1/health/deep",
              "host": ["{{base_url}}"],
              "path": ["v1", "health", "deep"]
            }
          }
        }
      ]
    }
  ]
}
