Tag
Vendor, date, total, type, document number — extracted as structured fields, not free text.
Turn any PDF or image into structured metadata, smart filenames, and an enriched copy you can download. Call it via MCP or REST.
1,500 free tags every month — no credit card.
One tool in Gemina's harness for document AI.
Vendor, date, total, type, document number — extracted as structured fields, not free text.
Returns six filename patterns. Your agent picks the one that fits your filing convention.
2026-02-15_Acme-Corp_Invoice.pdfEmbeds metadata into PDF or EXIF. Download via a short-lived URL.
Wherever a document needs structured metadata — agent, pipeline, or product.
Your agent files user uploads to consistent folders — no custom parsers per document type.
Tag documents on ingestion so you can filter your vector search by vendor, date, or type.
Send receipts to accounting, contracts to legal, invoices to AP — by structured tag, not regex.
Enrich user uploads in your product backend — cheaper than per-document LLM calls.
# 1. Reserve an upload slot
upload = mcp.call("files_create_upload", filename="invoice.pdf")
# 2. PUT the file to the signed URL
upload_to(upload.url, file_bytes)
# 3. Tag it
result = mcp.call("tag_file", file_id=upload.file_id)
# → metadata, six filename patterns, enriched-file URL
# Then: pull back the enriched copy whenever you need it
enriched = download(result.enriched_file_url)Or use tag_url if your file already lives at a public URL.
{
"document_id": "abc-123",
"suggested_filename": "2026-02-15_Acme-Corp_Invoice_12345.pdf",
"metadata": {
"document_type": "invoice",
"vendor": "Acme Corp",
"date": "2026-02-15",
"amount": 7200,
"currency": "ILS",
"document_number": "12345",
"title": "Invoice",
"tags": ["vendor", "invoice"]
},
"filename_patterns": {
"date_first": "2026-02-15_Invoice_12345.pdf",
"type_first": "Invoice_12345_2026-02-15.pdf",
"vendor_first": "Acme-Corp_Invoice_2026-02-15.pdf",
"date_vendor": "2026-02-15_Acme-Corp.pdf",
"vendor_date": "Acme-Corp_2026-02-15.pdf",
"compact": "Acme-Corp_Invoice.pdf"
},
"enriched_file_url": "https://api.gemina.co/files/tmp_abc123.pdf",
"enriched_file_expires_at": "2026-02-15T12:15:00Z"
}Drop the snippet into your client config, paste your API key, restart.
openclaw mcp set gemina '{"url":"https://api.gemina.co/api/v1/mcp/","transport":"streamable-http","headers":{"X-API-Key":"<paste-your-key-here>"}}'mcp_servers:
gemina:
url: "https://api.gemina.co/api/v1/mcp/"
headers:
X-API-Key: "<paste-your-key-here>"claude mcp add --transport http gemina https://api.gemina.co/api/v1/mcp/ \
--header "X-API-Key: <paste-your-key-here>"import requests
def gemina_tag(file_path: str) -> dict:
"""Tag a document via Gemina's FileTag REST API."""
with open(file_path, "rb") as f:
response = requests.post(
"https://api.gemina.co/api/v1/filetag",
headers={"X-API-Key": "<paste-your-key-here>"},
files={"file": f},
)
response.raise_for_status()
return response.json()
# Use the returned metadata to enrich your vector store entries.
# Example: attach vendor + date + type to each chunk for RAG filtering.{
"mcpServers": {
"gemina": {
"url": "https://api.gemina.co/api/v1/mcp/",
"headers": {
"X-API-Key": "<paste-your-key-here>"
}
}
}
}{
"mcpServers": {
"gemina": {
"url": "https://api.gemina.co/api/v1/mcp/",
"headers": {
"X-API-Key": "<paste-your-key-here>"
}
}
}
}{
"servers": {
"gemina": {
"type": "http",
"url": "https://api.gemina.co/api/v1/mcp/",
"headers": {
"X-API-Key": "<paste-your-key-here>"
}
}
}
}[mcp_servers.gemina]
url = "https://api.gemina.co/api/v1/mcp/"
http_headers = { "X-API-Key" = "<paste-your-key-here>" }{
"mcpServers": {
"gemina": {
"serverUrl": "https://api.gemina.co/api/v1/mcp/",
"headers": {
"X-API-Key": "<paste-your-key-here>"
}
}
}
}npx @modelcontextprotocol/inspector
# Then in the Inspector UI:
# Transport: Streamable HTTP
# URL: https://api.gemina.co/api/v1/mcp/
# Header: X-API-Key: <paste-your-key-here>curl -X POST https://api.gemina.co/api/v1/mcp/ \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "X-API-Key: <paste-your-key-here>" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}'Resets on account anniversary. 1 credit per page. ~10 tags/sec burst.
Need more? Bronze, Silver, and Gold all include larger FileTag allowances plus the full Gemina harness. See paid plans
Three uses out of one response — pick the one your code needs, ignore the rest.
{
"document_id": "abc-123",
"suggested_filename": "2026-02-15_Acme-Corp_Invoice_12345.pdf",
"metadata": {
"document_type": "invoice",
"vendor": "Acme Corp",
"date": "2026-02-15",
"amount": 7200,
"currency": "ILS",
"document_number": "12345",
"title": "Invoice",
"tags": ["vendor", "invoice"]
},
"filename_patterns": {
"date_first": "2026-02-15_Invoice_12345.pdf",
"type_first": "Invoice_12345_2026-02-15.pdf",
"vendor_first": "Acme-Corp_Invoice_2026-02-15.pdf",
"date_vendor": "2026-02-15_Acme-Corp.pdf",
"vendor_date": "Acme-Corp_2026-02-15.pdf",
"compact": "Acme-Corp_Invoice.pdf"
},
"enriched_file_url": "https://api.gemina.co/files/tmp_abc123.pdf",
"enriched_file_expires_at": "2026-02-15T12:15:00Z"
}Vendor, date, type, total. Use for filtering, routing, and RAG metadata enrichment.
Your code picks the one that suits your filing system.
Short-lived signed URL. The file already has metadata embedded into PDF properties or image EXIF.
Files are deleted within 7 days of upload (configurable per plan).
Your documents are never used to train AI models — Gemina's or anyone else's.
AES-256 at rest, TLS 1.3 in transit. Configurable data residency on paid plans.
Model Context Protocol — an open standard for AI agents to call external tools. Claude Desktop, Cursor, OpenClaw, Hermes-Agent and many others support it natively.
Both work. Same endpoints under the hood. MCP is convenient if you're inside an agent client; REST is convenient if you're building from scratch.
Yes. Call POST /v1/filetag per document during ingestion, attach the metadata to your vector store entries, and filter retrieval at query time. Cheaper and more consistent than per-document LLM calls.
PDF, PNG, JPEG, GIF, WebP. Up to 50 MB.
50 MB. Files larger than 256 KB use a pre-signed upload flow (your MCP client handles this automatically).
You'll get a clear error. Upgrade to a paid plan for more, or wait until your monthly reset.
Yes. One key, both surfaces. The same key also works for Data Extraction and other Gemina REST endpoints — one Gemina account, all surfaces.
~10 tags/second per API key, on top of the monthly credit cap.
Indexing across documents and natural-language queries. Sign up now — your existing API key will work for those when they ship.