Current collected state Current
Observed since 21 Oct, 11:02 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
Multi-modal AI content detection with per-model provenance
Multi-modal AI content detection with per-model provenance — text, images, audio, and video in one call.
pip install aiidentifiers
50 free API calls/month — no credit card. Get your key at aiidentifiers.com/get-api-key.
from aiidentifiers import Client
client = Client(api_key="aid_...")
# ── Text detection ─────────────────────────────────────────────────────────
result = client.detect_text("This essay was drafted by an AI writing assistant.")
print(result.verdict) # "ai_generated"
print(result.confidence) # 88
print(result.is_ai_generated) # True
# Per-model provenance (the key differentiator)
for p in result.provenance:
print(f" {p.model} ({p.provider}): {p.verdict} — {p.confidence}%")
# GPT-5 Text Analysis (openai): ai_generated — 92%
# Claude 4 Opus (anthropic): ai_generated — 88%
# Gemini 2.0 Flash (google): human_generated — 71%
# o1/o3 Reasoning (openai): ai_generated — 95%
# ── URL detection (image/video/audio/text — auto-detected) ────────────────
result = client.detect_url("https://example.com/image.jpg")
print(result.summary())
# ── Local file detection ───────────────────────────────────────────────────
result = client.detect_file("/path/to/audio.mp3")
result = client.detect_file("/path/to/video.mp4")
result = client.detect_file("/path/to/image.png")
# ── Quota check ────────────────────────────────────────────────────────────
quota = client.quota()
print(f"{quota.used}/{quota.limit} calls used ({quota.plan} plan, resets {quota.resets_at})")
print(f"{quota.remaining} calls remaining")
Every DetectionResult contains:
| Field | Type | Description |
|---|---|---|
verdict | str | "ai_generated" | "human_generated" | "uncertain" |
confidence | int | 0–100 ensemble confidence score |
is_ai_generated | bool | Convenience boolean |
modality | str | "text" | "image" | "video" | "audio" |
provenance | list[ProvenanceScore] | Per-model breakdown |
processing_time_ms | int | Wall-clock time in ms |
quota | QuotaInfo | Quota status after this call |
from aiidentifiers.integrations.langchain import get_tools
from langchain.agents import AgentExecutor, create_openai_functions_agent
from langchain_openai import ChatOpenAI
tools = get_tools(api_key="aid_...")
llm = ChatOpenAI(model="gpt-4o")
agent = create_openai_functions_agent(llm, tools, prompt)
executor = AgentExecutor(agent=agent, tools=tools)
result = executor.invoke({
"input": "Is this image AI-generated? https://example.com/photo.jpg"
})
from aiidentifiers.integrations.llamaindex import create_ai_identifiers_tools
from llama_index.core.agent import ReActAgent
tools = create_ai_identifiers_tools(api_key="aid_...")
agent = ReActAgent.from_tools(tools, verbose=True)
agent.chat("Check if this text was written by an AI: 'Leveraging synergies...'")
from aiidentifiers.integrations.crewai import AIIdentifiersDetectionTool
from crewai import Agent, Task, Crew
tool = AIIdentifiersDetectionTool(api_key="aid_...")
agent = Agent(role="Fact Checker", tools=[tool], ...)
| Plan | Quota | Price |
|---|---|---|
| Free | 50 calls/month | $0 — no credit card |
| Pro | 10,000 calls/month | $10/month |
| Enterprise | 100,000 calls/month | $50+/month |
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 2.0.0 | 2 Aug 2026 | 4 |
This describes our collected data; it is not a security assessment.
Shared repository data · GitHub
Observed since 21 Oct, 11:02 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:15df006faf8f7077d556cffdc8fab94c7c50d60490d46b2b254fe9195ea205bf