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

    Interface MobileApplicationState

    interface MobileApplicationState {
        adaptiveUi?: boolean;
        APP_VERSION: string;
        APP_VERSION_CODE: string;
        BLOKS_VERSION_ID: string;
        bloksClientContext?: MobileBloksClientContext;
        bloksInfraTheme?: string;
        bloksPrismExtendedPalette?: BloksPrismExtendedPalette;
        bloksThemeParams?: readonly BloksThemeParam[];
        BREADCRUMB_KEY: string;
        CAPABILITIES: string;
        directInboxMode?: number;
        directSearchGenAiBotsLimit?: number;
        FACEBOOK_ANALYTICS_APPLICATION_ID: string;
        FACEBOOK_ANALYTICS_CLIENT_TOKEN?: string;
        GRAPHQL_DOC_IDS?: Readonly<Record<string, string>>;
        GRAPHQL_GZIP_MIN_BYTES?: number;
        GRAPHQL_OMIT_PRETTY?: boolean;
        GRAPHQL_SERVER_TIMESTAMPS?: "timestamp" | "true";
        launchWire?: "451";
        mediaLikeWire?: MobileMediaLikeWire;
        mediaNoteWire?: MobileMediaNoteWire;
        mediaRepostWire?: MobileMediaRepostWire;
        reelsTrayPageSize?: number;
        shoppingExperiments?: readonly string[];
        SUPPORTED_CAPABILITIES: readonly SupportedCapability[];
        ufiActionFlowActions?: readonly MobileUfiActionFlowAction[];
        ZERO_HEADERS?: Readonly<Record<MobileZeroPhase, ZeroHeaderValues>>;
    }
    Index

    Properties

    adaptiveUi?: boolean

    The build's x-ig-is-adaptive-ui value; absent, the header is not sent. Version-bound: every i.instagram.com request of the 451 builds' wire carries it as false, and the 448 and 450 builds carry none. A profile without the member is a pre-451 build.

    APP_VERSION: string
    APP_VERSION_CODE: string
    BLOKS_VERSION_ID: string
    bloksClientContext?: MobileBloksClientContext

    The shape of the build's bk_client_context: the keys in the order the build sends them, including pixel_ratio where the build sends it. The values stay with their owners — the Bloks version with BLOKS_VERSION_ID, the theme with bloksThemeParams, the style sheet the app's own instagram, and the screen scale with the device, read by the platform (MobileDisplayScaleWire) — so a profile cannot pair one build's version with another's theme, nor a build claim a scale the device's user-agent contradicts. Absent, the reference Android order applies (bloks_version, styles_id, the theme when the build carries one).

    A build fact like the theme: the iOS profile declares the v425-era shape (theme_params, styles_id, pixel_ratio), which carries no bloks_version key; the reference device is an iPhone X (scale 3), and a different generated device renders its own scale. The iOS 451 login's context is not known, so the v425 value is the fact (conformance/spec/conformance-across-app-versions.md). withDefaultVersionBoundFields adopts and drops the shape with the other wire-presence facts.

    bloksInfraTheme?: string

    The INTERNAL_INFRA_THEME spelling the build sends in the login-stack action params (the client-data redirect). A build constant beside bloksThemeParams: the reference 429/448 build 1073357425 sends THREE_C, and the 448 build 1073357578 and the 451 build send THREE_NEUTRAL_GRAY. A profile without it sends no field: the build's own spelling is the only value sent, never a default of another build.

    bloksPrismExtendedPalette?: BloksPrismExtendedPalette

    The build's active Bloks prism extended palette, once the app has read it: the x-bloks-prism-extended-palette-gray and -polish-enabled flags. They are one configuration read, not two independent switches, but each has its own value per build, so each is declared: both true on the 448 build 1073357578, both 450 builds and both 451 builds; both absent (rendered false) on the 448 build 1073357425; and older 429-era traffic shows a third combination (gray on, polish off) that this profile cannot hold — see MobileProcessBloksPrismState. The neutral control palette sends false for both on every build.

    bloksThemeParams?: readonly BloksThemeParam[]

    The Bloks theme the build reports in bk_context.theme_params on its Bloks requests. A build constant, like the palette: the 451 build sends the XMDS theme (three_neutral_gray); the reference 448 build 1073357425 sends none, while the 448 build 1073357578 sends the same XMDS theme as the 451 build. A profile without it sends the empty list on an app-root context and omits the key where the build does. withDefaultVersionBoundFields adopts and drops it like the other wire-presence facts.

    BREADCRUMB_KEY: string
    CAPABILITIES: string
    directInboxMode?: number

    The mode the app's Direct inbox snapshot sends (direct_v2/inbox/). Version-bound like the app version and capabilities: the presented Android profile sets 2, and a profile that does not set it sends no mode.

    directSearchGenAiBotsLimit?: number

    The num_ai_bots the Direct search surface requests (direct_v2/search_gen_ai_bots/); absent renders 50.

    FACEBOOK_ANALYTICS_APPLICATION_ID: string
    FACEBOOK_ANALYTICS_CLIENT_TOKEN?: string
    GRAPHQL_DOC_IDS?: Readonly<Record<string, string>>

    GraphQL client doc ids keyed by friendly name. When an entry matches the call's friendly name it overrides that call's literal clientDocId.

    GRAPHQL_GZIP_MIN_BYTES?: number

    The size from which the app gzips a GraphQL form: a form whose urlencoded body has at least this many bytes goes out gzipped, a smaller one does not (Instagram Android 451: 500; the app gzips every form of 500 bytes or more and none of 497 or fewer). Undefined keeps the builder's own choice (gzip unless the builder declares otherwise).

    GRAPHQL_OMIT_PRETTY?: boolean

    When true, GraphQL forms omit the pretty field (Instagram Android 448+).

    GRAPHQL_SERVER_TIMESTAMPS?: "timestamp" | "true"

    Value of the GraphQL form server_timestamps field. Instagram Android 448+ sends the literal true; older traffic sent a unix timestamp. Undefined keeps the legacy timestamp.

    launchWire?: "451"

    The launch wire the app build sends, as one fact: '451' for the 451 build's Android launch. It carries the feed/timeline block (the personalization flag, is_non_feed_surface and the extended session_level_signals), the appnetsession pair on the two feeds, the shared launch additions, the inbox tray's graphql_www form, the save-credentials placement and the full content-filter dictionary fan-out; a profile without it sends the 448 launch wire (the 448 form, the feeds' pair opt-out, five dictionaries, the graphql/query tray and the after-feed prompt). One value, so a mixture cannot be represented.

    Version-bound like the app version: the presented Android 451 profile carries it and withDefaultVersionBoundFields fills it on a same-version restore. The iOS 451 app sends a different feed form, so an iOS profile does not carry it: the shared feed brick renders the Android form only.

    mediaLikeWire?: MobileMediaLikeWire

    The wire a media like is sent with on this build: the REST api/v1/media/<id>/like/ or the graphql_www LikeMutation.

    A version-bound fact of the presentation, like the app version itself: the presented Android 451 profile sends the mutation (every 451 like, on the contextual feed and in the reels viewer), so a live client sends it; withDefaultVersionBoundFields fills it on a same-version restore, and a restore of another released version runs on the presented profile's application altogether. A profile that does not declare it is not evidence of a wire: the brick dies with MobileMediaLikeWireNotDeclaredError (a defect, not a typed failure) rather than sending a request the app was not seen to send. The iOS like is not modelled, so the iOS profile declares nothing and an iOS like is the same defect. A 448/450-era profile declares 'rest' — the wire its feed likes carry. Open: one 450 build sent both wires on one surface, so what selects the wire inside a build is not known; a REST-like session with its configuration answer, or a paired run of the two wires, closes it.

    mediaNoteWire?: MobileMediaNoteWire

    The shape of the repost note (create_note/v2) this build sends: the '451' form names the media's carousel child only when it has one, its carousel_index is the child's index or -1, and it carries no inventory_source and no ranking_info_token; the '450' form always carries carousel_media_id, carousel_index (0 when the caller names none) and ranking_info_token (empty when the caller has none), and inventory_source (the feed's or its own default).

    A version-bound fact of the presentation like mediaRepostWire, whole: both 451 notes (a profile-posts media and the reels viewer's contextual feed) carry carousel_index=-1 and none of the three fields, while the 450 notes carry carousel_media_id and index 0. withDefaultVersionBoundFields fills it on a same-version restore and drops a stored value the presented profile does not declare. A profile that declares neither shape is not evidence: the note dies with MobileMediaNoteWireNotDeclaredError (a defect, not a typed failure).

    mediaRepostWire?: MobileMediaRepostWire

    The way this build reposts a feed media onto the user's profile: 'editor' creates a blank note and sets its text on the note editor's screen (UpdateMediaNoteRepostText), 'note-with-text' sends the text in the one create_note/v2 request, with no editor screen.

    A version-bound fact of the presentation like mediaLikeWire: the presented Android 451 profile sends the note with the text in one request (every 451 repost), and a 448/450-era profile declares 'editor' (the blank note and the composer's text mutation). withDefaultVersionBoundFields fills it on a same-version restore. A profile that does not declare it is not evidence: reposting dies with MobileMediaRepostWireNotDeclaredError (a defect, not a typed failure).

    reelsTrayPageSize?: number

    The page_size the build's feed/reels_tray/ request sends: a fact of the app version, not of the caller (Android 448/451 send 50, iOS 451 25). A profile that does not name one sends no field rather than an invented default.

    shoppingExperiments?: readonly string[]

    The shopping experiments the app's launch checks, one IGShoppingExperimentCheckBool each, in this order. Version-bound: a profile that does not set it sends the one default check (shops_bau_impact).

    SUPPORTED_CAPABILITIES: readonly SupportedCapability[]
    ufiActionFlowActions?: readonly MobileUfiActionFlowAction[]

    The UFI (user-feed-interface) actions whose requests this build wraps in its UFI action flow: the like and/or the comment. While one of the listed actions runs, the app's user-flow logger keeps that action's flow running (marker 220140399; decompiled: C07rq.A01, type 4, started flowStartIfNotOngoingForMarker(…, 300 000)), so every REST request built during it — the action's own and the ones it starts — carries it.

    A version-bound fact of the presentation like mediaLikeWire, and a wire-presence one in both directions: one Android build sends the marker on the comment's offensive check and the comment itself and on no like, while a 450 build sends it on the feed like and on the note of a repost and on neither the comment nor its check; what selects the action inside a build is not known, so each build declares the actions it sends. The action does not reach every surface: the reels like and every request of the 450 build whose like is the GraphQL mutation carry no such flow, so the screens that run the flow are the ones that need it (the feed surfaces' like, the comment sheet's comment). withDefaultVersionBoundFields fills it on a same-version restore and drops a stored list the presented profile does not declare, so a restore never starts a flow its build does not.

    ZERO_HEADERS?: Readonly<Record<MobileZeroPhase, ZeroHeaderValues>>

    Zero-rating header values per MobileZeroPhase. This table is the one wire-presence fact of the legacy zero-rating wire: a profile that carries it sends x-zero-balance / x-zero-eh, and its zero device ids (x-zero-a-device-id / -d / -f, gated by the device's attestation key — see zeroDeviceIdsOf) ride with the same fact. A profile without it sends neither the pair nor the ids. The 450+ app dropped all of it from its wire, so the presented profile carries no table; a profile of an older build declares that build's table itself, while the live options take no application profile.