GET Catalog Details

Fetch a single catalog entry along with all of its actions

GEThttps://api.anakin.io/v1/wire/catalog/{slug}

Returns the catalog entry for a single website plus every visible action it exposes. This is the canonical way to discover an action's action_id, parameter schema, mode (async / sync), and credit cost before calling POST /v1/wire/task.

Requires an X-API-Key. Returns public actions plus any private actions you own.


Path Parameters

ParameterTypeDescription
slug requiredstringCatalog slug (e.g. airbnb, linkedin). Get slugs from GET /v1/wire/catalog

Response

200 OK
{
  "catalog": {
    "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "slug": "airbnb",
    "name": "Airbnb",
    "url": "https://www.airbnb.com",
    "domain": "airbnb.com",
    "category": "travel",
    "description": "Search listings, fetch reviews, and pull host details.",
    "logo_url": "https://cdn.anakin.io/logos/airbnb.png",
    "auth_required": true,
    "auth_type": "cookie",
    "auth_types": ["browser_state", "credentials"],
    "auth_login_url": "https://www.airbnb.com/login",
    "supported_sources": ["1password", "azure_key_vault"],
    "status": "active",
    "created_at": "2026-02-01T00:00:00Z",
    "updated_at": "2026-04-20T12:00:00Z",
    "action_count": 4
  },
  "actions": [
    {
      "id": "f1e2d3c4-b5a6-7890-1234-56789abcdef0",
      "action_id": "ab_search_listings",
      "catalog_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "name": "Search Listings",
      "description": "Search Airbnb listings by query, dates, and guest count.",
      "tags": ["search", "listings"],
      "type": "read",
      "mode": "async",
      "auth_mode": "none",
      "auth_required": false,
      "parameters": [
        { "name": "query",    "type": "string",  "required": true,  "description": "Location query, e.g. 'pacific heights'" },
        { "name": "checkin",  "type": "string",  "required": false, "description": "ISO date" },
        { "name": "checkout", "type": "string",  "required": false, "description": "ISO date" },
        { "name": "adults",   "type": "integer", "required": false, "default": 1 },
        { "name": "children", "type": "integer", "required": false },
        { "name": "infants",  "type": "integer", "required": false },
        { "name": "pets",     "type": "integer", "required": false },
        { "name": "cursor",   "type": "string",  "required": false, "description": "Pagination cursor from previous response" },
        { "name": "currency", "type": "string",  "required": false },
        { "name": "locale",   "type": "string",  "required": false }
      ],
      "credits_per_call": 1,
      "wheel_version": "0.4.2",
      "wheel_filename": "ab_search_listings-0.4.2-py3-none-any.whl",
      "build_request_id": "6964eeb6-b426-4095-a1ab-b443f8311c9d",
      "status": "active",
      "created_at": "2026-02-01T00:00:00Z",
      "updated_at": "2026-04-20T12:00:00Z"
    }
  ],
  "login_input_schema": [
    { "name": "email",    "type": "string", "required": true,  "default": "",   "description": "Account email for the catalog login." },
    { "name": "password", "type": "string", "required": true,  "default": "",   "description": "Account password. Sensitive — never logged or persisted." },
    { "name": "country",  "type": "string", "required": false, "default": "us", "description": "ISO country code for the storefront region." }
  ]
}

Catalog fields

See GET /v1/wire/catalog — the catalog object on this endpoint matches the same CatalogEntry shape. In addition to the fields documented there, the object always includes:

FieldTypeDescription
catalog.auth_typestring | nullPrimary credential type for this catalog (e.g. browser_state, credentials), or null if the catalog has no auth
catalog.auth_login_urlstring | nullWhere users should log in to seed a browser_state credential
catalog.supported_sourcesstring[]Identity-source providers this catalog accepts credentials from (1password, azure_key_vault); empty when none. Binding a source-backed login is rejected with PROVIDER_NOT_SUPPORTED_BY_CATALOG when the provider isn't listed here

Optional fields (logo_url, auth_type, auth_login_url) are omitted when not set, not returned as null.

Login input schema

FieldTypeDescription
login_input_schemaarrayTop-level array of { name, type, required, default, description } — the login fields for credentials-mode catalogs. Empty for catalogs without a credentials login

Action fields

FieldTypeDescription
actions[].action_idstringPass this as action_id when calling POST /v1/wire/task
actions[].namestringDisplay name
actions[].descriptionstring | nullShort summary
actions[].tagsstring[]Free-form tags for filtering / discovery
actions[].typestringAction category — read or write
actions[].modestringasync (returns job_id, poll for results) or sync (returns data inline)
actions[].auth_modestring"none" | "optional" | "required". requiredcredential_id mandatory; optionalcredential_id honored if supplied; none ⇒ credentials are ignored
actions[].auth_requiredbooleanDeprecated legacy mirror — true iff auth_mode === "required". Prefer reading auth_mode
actions[].parametersarrayArray of param descriptors — { name, type, required, default?, description? } — one per input the action accepts via POST /v1/wire/task
actions[].credits_per_callintegerBase credit cost. Some actions use a CEL expression in action_config.credit_expression to compute final cost from the response — final cost is reflected on the job record
actions[].wheel_versionstring | nullBuild version of the underlying scraper
actions[].wheel_filenamestringFilename of the built wheel (e.g. mb_search-1.1.0-py3-none-any.whl)
actions[].build_request_idstring (UUID)The build request that produced this action
actions[].statusstringactive or pending_review
actions[].owner_user_idstring | nullSet when this is a private action you built via build-request

Only actions visible to the requesting user are returned. Private actions belonging to other users are filtered out server-side.


Error Responses

Catalog not found404 Not Found

{
  "status": "error",
  "error": { "code": "NOT_FOUND", "message": "Catalog entry not found" }
}

Code Examples

curl https://api.anakin.io/v1/wire/catalog/airbnb \
  -H "X-API-Key: your_api_key"

Rate Limit

120 requests per minute per IP.