igpapi — Instagram private API Simulator for Node.js (API reference) 4.14.0
    Preparing search index...

    Interface RequestFeatures

    Explicit per-request wire capabilities, grouped by the app state they describe. Request builders set them in RequestContext.features; the platform edge derives the rest from the request and session state. A feature says the request may carry a header group; whether it is sent is the platform header resolver's decision, and its value the materializer's.

    interface RequestFeatures {
        ads?: { serving?: boolean };
        analytics?: {
            apiAnalytics?: boolean;
            criticalApi?: boolean;
            headFeedOrder?: boolean;
            mediaPublish?: boolean;
            prefetch?: boolean;
        };
        bloks?: { prismControl?: boolean; serializePayload?: boolean };
        body?: { gzip?: boolean; present?: boolean };
        direct?: { region?: boolean; regionHint?: boolean };
        experiments?: { saltIds?: boolean };
        graphql?: { eagerDict?: boolean; prefetch?: boolean; purpose?: boolean };
        identifiers?: {
            familyDevice?: boolean;
            machineId?: boolean;
            metaUsdid?: boolean;
            pigeonSession?: boolean;
        };
        integrity?: { attestation?: boolean };
        navigation?: { chain?: boolean };
        network?: { lastConnectionType?: boolean; properties?: boolean };
        transport?: {
            appNetSession?: boolean;
            friendlyNameDefault?: boolean;
            graphqlClientLibrary?: boolean;
            tigonRetry?: boolean;
        };
        zero?: { networkInterface?: boolean; rmdMap?: boolean };
    }
    Index

    Properties

    ads?: { serving?: boolean }

    Ads delivery state the request reports.

    Type Declaration

    • Optional Readonlyserving?: boolean

      The request asks for a feed that can carry ads. The iOS 451 app sends its ads header group (x-ads-opt-out, x-cm-*, x-device-id, x-fb, x-messenger, x-whatsapp, family_device_id) only on such feeds (feed/timeline, feed/injected_reels_media, discover/topical_explore).

    analytics?: {
        apiAnalytics?: boolean;
        criticalApi?: boolean;
        headFeedOrder?: boolean;
        mediaPublish?: boolean;
        prefetch?: boolean;
    }

    How the app classifies the request in x-fb-request-analytics-tags.

    Type Declaration

    • Optional ReadonlyapiAnalytics?: boolean

      Whether the request carries the API-analytics header group (priority, x-fb-friendly-name, x-fb-request-analytics-tags). Defaults to present; false on the launcher/mobileconfig config-sync surface, which the app sends without the group.

    • Optional ReadonlycriticalApi?: boolean

      critical_api request category (feed surfaces).

    • Optional ReadonlyheadFeedOrder?: boolean

      request_feed_order: head in the application tags: the head load of a feed.

    • Optional ReadonlymediaPublish?: boolean

      The request publishes what an upload sent (media/configure*): the app classifies it as a media upload (request_category: media_upload) and sends it with the upload's priority (u=1, i), as the 451 app does when it publishes.

    • Optional Readonlyprefetch?: boolean

      The prefetch analytics purpose (the default purpose is fetch).

    bloks?: { prismControl?: boolean; serializePayload?: boolean }

    Bloks rendering state the request reports.

    Type Declaration

    • Optional ReadonlyprismControl?: boolean

      The neutral control palette of the Bloks prism theme instead of the active (indigo) theme. Set on session-start jobs that the app still issues to the main host (e.g. push/register), which therefore cannot be marked session-start scope without changing their host.

    • Optional ReadonlyserializePayload?: boolean

      x-ig-bloks-serialize-payload: true on a GraphQL document request: the app stamps it on some graphql/query documents (the profile timeline, the top search results). REST requests carry it whatever they declare.

    body?: { gzip?: boolean; present?: boolean }

    Request payload shape; derived by the edge from the request itself.

    direct?: { region?: boolean; regionHint?: boolean }

    Direct-surface request intent. The app stamps x-msgr-region on the requests its Direct stack issues (the direct_v2/* REST calls and the Direct GraphQL queries), and only when the session holds a Direct message region; the regionHint marker is the FX accounts-badge probe, whose value is the session's direct-region hint.

    Type Declaration

    • Optional Readonlyregion?: boolean

      x-msgr-region from the session's Direct message region.

    • Optional ReadonlyregionHint?: boolean

      x-msgr-region from the session's direct-region hint (the empty served value).

    experiments?: { saltIds?: boolean }

    Process state the request reports beside its own fields. The group keeps its historical name; its one member is not an experiment id.

    Type Declaration

    • Optional ReadonlysaltIds?: boolean

      x-ig-salt-ids: the app's running user flows (MobileUserFlows), set by the edge from state on the session's REST requests; a request cannot declare the value.

    graphql?: { eagerDict?: boolean; prefetch?: boolean; purpose?: boolean }

    GraphQL request intent.

    Type Declaration

    • Optional ReadonlyeagerDict?: boolean

      x-ig-validate-null-in-legacy-eager-dict: the app stamps it on the documents it sends to graphql/query, in a process that began with a stored session. The edge derives it from the request's path; like every declared feature it is merged over the derived one, so a builder that declares it overrides the path, and no request family declares it today.

    • Optional Readonlyprefetch?: boolean

      The prefetch analytics purpose of the minimal GraphQL family.

    • Optional Readonlypurpose?: boolean

      x-graphql-request-purpose.

    identifiers?: {
        familyDevice?: boolean;
        machineId?: boolean;
        metaUsdid?: boolean;
        pigeonSession?: boolean;
    }

    Client identifiers the request stamps.

    Type Declaration

    • Optional ReadonlyfamilyDevice?: boolean

      x-ig-family-device-id.

    • Optional ReadonlymachineId?: boolean

      x-mid.

    • Optional ReadonlymetaUsdid?: boolean

      x-meta-usdid.

    • Optional ReadonlypigeonSession?: boolean

      x-pigeon-session-id.

    integrity?: { attestation?: boolean }

    Device integrity proofs the request carries.

    Type Declaration

    • Optional Readonlyattestation?: boolean

      x-ig-attest-params.

    navigation?: { chain?: boolean }

    Navigation state the request reports.

    Type Declaration

    • Optional Readonlychain?: boolean

      x-ig-nav-chain; derived from the navigation state when not set.

    network?: { lastConnectionType?: boolean; properties?: boolean }

    Device network state the request reports.

    Type Declaration

    • Optional ReadonlylastConnectionType?: boolean

      x-ig-last-connection-type. The stories-tray request reports the connection type it was loaded on (the 451 warm launch's tray, in a process that began with a stored session; no process that began logged out carries it).

    • Optional Readonlyproperties?: boolean

      x-fb-network-properties. The iOS 451 app reports it on every API request except the sessionless config sync, which declares false.

    transport?: {
        appNetSession?: boolean;
        friendlyNameDefault?: boolean;
        graphqlClientLibrary?: boolean;
        tigonRetry?: boolean;
    }

    Transport-level capabilities the app toggles per request. Most do not produce a TypeScript-materialized header: the native transport owns the header, and the declared flag only opts it out. appNetSession also opts the Android tasos family out (its presence itself is the process fact, not this flag; the iOS resolver reads the same declared opt-out).

    Type Declaration

    • Optional ReadonlyappNetSession?: boolean

      x-fb-appnetsession-nid / -sid. The iOS transport profile emits the pair by default; the Android profile is opted in when the app process began with a stored session (see transportClientOptions); false suppresses it for requests the app sends without it. iOS 451: the first requests of an app start (/rmd, IGOneLinkMiddlewarePageQuery, feed/reels_tray, feed/timeline, SUBSDataQuery) and the sessionless launcher/mobileconfig config sync. Android 448: feed/reels_tray, feed/timeline and the sessionless launcher/mobileconfig config sync — the shared SESSIONLESS_CONFIG_SYNC_FEATURES set covers its every sender, both cold-start calls and the password-key fallback (the 448 app also sends no pair on launcher/sync_ep_config, which the library does not send).

    • Optional ReadonlyfriendlyNameDefault?: boolean

      The transport's URL-derived default x-fb-friendly-name. The transport emits it for any /api/v1 request the caller does not set one on; false suppresses the default. Wired from the analytics.apiAnalytics facet, so launcher/mobileconfig (which the app sends without a friendly name) opts out through the same feature.

    • Optional ReadonlygraphqlClientLibrary?: boolean

      x-graphql-client-library. The transport injects pando only on the Pando GraphQL URLs (graphql_www, graphql/query) when the request sets no value; false suppresses that default for the GraphQL calls the app sends outside its Pando client — in the iOS 451 app OdinTigonDataTask (and api/v1/wwwgraphql/ig/query/, which carries no transport default at all).

    • Optional ReadonlytigonRetry?: boolean

      x-tigon-is-retry. The transport emits it by default; false suppresses it for requests the app issues without the Tigon retry marker — currently the Direct pending-requests preview poll of the 448 Android app.

    zero?: { networkInterface?: boolean; rmdMap?: boolean }

    Zero-rating / routing-map state the request reports.

    Type Declaration

    • Optional ReadonlynetworkInterface?: boolean

      zero-http-network-interface; derived from the zero-campaign state when not set. A later, separate state from the routing map: the 448 app sends x-fb-rmd before the interface appears.

    • Optional ReadonlyrmdMap?: boolean

      x-fb-rmd; derived from routing-map state when not set.