Files
riposte-marketplace/integrations/ipinfo/manifest.yaml
T
f3nris 6343a0c952 feat(ipinfo): support the Lite API for free/Lite plan tokens (v1.1.0)
The integration only exposed the Core API (/lookup/*), which returns 403
for accounts on the free/Lite plan — including the instance Test button.

Add the Lite endpoints: lite_lookup_ip (GET /lite/{ip}), lite_lookup_me
(GET /lite/me) and lite_batch (POST /batch/lite, code-first because the
endpoint takes a raw JSON array; chunked at the documented 1000-IP cap).

Point test_connection at /lite/me: every plan can reach it, so the token
check now succeeds on Lite-only accounts while still validating Core ones.
Core commands keep their paths and state the plan requirement up front.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-05 21:01:43 +02:00

140 lines
5.1 KiB
YAML

id: ipinfo
name: IPinfo
version: 1.1.0
description: "IPinfo — IP address enrichment. Lite API (all plans, unlimited): ASN / AS name / AS domain / country / continent. Core API (paid Core plan): geolocation, network details and privacy flags (hosting, mobile, anycast, satellite)."
changelog: "1.1.0 — Lite API support for accounts on the free/Lite plan: lite_lookup_ip, lite_lookup_me and lite_batch (POST /batch/lite, chunked at 1000 IPs). test_connection now calls /lite/me, which every plan can reach, so the Test button no longer fails on Lite-only tokens. Core commands renamed in their description to state the Core plan requirement. 1.0.1 — Re-publish to regenerate form-based command scripts (fixes 'script not found' on install). 1.0.0 — Initial release: IP lookup, single-field lookup, own IP, batch, and connectivity test."
category: enrichment
config_schema:
properties:
base_url:
type: string
description: "IPinfo API base URL (shared by the Lite and Core endpoints)"
default: https://api.ipinfo.io
token:
type: string
description: IPinfo API access token (Account → Token)
x-soar-sensitive: true
required:
- token
# IPinfo authenticates with the access token as the `token` query parameter.
auth:
- id: apikey
type: api_key
in: query
name: token
value_template: "{{secret}}"
secret_field: token
commands:
# ── Lite API — available on every plan, no daily/monthly quota ─────────────
- id: lite_lookup_ip
name: ipinfo-lite-lookup-ip
description: "Lite enrichment for an IP — ASN, AS name, AS domain, country and continent. Works on every plan, including free/Lite."
risk: read
inputs_schema:
properties:
ip: { type: string, description: "IPv4 or IPv6 address" }
required: [ip]
outputs_schema: { properties: {} }
request:
method: GET
path: /lite/{ip}
auth_ref: apikey
- id: lite_lookup_me
name: ipinfo-lite-lookup-me
description: "Lite details for the IP address making the request (ASN, country, continent)."
risk: read
inputs_schema:
properties: {}
required: []
outputs_schema: { properties: {} }
request:
method: GET
path: /lite/me
auth_ref: apikey
# Code-first: POST /batch/lite takes a raw JSON array body, which the
# form-based generator (object body) cannot produce. See scripts/lite_batch.py.
- id: lite_batch
name: ipinfo-lite-batch
description: "Lite lookup for many IPs in one call. Chunked at the API limit of 1000 IPs per request; returns one object keyed by IP."
risk: read
inputs_schema:
properties:
ips: { type: string, description: "Comma-separated IP addresses, e.g. '8.8.8.8,1.1.1.1'" }
required: [ips]
outputs_schema: { properties: {} }
# ── Core API — requires a paid Core plan (403 on Lite/free tokens) ─────────
- id: lookup_ip
name: ipinfo-lookup-ip
description: "Core plan required. Full enrichment for an IP — geolocation, ASN/network, and privacy/network flags."
risk: read
inputs_schema:
properties:
ip: { type: string, description: "IPv4 or IPv6 address" }
required: [ip]
outputs_schema: { properties: {} }
request:
method: GET
path: /lookup/{ip}
auth_ref: apikey
- id: lookup_field
name: ipinfo-lookup-field
description: "Core plan required. A single field for an IP (e.g. city, country, hostname, as)."
risk: read
inputs_schema:
properties:
ip: { type: string, description: "IP address" }
field: { type: string, description: "Field name, e.g. city, country, hostname, as" }
required: [ip, field]
outputs_schema: { properties: {} }
request:
method: GET
path: /lookup/{ip}/{field}
auth_ref: apikey
- id: lookup_me
name: ipinfo-lookup-me
description: "Core plan required. Details for the IP address making the request."
risk: read
inputs_schema:
properties: {}
required: []
outputs_schema: { properties: {} }
request:
method: GET
path: /lookup/me
auth_ref: apikey
# Code-first: the batch endpoint takes a raw JSON array body, which the
# form-based generator (object body) cannot produce. See scripts/batch.py.
- id: batch
name: ipinfo-batch
description: "Core plan required. Look up multiple IPs (or IP/field paths) in a single request."
risk: read
inputs_schema:
properties:
ips: { type: string, description: "Comma-separated IPs or lookup paths, e.g. '8.8.8.8,1.1.1.1,8.8.4.4/country'" }
required: [ips]
outputs_schema: { properties: {} }
# Uses the Lite endpoint on purpose: it validates the token on every plan,
# whereas /lookup/me returns 403 for Lite-only accounts.
- id: test_connection
name: ipinfo-test-connection
description: "Verify connectivity and credentials (used by the Test button)."
risk: read
inputs_schema:
properties: {}
required: []
outputs_schema: { properties: {} }
request:
method: GET
path: /lite/me
auth_ref: apikey