{
  "openapi": "3.1.0",
  "info": {
    "title": "Instagram API",
    "version": "1.0.0",
    "description": "An Instagram scraper API for public Instagram data: account profiles with their story highlights, an account’s posts, its reels with play counts, one post or reel in full, the public page of comments, Instagram’s own reel feed and the terms it is trending — as structured JSON, with cursor paging and a free URL parser."
  },
  "servers": [
    {
      "url": "https://api.fetchlayer.dev/instagram"
    }
  ],
  "security": [
    {
      "BearerAuth": []
    }
  ],
  "components": {
    "securitySchemes": {
      "BearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "API Key",
        "description": "Send your FetchLayer key as Authorization: Bearer ss-your-key."
      }
    }
  },
  "paths": {
    "/user-profile": {
      "post": {
        "operationId": "user-profile",
        "tags": [
          "Accounts"
        ],
        "summary": "Get an Instagram account profile",
        "description": "One public Instagram account’s profile, by username or profile URL. Returns the display name, bio, unwrapped bio links, avatar, the verified, private and memorialised flags, pronouns, badges, the follower and following counts — and highlights, the title and cover of every story highlight kept on the profile, which almost nothing else returns. Two things to expect rather than debug. stats.postCount is always null: Instagram publishes no post count to a signed-out reader, and the response says so — \"The source does not publish a post count for a signed-out reader; read the account's posts to count them.\" And a highlight’s contents are not public; only its title and cover are. A private account still returns its full profile — only its posts are withheld. Billing: 1 credit.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "username": {
                    "type": "string",
                    "description": "A username with or without the leading @, or a profile URL."
                  },
                  "format": {
                    "type": "string",
                    "description": "json or markdown. Markdown returns a rendered summary instead of the structured record.",
                    "example": "json"
                  },
                  "timeoutMs": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Time limit for each individual page read, in milliseconds (max 60000). It bounds one page, not the whole request."
                  }
                },
                "additionalProperties": false,
                "required": [
                  "username"
                ]
              },
              "examples": {
                "default": {
                  "value": {
                    "username": "@nasa"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "transport": {
                      "type": "string",
                      "description": "The upstream source. Always \"instagram\"."
                    },
                    "notes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "Caveats you can act on — a ceiling Instagram imposes, a counter it withholds, a list that stopped early. Several real limits are reported only here, so read them. An empty result always comes with a note explaining it, never as an unexplained empty array."
                    },
                    "pagesFetched": {
                      "type": "number",
                      "description": "Pages of results read, which is what the request costs: one credit per page. resolve-url reports 0 and is not billed."
                    },
                    "profile": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "Instagram’s numeric account id."
                        },
                        "username": {
                          "type": "string",
                          "description": "The handle, without the @."
                        },
                        "url": {
                          "type": "string",
                          "description": "Canonical profile URL."
                        },
                        "fullName": {
                          "type": "string",
                          "description": "The display name."
                        },
                        "biography": {
                          "type": "string",
                          "description": "The bio text."
                        },
                        "profilePicUrl": {
                          "type": "string",
                          "description": "Avatar image. Pass it to GET /media to re-fetch it after Instagram’s signed link expires."
                        },
                        "verified": {
                          "type": "boolean",
                          "description": "Whether Instagram shows the verification badge."
                        },
                        "privateAccount": {
                          "type": "boolean",
                          "description": "Whether the account is private. A private account still returns this profile; its posts are withheld."
                        },
                        "memorialized": {
                          "type": "boolean",
                          "description": "Whether the account is memorialised."
                        },
                        "pronouns": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "description": "The pronouns on the profile, where set."
                        },
                        "badges": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "additionalProperties": true
                          },
                          "description": "Badges Instagram shows on the profile."
                        },
                        "hasReels": {
                          "type": "boolean",
                          "description": "Whether the account publishes reels — i.e. whether user-reels will return anything."
                        },
                        "textAppUsername": {
                          "type": "string",
                          "description": "The linked Threads handle, or null."
                        },
                        "stats": {
                          "type": "object",
                          "properties": {
                            "followerCount": {
                              "type": "number",
                              "description": "Followers, as Instagram publishes it."
                            },
                            "followingCount": {
                              "type": "number",
                              "description": "Accounts this one follows."
                            },
                            "postCount": {
                              "type": "number",
                              "description": "Always null. Instagram does not publish a post count to a signed-out reader — read user-posts and count them. The note on the response says so."
                            }
                          },
                          "additionalProperties": false
                        },
                        "bioLinks": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "additionalProperties": true
                          },
                          "description": "title, url, linkType and pinned. Unwrapped to their real destinations rather than Instagram’s tracking links."
                        },
                        "highlights": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "additionalProperties": true
                          },
                          "description": "id, title and coverUrl for every story highlight on the profile. The contents of a highlight are not public."
                        }
                      },
                      "additionalProperties": false
                    }
                  },
                  "additionalProperties": false
                },
                "examples": {
                  "default": {
                    "value": {
                      "transport": "instagram",
                      "notes": [
                        "The source does not publish a post count for a signed-out reader; read the account's posts to count them."
                      ],
                      "pagesFetched": 1,
                      "profile": {
                        "id": "528817151",
                        "username": "nasa",
                        "url": "https://www.instagram.com/nasa/",
                        "fullName": "NASA",
                        "biography": "Making the seemingly impossible, possible. ✨",
                        "profilePicUrl": "https://scontent-fra5-1.cdninstagram.com/v/t51.2885-19/...",
                        "verified": true,
                        "privateAccount": false,
                        "memorialized": false,
                        "pronouns": [],
                        "badges": [],
                        "hasReels": true,
                        "textAppUsername": "nasa",
                        "stats": {
                          "followerCount": 104352683,
                          "followingCount": 91,
                          "postCount": null
                        },
                        "bioLinks": [
                          {
                            "title": "NASA.gov Homepage",
                            "url": "https://www.nasa.gov",
                            "linkType": "external",
                            "pinned": false
                          },
                          {
                            "title": "NASA Internships",
                            "url": "http://intern.nasa.gov",
                            "linkType": "external",
                            "pinned": false
                          }
                        ],
                        "highlights": [
                          {
                            "id": "18195781759377100",
                            "title": "Roman",
                            "coverUrl": "https://scontent-fra5-1.cdninstagram.com/v/t51.71878-15/..."
                          },
                          {
                            "id": "18123023338592759",
                            "title": "Wallpapers",
                            "coverUrl": "https://scontent-fra5-1.cdninstagram.com/v/t51.71878-15/..."
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Invalid or missing Bearer token"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/user-posts": {
      "post": {
        "operationId": "user-posts",
        "tags": [
          "Accounts"
        ],
        "summary": "List an account’s posts",
        "description": "The posts a public Instagram account has published, newest first, each with its short code, link, caption, hashtags, mentions, alt text and every rendition. Read this before you build on it: a grid carries no like count, no comment count and no posting date. Instagram does not publish them on a listing, the response says so in notes, and each post reports which shape produced it in fieldsFrom — so a null is never mistaken for a zero. Call post-detail for a post's counts and date, or user-reels, which is the one listing that does carry engagement. Instagram serves 12 posts per page whatever limit says, so a limit of 60 reads five pages and costs five credits. Up to 240 posts and 20 pages in one request. A private account returns no posts and says so in notes. Billing: 1 credit per page read.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "username": {
                    "type": "string",
                    "description": "A username with or without the leading @, or a profile URL."
                  },
                  "limit": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Maximum items returned, up to 240. Use -1 for the maximum. Instagram serves 12 per page, so a limit of 60 is read as five pages and costs five credits.",
                    "example": "12"
                  },
                  "pages": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Pages of results to read in one request, up to 20. Use -1 for the maximum. Instagram serves 12 items per page, each page read is one billable page, and the response reports how many were read as pagesFetched.",
                    "example": "1"
                  },
                  "cursor": {
                    "type": "string",
                    "description": "Continue from a previous response’s nextCursor. Cursors belong to the route and the account that produced them — do not carry one between routes."
                  },
                  "format": {
                    "type": "string",
                    "description": "json or markdown. Markdown returns a rendered summary instead of the structured record.",
                    "example": "json"
                  },
                  "timeoutMs": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Time limit for each individual page read, in milliseconds (max 60000). It bounds one page, not the whole request."
                  }
                },
                "additionalProperties": false,
                "required": [
                  "username"
                ]
              },
              "examples": {
                "default": {
                  "value": {
                    "username": "@nasa",
                    "limit": 12
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "transport": {
                      "type": "string",
                      "description": "The upstream source. Always \"instagram\"."
                    },
                    "notes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "Caveats you can act on — a ceiling Instagram imposes, a counter it withholds, a list that stopped early. Several real limits are reported only here, so read them. An empty result always comes with a note explaining it, never as an unexplained empty array."
                    },
                    "pagesFetched": {
                      "type": "number",
                      "description": "Pages of results read, which is what the request costs: one credit per page. resolve-url reports 0 and is not billed."
                    },
                    "username": {
                      "type": "string",
                      "description": "The account the posts belong to."
                    },
                    "posts": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": true,
                        "properties": {
                          "id": {
                            "type": "string",
                            "description": "Instagram’s numeric media id."
                          },
                          "shortcode": {
                            "type": "string",
                            "description": "The code in the post URL. post-detail and post-comments both accept it."
                          },
                          "url": {
                            "type": "string",
                            "description": "Canonical link to the post or reel."
                          },
                          "kind": {
                            "type": "string",
                            "description": "image, video or carousel."
                          },
                          "productType": {
                            "type": "string",
                            "description": "What Instagram calls the surface — \"feed\" for a grid post, \"clips\" for a reel — or null."
                          },
                          "caption": {
                            "type": "string",
                            "description": "The author’s own written post body, or null. This is a caption, not a transcript: Instagram publishes no transcript of spoken audio to a signed-out reader."
                          },
                          "createdAt": {
                            "type": "string",
                            "description": "ISO 8601 timestamp, or null. Null on a posts listing — Instagram does not publish a date on a grid."
                          },
                          "likeCount": {
                            "type": "number",
                            "description": "Likes, or null where Instagram does not publish them (on a posts listing, or when countsHidden is true)."
                          },
                          "commentCount": {
                            "type": "number",
                            "description": "Comments, or null on a posts listing."
                          },
                          "playCount": {
                            "type": "number",
                            "description": "Plays on a reel. user-reels is the only listing that carries it; a feed image has none."
                          },
                          "countsHidden": {
                            "type": "boolean",
                            "description": "True when the account has turned like and view counts off. The counts are then absent rather than zero."
                          },
                          "width": {
                            "type": "number",
                            "description": "Pixel width, or null on a listing."
                          },
                          "height": {
                            "type": "number",
                            "description": "Pixel height, or null on a listing."
                          },
                          "altText": {
                            "type": "string",
                            "description": "Instagram’s own auto-generated image description (\"Photo by NASA on August 19, 2026. May be an image of text.\"), or null. Machine-written alt text, not a caption and not a transcript."
                          },
                          "thumbnailUrl": {
                            "type": "string",
                            "description": "Preview frame, or null."
                          },
                          "assets": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "additionalProperties": true,
                              "properties": {
                                "downloadUrl": {
                                  "type": "string",
                                  "description": "Pass it to GET /media to stream the bytes. Instagram’s own links are signed and expire; this one keeps working."
                                }
                              }
                            },
                            "description": "Ordered and de-duplicated renditions, each with kind, url, width, height and downloadUrl."
                          },
                          "carousel": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "additionalProperties": true
                            },
                            "description": "One entry per frame of a carousel, each with its own renditions. Empty for a single image or video."
                          },
                          "author": {
                            "type": "object",
                            "additionalProperties": true,
                            "description": "id, username, fullName, profilePicUrl, verified, privateAccount and profileUrl. Fields Instagram does not publish on a listing are null."
                          },
                          "coauthors": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "additionalProperties": true
                            },
                            "description": "Accounts credited as co-authors of a collab post."
                          },
                          "taggedUsers": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "additionalProperties": true
                            },
                            "description": "Accounts tagged in the image."
                          },
                          "location": {
                            "type": "object",
                            "additionalProperties": true,
                            "description": "The place the post was tagged at, or null."
                          },
                          "hashtags": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            },
                            "description": "Without the #."
                          },
                          "mentions": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            },
                            "description": "Usernames without the @."
                          },
                          "topics": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            },
                            "description": "Instagram’s own subject labels for the post (\"jwst\", \"star birth\"), where it publishes them."
                          },
                          "hasAudio": {
                            "type": "boolean",
                            "description": "Whether the video carries audio, or null."
                          },
                          "fieldsFrom": {
                            "type": "string",
                            "description": "\"listing\" or \"detail\" — which shape produced this record, so a null count is never mistaken for a zero."
                          }
                        }
                      },
                      "description": "The posts, newest first."
                    },
                    "postCount": {
                      "type": "number",
                      "description": "How many items are in this response."
                    },
                    "hasMore": {
                      "type": "boolean",
                      "description": "Whether more results exist beyond what was returned."
                    },
                    "nextCursor": {
                      "type": "string",
                      "description": "Opaque value to pass back as cursor to continue. null when there is nothing further."
                    }
                  },
                  "additionalProperties": false
                },
                "examples": {
                  "default": {
                    "value": {
                      "transport": "instagram",
                      "notes": [
                        "Posts in a listing come without like counts, comment counts or posting dates; read a single post for those.",
                        "More results are available. Continue with nextCursor."
                      ],
                      "pagesFetched": 1,
                      "username": "nasa",
                      "posts": [
                        {
                          "id": "3967213292204992434",
                          "shortcode": "DcOX3hWFiey",
                          "url": "https://www.instagram.com/p/DcOX3hWFiey/",
                          "kind": "image",
                          "productType": "feed",
                          "caption": "With your powers combined…\n\nThis colorful picture of the cosmos is the product of teamwork between our @NASAHubble, @NASAWebb, and @NASAChandraXray telescopes. …",
                          "createdAt": null,
                          "likeCount": null,
                          "commentCount": null,
                          "playCount": null,
                          "countsHidden": null,
                          "width": null,
                          "height": null,
                          "altText": "Photo by NASA on August 19, 2026. May be an image of text.",
                          "thumbnailUrl": "https://scontent-muc2-1.cdninstagram.com/v/t51.82787-15/...",
                          "assets": [
                            {
                              "kind": "image",
                              "url": "https://scontent-muc2-1.cdninstagram.com/v/t51.82787-15/...",
                              "width": null,
                              "height": null,
                              "downloadUrl": "https://api.fetchlayer.dev/instagram/media?url=..."
                            }
                          ],
                          "carousel": [],
                          "author": {
                            "id": "528817151",
                            "username": null,
                            "fullName": null,
                            "profilePicUrl": null,
                            "verified": null,
                            "privateAccount": null,
                            "profileUrl": null
                          },
                          "coauthors": [],
                          "taggedUsers": [],
                          "location": null,
                          "hashtags": [],
                          "mentions": [],
                          "topics": [],
                          "hasAudio": null,
                          "fieldsFrom": "listing"
                        }
                      ],
                      "postCount": 12,
                      "hasMore": true,
                      "nextCursor": "AQHT6ML6wCLtibE4BLFfMtyM6RwkyO"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Invalid or missing Bearer token"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/user-reels": {
      "post": {
        "operationId": "user-reels",
        "tags": [
          "Accounts"
        ],
        "summary": "List an account’s reels",
        "description": "The reels a public Instagram account has published, newest first, in the same shape as the posts listing — with one difference that matters: this listing carries engagement. Every reel comes with playCount, likeCount and commentCount, and it is the only listing on Instagram that publishes a play count at all. That makes it the cheapest way to see what an account's video is actually reaching, without a detail call per reel. Instagram serves 12 reels per page whatever limit says. Up to 240 reels and 20 pages in one request. Billing: 1 credit per page read.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "username": {
                    "type": "string",
                    "description": "A username with or without the leading @, or a profile URL."
                  },
                  "limit": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Maximum items returned, up to 240. Use -1 for the maximum. Instagram serves 12 per page, so a limit of 60 is read as five pages and costs five credits.",
                    "example": "12"
                  },
                  "pages": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Pages of results to read in one request, up to 20. Use -1 for the maximum. Instagram serves 12 items per page, each page read is one billable page, and the response reports how many were read as pagesFetched.",
                    "example": "1"
                  },
                  "cursor": {
                    "type": "string",
                    "description": "Continue from a previous response’s nextCursor. Cursors belong to the route and the account that produced them — do not carry one between routes."
                  },
                  "format": {
                    "type": "string",
                    "description": "json or markdown. Markdown returns a rendered summary instead of the structured record.",
                    "example": "json"
                  },
                  "timeoutMs": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Time limit for each individual page read, in milliseconds (max 60000). It bounds one page, not the whole request."
                  }
                },
                "additionalProperties": false,
                "required": [
                  "username"
                ]
              },
              "examples": {
                "default": {
                  "value": {
                    "username": "@nasa",
                    "limit": 12
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "transport": {
                      "type": "string",
                      "description": "The upstream source. Always \"instagram\"."
                    },
                    "notes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "Caveats you can act on — a ceiling Instagram imposes, a counter it withholds, a list that stopped early. Several real limits are reported only here, so read them. An empty result always comes with a note explaining it, never as an unexplained empty array."
                    },
                    "pagesFetched": {
                      "type": "number",
                      "description": "Pages of results read, which is what the request costs: one credit per page. resolve-url reports 0 and is not billed."
                    },
                    "username": {
                      "type": "string",
                      "description": "The account the reels belong to."
                    },
                    "posts": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": true,
                        "properties": {
                          "id": {
                            "type": "string",
                            "description": "Instagram’s numeric media id."
                          },
                          "shortcode": {
                            "type": "string",
                            "description": "The code in the post URL. post-detail and post-comments both accept it."
                          },
                          "url": {
                            "type": "string",
                            "description": "Canonical link to the post or reel."
                          },
                          "kind": {
                            "type": "string",
                            "description": "image, video or carousel."
                          },
                          "productType": {
                            "type": "string",
                            "description": "What Instagram calls the surface — \"feed\" for a grid post, \"clips\" for a reel — or null."
                          },
                          "caption": {
                            "type": "string",
                            "description": "The author’s own written post body, or null. This is a caption, not a transcript: Instagram publishes no transcript of spoken audio to a signed-out reader."
                          },
                          "createdAt": {
                            "type": "string",
                            "description": "ISO 8601 timestamp, or null. Null on a posts listing — Instagram does not publish a date on a grid."
                          },
                          "likeCount": {
                            "type": "number",
                            "description": "Likes, or null where Instagram does not publish them (on a posts listing, or when countsHidden is true)."
                          },
                          "commentCount": {
                            "type": "number",
                            "description": "Comments, or null on a posts listing."
                          },
                          "playCount": {
                            "type": "number",
                            "description": "Plays on a reel. user-reels is the only listing that carries it; a feed image has none."
                          },
                          "countsHidden": {
                            "type": "boolean",
                            "description": "True when the account has turned like and view counts off. The counts are then absent rather than zero."
                          },
                          "width": {
                            "type": "number",
                            "description": "Pixel width, or null on a listing."
                          },
                          "height": {
                            "type": "number",
                            "description": "Pixel height, or null on a listing."
                          },
                          "altText": {
                            "type": "string",
                            "description": "Instagram’s own auto-generated image description (\"Photo by NASA on August 19, 2026. May be an image of text.\"), or null. Machine-written alt text, not a caption and not a transcript."
                          },
                          "thumbnailUrl": {
                            "type": "string",
                            "description": "Preview frame, or null."
                          },
                          "assets": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "additionalProperties": true,
                              "properties": {
                                "downloadUrl": {
                                  "type": "string",
                                  "description": "Pass it to GET /media to stream the bytes. Instagram’s own links are signed and expire; this one keeps working."
                                }
                              }
                            },
                            "description": "Ordered and de-duplicated renditions, each with kind, url, width, height and downloadUrl."
                          },
                          "carousel": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "additionalProperties": true
                            },
                            "description": "One entry per frame of a carousel, each with its own renditions. Empty for a single image or video."
                          },
                          "author": {
                            "type": "object",
                            "additionalProperties": true,
                            "description": "id, username, fullName, profilePicUrl, verified, privateAccount and profileUrl. Fields Instagram does not publish on a listing are null."
                          },
                          "coauthors": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "additionalProperties": true
                            },
                            "description": "Accounts credited as co-authors of a collab post."
                          },
                          "taggedUsers": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "additionalProperties": true
                            },
                            "description": "Accounts tagged in the image."
                          },
                          "location": {
                            "type": "object",
                            "additionalProperties": true,
                            "description": "The place the post was tagged at, or null."
                          },
                          "hashtags": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            },
                            "description": "Without the #."
                          },
                          "mentions": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            },
                            "description": "Usernames without the @."
                          },
                          "topics": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            },
                            "description": "Instagram’s own subject labels for the post (\"jwst\", \"star birth\"), where it publishes them."
                          },
                          "hasAudio": {
                            "type": "boolean",
                            "description": "Whether the video carries audio, or null."
                          },
                          "fieldsFrom": {
                            "type": "string",
                            "description": "\"listing\" or \"detail\" — which shape produced this record, so a null count is never mistaken for a zero."
                          }
                        }
                      },
                      "description": "The reels, newest first — each with playCount, likeCount and commentCount filled in."
                    },
                    "postCount": {
                      "type": "number",
                      "description": "How many items are in this response."
                    },
                    "hasMore": {
                      "type": "boolean",
                      "description": "Whether more results exist beyond what was returned."
                    },
                    "nextCursor": {
                      "type": "string",
                      "description": "Opaque value to pass back as cursor to continue. null when there is nothing further."
                    }
                  },
                  "additionalProperties": false
                },
                "examples": {
                  "default": {
                    "value": {
                      "transport": "instagram",
                      "notes": [
                        "More results are available. Continue with nextCursor."
                      ],
                      "pagesFetched": 1,
                      "username": "nasa",
                      "posts": [
                        {
                          "id": "3986188199829823669",
                          "shortcode": "DdRyQxKteC1",
                          "url": "https://www.instagram.com/reel/DdRyQxKteC1/",
                          "kind": "video",
                          "productType": "clips",
                          "caption": null,
                          "createdAt": null,
                          "likeCount": 135117,
                          "commentCount": 1667,
                          "playCount": 6142932,
                          "countsHidden": false,
                          "altText": null,
                          "thumbnailUrl": "https://scontent-ham3-1.cdninstagram.com/v/t51.82787-15/...",
                          "assets": [
                            {
                              "kind": "image",
                              "url": "https://scontent-ham3-1.cdninstagram.com/v/t51.82787-15/...",
                              "width": null,
                              "height": null,
                              "downloadUrl": "https://api.fetchlayer.dev/instagram/media?url=..."
                            }
                          ],
                          "carousel": [],
                          "author": {
                            "id": "4092263381",
                            "username": null,
                            "fullName": null,
                            "profilePicUrl": null,
                            "verified": null,
                            "privateAccount": null,
                            "profileUrl": null
                          },
                          "coauthors": [],
                          "taggedUsers": [],
                          "location": null,
                          "hashtags": [],
                          "mentions": [],
                          "topics": [],
                          "hasAudio": null,
                          "fieldsFrom": "listing"
                        }
                      ],
                      "postCount": 12,
                      "hasMore": true,
                      "nextCursor": "AQHT6ML6wCLtibE4BLFfMtyM6RwkyO"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Invalid or missing Bearer token"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/post-detail": {
      "post": {
        "operationId": "post-detail",
        "tags": [
          "Posts & reels"
        ],
        "summary": "Get one post or reel in full",
        "description": "One Instagram post or reel by URL or short code, with the comments Instagram publishes alongside it. This is where the counts and the posting date live: a listing does not carry them. Returns the caption, createdAt, likeCount, commentCount, playCount for a reel, countsHidden, dimensions, alt text, every rendition, a carousel expanded frame by frame, the author and any co-authors, accounts tagged in the image, the place it was tagged at, Instagram’s own topic labels, hashtags, mentions and hasAudio. countsHidden true means the account turned like and view counts off, so those counts are absent rather than zero. The comments that come back are the same first page post-comments returns — about 13 of them — and the note says so. caption is the author’s own written post body and altText is Instagram’s auto-generated image description; neither is a transcript, and Instagram publishes none to a signed-out reader. Billing: 1 credit.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "post": {
                    "type": "string",
                    "description": "A post or reel URL, or the short code from that URL (the part after /p/ or /reel/)."
                  },
                  "format": {
                    "type": "string",
                    "description": "json or markdown. Markdown returns a rendered summary instead of the structured record.",
                    "example": "json"
                  },
                  "timeoutMs": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Time limit for each individual page read, in milliseconds (max 60000). It bounds one page, not the whole request."
                  }
                },
                "additionalProperties": false,
                "required": [
                  "post"
                ]
              },
              "examples": {
                "default": {
                  "value": {
                    "post": "https://www.instagram.com/p/DcOX3hWFiey/"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "transport": {
                      "type": "string",
                      "description": "The upstream source. Always \"instagram\"."
                    },
                    "notes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "Caveats you can act on — a ceiling Instagram imposes, a counter it withholds, a list that stopped early. Several real limits are reported only here, so read them. An empty result always comes with a note explaining it, never as an unexplained empty array."
                    },
                    "pagesFetched": {
                      "type": "number",
                      "description": "Pages of results read, which is what the request costs: one credit per page. resolve-url reports 0 and is not billed."
                    },
                    "post": {
                      "type": "object",
                      "additionalProperties": true,
                      "description": "The post or reel, in the shape below.",
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "Instagram’s numeric media id."
                        },
                        "shortcode": {
                          "type": "string",
                          "description": "The code in the post URL. post-detail and post-comments both accept it."
                        },
                        "url": {
                          "type": "string",
                          "description": "Canonical link to the post or reel."
                        },
                        "kind": {
                          "type": "string",
                          "description": "image, video or carousel."
                        },
                        "productType": {
                          "type": "string",
                          "description": "What Instagram calls the surface — \"feed\" for a grid post, \"clips\" for a reel — or null."
                        },
                        "caption": {
                          "type": "string",
                          "description": "The author’s own written post body, or null. This is a caption, not a transcript: Instagram publishes no transcript of spoken audio to a signed-out reader."
                        },
                        "createdAt": {
                          "type": "string",
                          "description": "ISO 8601 timestamp, or null. Null on a posts listing — Instagram does not publish a date on a grid."
                        },
                        "likeCount": {
                          "type": "number",
                          "description": "Likes, or null where Instagram does not publish them (on a posts listing, or when countsHidden is true)."
                        },
                        "commentCount": {
                          "type": "number",
                          "description": "Comments, or null on a posts listing."
                        },
                        "playCount": {
                          "type": "number",
                          "description": "Plays on a reel. user-reels is the only listing that carries it; a feed image has none."
                        },
                        "countsHidden": {
                          "type": "boolean",
                          "description": "True when the account has turned like and view counts off. The counts are then absent rather than zero."
                        },
                        "width": {
                          "type": "number",
                          "description": "Pixel width, or null on a listing."
                        },
                        "height": {
                          "type": "number",
                          "description": "Pixel height, or null on a listing."
                        },
                        "altText": {
                          "type": "string",
                          "description": "Instagram’s own auto-generated image description (\"Photo by NASA on August 19, 2026. May be an image of text.\"), or null. Machine-written alt text, not a caption and not a transcript."
                        },
                        "thumbnailUrl": {
                          "type": "string",
                          "description": "Preview frame, or null."
                        },
                        "assets": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "additionalProperties": true,
                            "properties": {
                              "downloadUrl": {
                                "type": "string",
                                "description": "Pass it to GET /media to stream the bytes. Instagram’s own links are signed and expire; this one keeps working."
                              }
                            }
                          },
                          "description": "Ordered and de-duplicated renditions, each with kind, url, width, height and downloadUrl."
                        },
                        "carousel": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "additionalProperties": true
                          },
                          "description": "One entry per frame of a carousel, each with its own renditions. Empty for a single image or video."
                        },
                        "author": {
                          "type": "object",
                          "additionalProperties": true,
                          "description": "id, username, fullName, profilePicUrl, verified, privateAccount and profileUrl. Fields Instagram does not publish on a listing are null."
                        },
                        "coauthors": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "additionalProperties": true
                          },
                          "description": "Accounts credited as co-authors of a collab post."
                        },
                        "taggedUsers": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "additionalProperties": true
                          },
                          "description": "Accounts tagged in the image."
                        },
                        "location": {
                          "type": "object",
                          "additionalProperties": true,
                          "description": "The place the post was tagged at, or null."
                        },
                        "hashtags": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "description": "Without the #."
                        },
                        "mentions": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "description": "Usernames without the @."
                        },
                        "topics": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "description": "Instagram’s own subject labels for the post (\"jwst\", \"star birth\"), where it publishes them."
                        },
                        "hasAudio": {
                          "type": "boolean",
                          "description": "Whether the video carries audio, or null."
                        },
                        "fieldsFrom": {
                          "type": "string",
                          "description": "\"listing\" or \"detail\" — which shape produced this record, so a null count is never mistaken for a zero."
                        }
                      }
                    },
                    "comments": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": true
                      },
                      "description": "The comments Instagram publishes alongside the post — the first page only, about 13 of them. See post-comments."
                    }
                  },
                  "additionalProperties": false
                },
                "examples": {
                  "default": {
                    "value": {
                      "transport": "instagram",
                      "notes": [
                        "These are the 13 comments of the 4,334 the source reports that are public for this post. The source does not publish the rest to a signed-out reader, so there is no further page to read."
                      ],
                      "pagesFetched": 1,
                      "post": {
                        "id": "3967213292204992434",
                        "shortcode": "DcOX3hWFiey",
                        "url": "https://www.instagram.com/p/DcOX3hWFiey/",
                        "kind": "image",
                        "productType": "feed",
                        "caption": "With your powers combined…\n\nThis colorful picture of the cosmos is the product of teamwork between our @NASAHubble, @NASAWebb, and @NASAChandraXray telescopes. …",
                        "createdAt": "2026-08-19T14:11:47.000Z",
                        "likeCount": 573281,
                        "commentCount": 4334,
                        "playCount": null,
                        "countsHidden": false,
                        "width": 1280,
                        "height": 1129,
                        "altText": "Photo by NASA on August 19, 2026. May be an image of text.",
                        "thumbnailUrl": "https://scontent-dus1-1.cdninstagram.com/v/t51.82787-15/...",
                        "assets": [
                          {
                            "kind": "image",
                            "url": "https://scontent-dus1-1.cdninstagram.com/v/t51.82787-15/...",
                            "width": 1280,
                            "height": 1129,
                            "downloadUrl": "https://api.fetchlayer.dev/instagram/media?url=..."
                          }
                        ],
                        "carousel": [],
                        "author": {
                          "id": "528817151",
                          "username": "nasa",
                          "fullName": "NASA",
                          "verified": true,
                          "privateAccount": false,
                          "profileUrl": "https://www.instagram.com/nasa/"
                        },
                        "coauthors": [],
                        "taggedUsers": [],
                        "location": null,
                        "hashtags": [
                          "nasa",
                          "universe",
                          "nebula"
                        ],
                        "mentions": [
                          "nasahubble",
                          "nasawebb",
                          "nasachandraxray"
                        ],
                        "topics": [
                          "carina nebula",
                          "jwst",
                          "star birth",
                          "cosmic clouds",
                          "astronomy photography",
                          "interstellar dust"
                        ],
                        "hasAudio": null,
                        "fieldsFrom": "detail"
                      },
                      "comments": [
                        {
                          "id": "18389100721207166",
                          "text": "I see some one holding ball",
                          "createdAt": "2026-09-16T17:16:25.000Z",
                          "likeCount": 0,
                          "replyCount": null,
                          "author": {
                            "id": "56682311975",
                            "username": "abhinaya.2024",
                            "fullName": null,
                            "verified": false,
                            "privateAccount": null,
                            "profileUrl": "https://www.instagram.com/abhinaya.2024/"
                          }
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Invalid or missing Bearer token"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/post-comments": {
      "post": {
        "operationId": "post-comments",
        "tags": [
          "Posts & reels"
        ],
        "summary": "Read a post’s comments",
        "description": "The public comments on an Instagram post or reel, by URL or short code, each with its text, author, timestamp, like count and reply count. The ceiling matters more than the fields, so it is stated first: only the first page of comments is public to a signed-out reader — about 13 of them. Instagram reports a far larger totalCount and sets hasMore true, but there is no further page to read, and every response says so in a note shaped like \"These are the 13 comments of the 4,334 the source reports that are public for this post. The source does not publish the rest to a signed-out reader, so there is no further page to read.\" Do not loop on hasMore: paging returns the same comments and bills again. Reply text is not public either — each comment reports only how many replies it has. Billing: 1 credit.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "post": {
                    "type": "string",
                    "description": "A post or reel URL, or the short code from that URL."
                  },
                  "format": {
                    "type": "string",
                    "description": "json or markdown. Markdown returns a rendered summary instead of the structured record.",
                    "example": "json"
                  },
                  "timeoutMs": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Time limit for each individual page read, in milliseconds (max 60000). It bounds one page, not the whole request."
                  }
                },
                "additionalProperties": false,
                "required": [
                  "post"
                ]
              },
              "examples": {
                "default": {
                  "value": {
                    "post": "DcOX3hWFiey"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "transport": {
                      "type": "string",
                      "description": "The upstream source. Always \"instagram\"."
                    },
                    "notes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "Caveats you can act on — a ceiling Instagram imposes, a counter it withholds, a list that stopped early. Several real limits are reported only here, so read them. An empty result always comes with a note explaining it, never as an unexplained empty array."
                    },
                    "pagesFetched": {
                      "type": "number",
                      "description": "Pages of results read, which is what the request costs: one credit per page. resolve-url reports 0 and is not billed."
                    },
                    "shortcode": {
                      "type": "string",
                      "description": "The post the comments belong to."
                    },
                    "comments": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": true,
                        "properties": {
                          "id": {
                            "type": "string",
                            "description": "Numeric comment id."
                          },
                          "text": {
                            "type": "string",
                            "description": "The comment body."
                          },
                          "createdAt": {
                            "type": "string",
                            "description": "ISO 8601 timestamp."
                          },
                          "likeCount": {
                            "type": "number",
                            "description": "Likes on the comment."
                          },
                          "replyCount": {
                            "type": "number",
                            "description": "How many replies the comment has, where Instagram publishes it. The reply text itself is not public."
                          },
                          "author": {
                            "type": "object",
                            "additionalProperties": true,
                            "description": "id, username, fullName, profilePicUrl, verified, privateAccount and profileUrl."
                          }
                        }
                      },
                      "description": "The first page of comments, in Instagram’s own order."
                    },
                    "commentCount": {
                      "type": "number",
                      "description": "How many comments are in this response — about 13, which is the whole public page."
                    },
                    "totalCount": {
                      "type": "number",
                      "description": "The total Instagram publishes for the post. Far larger than commentCount, and unreachable: the rest is not published to a signed-out reader."
                    },
                    "hasMore": {
                      "type": "boolean",
                      "description": "What Instagram claims. It is true even when no further page can be read, which is why the note spells it out — do not loop on it."
                    }
                  },
                  "additionalProperties": false
                },
                "examples": {
                  "default": {
                    "value": {
                      "transport": "instagram",
                      "notes": [
                        "These are the 13 comments of the 4,334 the source reports that are public for this post. The source does not publish the rest to a signed-out reader, so there is no further page to read."
                      ],
                      "pagesFetched": 1,
                      "shortcode": "DcOX3hWFiey",
                      "comments": [
                        {
                          "id": "18389100721207166",
                          "text": "I see some one holding ball",
                          "createdAt": "2026-09-16T17:16:25.000Z",
                          "likeCount": 0,
                          "replyCount": null,
                          "author": {
                            "id": "56682311975",
                            "username": "abhinaya.2024",
                            "fullName": null,
                            "verified": false,
                            "privateAccount": null,
                            "profileUrl": "https://www.instagram.com/abhinaya.2024/"
                          }
                        }
                      ],
                      "commentCount": 13,
                      "totalCount": 4334,
                      "hasMore": true
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Invalid or missing Bearer token"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/reels-feed": {
      "post": {
        "operationId": "reels-feed",
        "tags": [
          "Discovery"
        ],
        "summary": "Browse Instagram’s public reel feed",
        "description": "Reels from Instagram's own public feed, from no particular account — the one discovery surface Instagram leaves open to a reader who is not signed in. Returns the listing shape with full engagement counts and posting dates, so unlike a posts grid these records are complete. There is no keyword search and no hashtag feed on Instagram for a signed-out caller: both redirect to a login page, so this and trending-searches are the public substitutes. Instagram serves 12 reels per page, up to 20 pages in one request. Billing: 1 credit per page read.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "limit": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Maximum items returned, up to 240. Use -1 for the maximum. Instagram serves 12 per page, so a limit of 60 is read as five pages and costs five credits.",
                    "example": "12"
                  },
                  "pages": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Pages of results to read in one request, up to 20. Use -1 for the maximum. Instagram serves 12 items per page, each page read is one billable page, and the response reports how many were read as pagesFetched.",
                    "example": "1"
                  },
                  "cursor": {
                    "type": "string",
                    "description": "Continue from a previous response’s nextCursor. Cursors belong to the route and the account that produced them — do not carry one between routes."
                  },
                  "format": {
                    "type": "string",
                    "description": "json or markdown. Markdown returns a rendered summary instead of the structured record.",
                    "example": "json"
                  },
                  "timeoutMs": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Time limit for each individual page read, in milliseconds (max 60000). It bounds one page, not the whole request."
                  }
                },
                "additionalProperties": false
              },
              "examples": {
                "default": {
                  "value": {
                    "limit": 12
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "transport": {
                      "type": "string",
                      "description": "The upstream source. Always \"instagram\"."
                    },
                    "notes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "Caveats you can act on — a ceiling Instagram imposes, a counter it withholds, a list that stopped early. Several real limits are reported only here, so read them. An empty result always comes with a note explaining it, never as an unexplained empty array."
                    },
                    "pagesFetched": {
                      "type": "number",
                      "description": "Pages of results read, which is what the request costs: one credit per page. resolve-url reports 0 and is not billed."
                    },
                    "posts": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": true,
                        "properties": {
                          "id": {
                            "type": "string",
                            "description": "Instagram’s numeric media id."
                          },
                          "shortcode": {
                            "type": "string",
                            "description": "The code in the post URL. post-detail and post-comments both accept it."
                          },
                          "url": {
                            "type": "string",
                            "description": "Canonical link to the post or reel."
                          },
                          "kind": {
                            "type": "string",
                            "description": "image, video or carousel."
                          },
                          "productType": {
                            "type": "string",
                            "description": "What Instagram calls the surface — \"feed\" for a grid post, \"clips\" for a reel — or null."
                          },
                          "caption": {
                            "type": "string",
                            "description": "The author’s own written post body, or null. This is a caption, not a transcript: Instagram publishes no transcript of spoken audio to a signed-out reader."
                          },
                          "createdAt": {
                            "type": "string",
                            "description": "ISO 8601 timestamp, or null. Null on a posts listing — Instagram does not publish a date on a grid."
                          },
                          "likeCount": {
                            "type": "number",
                            "description": "Likes, or null where Instagram does not publish them (on a posts listing, or when countsHidden is true)."
                          },
                          "commentCount": {
                            "type": "number",
                            "description": "Comments, or null on a posts listing."
                          },
                          "playCount": {
                            "type": "number",
                            "description": "Plays on a reel. user-reels is the only listing that carries it; a feed image has none."
                          },
                          "countsHidden": {
                            "type": "boolean",
                            "description": "True when the account has turned like and view counts off. The counts are then absent rather than zero."
                          },
                          "width": {
                            "type": "number",
                            "description": "Pixel width, or null on a listing."
                          },
                          "height": {
                            "type": "number",
                            "description": "Pixel height, or null on a listing."
                          },
                          "altText": {
                            "type": "string",
                            "description": "Instagram’s own auto-generated image description (\"Photo by NASA on August 19, 2026. May be an image of text.\"), or null. Machine-written alt text, not a caption and not a transcript."
                          },
                          "thumbnailUrl": {
                            "type": "string",
                            "description": "Preview frame, or null."
                          },
                          "assets": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "additionalProperties": true,
                              "properties": {
                                "downloadUrl": {
                                  "type": "string",
                                  "description": "Pass it to GET /media to stream the bytes. Instagram’s own links are signed and expire; this one keeps working."
                                }
                              }
                            },
                            "description": "Ordered and de-duplicated renditions, each with kind, url, width, height and downloadUrl."
                          },
                          "carousel": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "additionalProperties": true
                            },
                            "description": "One entry per frame of a carousel, each with its own renditions. Empty for a single image or video."
                          },
                          "author": {
                            "type": "object",
                            "additionalProperties": true,
                            "description": "id, username, fullName, profilePicUrl, verified, privateAccount and profileUrl. Fields Instagram does not publish on a listing are null."
                          },
                          "coauthors": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "additionalProperties": true
                            },
                            "description": "Accounts credited as co-authors of a collab post."
                          },
                          "taggedUsers": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "additionalProperties": true
                            },
                            "description": "Accounts tagged in the image."
                          },
                          "location": {
                            "type": "object",
                            "additionalProperties": true,
                            "description": "The place the post was tagged at, or null."
                          },
                          "hashtags": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            },
                            "description": "Without the #."
                          },
                          "mentions": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            },
                            "description": "Usernames without the @."
                          },
                          "topics": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            },
                            "description": "Instagram’s own subject labels for the post (\"jwst\", \"star birth\"), where it publishes them."
                          },
                          "hasAudio": {
                            "type": "boolean",
                            "description": "Whether the video carries audio, or null."
                          },
                          "fieldsFrom": {
                            "type": "string",
                            "description": "\"listing\" or \"detail\" — which shape produced this record, so a null count is never mistaken for a zero."
                          }
                        }
                      },
                      "description": "The reels Instagram is serving publicly."
                    },
                    "postCount": {
                      "type": "number",
                      "description": "How many items are in this response."
                    },
                    "hasMore": {
                      "type": "boolean",
                      "description": "Whether more results exist beyond what was returned."
                    },
                    "nextCursor": {
                      "type": "string",
                      "description": "Opaque value to pass back as cursor to continue. null when there is nothing further."
                    }
                  },
                  "additionalProperties": false
                },
                "examples": {
                  "default": {
                    "value": {
                      "transport": "instagram",
                      "notes": [
                        "More results are available beyond the pages read. Continue with nextCursor."
                      ],
                      "pagesFetched": 1,
                      "posts": [
                        {
                          "id": "3984576414567693339",
                          "shortcode": "DdMDyNKtPwb",
                          "url": "https://www.instagram.com/p/DdMDyNKtPwb/",
                          "kind": "video",
                          "productType": null,
                          "caption": "Yeni bölüm açıldı 🔓 Kimler denedi? 😎\n\ninspo: @lukegibsonfitness",
                          "createdAt": "2026-09-12T13:10:58.000Z",
                          "likeCount": 13005,
                          "commentCount": 56,
                          "playCount": null,
                          "countsHidden": false,
                          "width": 720,
                          "height": 1280,
                          "altText": null,
                          "thumbnailUrl": null,
                          "assets": [
                            {
                              "kind": "video",
                              "url": "https://scontent-fra5-2.cdninstagram.com/o1/v/t16/...",
                              "width": null,
                              "height": null,
                              "downloadUrl": "https://api.fetchlayer.dev/instagram/media?url=..."
                            }
                          ],
                          "carousel": [],
                          "author": {
                            "id": "214008948",
                            "username": "canererdeniz",
                            "fullName": null,
                            "verified": null,
                            "privateAccount": null,
                            "profileUrl": "https://www.instagram.com/canererdeniz/"
                          },
                          "coauthors": [],
                          "taggedUsers": [],
                          "location": null,
                          "hashtags": [],
                          "mentions": [
                            "lukegibsonfitness"
                          ],
                          "topics": [],
                          "hasAudio": true,
                          "fieldsFrom": "listing"
                        }
                      ],
                      "postCount": 8,
                      "hasMore": true,
                      "nextCursor": "QVFEZ..."
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Invalid or missing Bearer token"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/trending-searches": {
      "post": {
        "operationId": "trending-searches",
        "tags": [
          "Discovery"
        ],
        "summary": "List what Instagram is trending",
        "description": "The search terms Instagram itself is promoting, grouped into the sections it publishes — what is trending now, pop-culture moments, profiles to watch, categories, and what is happening this month — each with the number of posts Instagram counts under it. This is not keyword search. Instagram publishes no search to a signed-out reader at all; this is what Instagram is putting in front of everyone, which is a different and smaller thing. mediaCount is Instagram's own figure, rounded by Instagram. Up to 100 terms, 48 by default; when Instagram publishes more than were returned, notes says how many. Billing: 1 credit.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "limit": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Maximum terms returned, up to 100. Use -1 for the maximum.",
                    "example": "48"
                  },
                  "format": {
                    "type": "string",
                    "description": "json or markdown. Markdown returns a rendered summary instead of the structured record.",
                    "example": "json"
                  },
                  "timeoutMs": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Time limit for each individual page read, in milliseconds (max 60000). It bounds one page, not the whole request."
                  }
                },
                "additionalProperties": false
              },
              "examples": {
                "default": {
                  "value": {
                    "limit": 48
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "transport": {
                      "type": "string",
                      "description": "The upstream source. Always \"instagram\"."
                    },
                    "notes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "Caveats you can act on — a ceiling Instagram imposes, a counter it withholds, a list that stopped early. Several real limits are reported only here, so read them. An empty result always comes with a note explaining it, never as an unexplained empty array."
                    },
                    "pagesFetched": {
                      "type": "number",
                      "description": "Pages of results read, which is what the request costs: one credit per page. resolve-url reports 0 and is not billed."
                    },
                    "searches": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": true,
                        "properties": {
                          "keyword": {
                            "type": "string",
                            "description": "The term Instagram is promoting."
                          },
                          "mediaCount": {
                            "type": "number",
                            "description": "Posts Instagram counts under the term. Instagram’s own figure, and rounded by it."
                          },
                          "section": {
                            "type": "string",
                            "description": "The section Instagram published it under, e.g. \"Trending now\" or \"Pop culture moments\"."
                          }
                        }
                      },
                      "description": "The trending terms, in Instagram’s own order."
                    },
                    "searchCount": {
                      "type": "number",
                      "description": "How many terms are in this response."
                    }
                  },
                  "additionalProperties": false
                },
                "examples": {
                  "default": {
                    "value": {
                      "transport": "instagram",
                      "notes": [
                        "Grouped into 4 sections the source publishes, such as what is trending now and what is popular this month.",
                        "Counts are the source’s own figure for posts under each term, and are rounded by it.",
                        "The source published 84 terms; raise limit to read the rest."
                      ],
                      "pagesFetched": 1,
                      "searches": [
                        {
                          "keyword": "kash patel",
                          "mediaCount": 142014,
                          "section": "Trending now"
                        },
                        {
                          "keyword": "helicoptercrash",
                          "mediaCount": 18,
                          "section": "Trending now"
                        },
                        {
                          "keyword": "independencia",
                          "mediaCount": 4905537,
                          "section": "Trending now"
                        }
                      ],
                      "searchCount": 48
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Invalid or missing Bearer token"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/resolve-url": {
      "post": {
        "operationId": "resolve-url",
        "tags": [
          "Utilities"
        ],
        "summary": "Parse an Instagram URL (free)",
        "description": "What an Instagram link points to, as structured input for the other routes: whether it names a post, a reel, an account, a hashtag, a place, a story or an explore page, plus the short code, numeric post id, username, hashtag name or place id it encodes, and its canonical form. Makes no request to Instagram, so it costs no credit and reports pagesFetched 0. A link naming something Instagram does not publish to a signed-out reader — a hashtag page, a place, a story — is still identified, with a note saying it cannot be read, which is the cheapest way to find that out. Billing: free.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "description": "Any Instagram link: a post, a reel, an account, a hashtag or a place."
                  },
                  "format": {
                    "type": "string",
                    "description": "json or markdown. Markdown returns a rendered summary instead of the structured record.",
                    "example": "json"
                  },
                  "timeoutMs": {
                    "type": "object",
                    "additionalProperties": true,
                    "description": "Time limit for each individual page read, in milliseconds (max 60000). It bounds one page, not the whole request."
                  }
                },
                "additionalProperties": false,
                "required": [
                  "url"
                ]
              },
              "examples": {
                "default": {
                  "value": {
                    "url": "https://www.instagram.com/p/DcOX3hWFiey/"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "transport": {
                      "type": "string",
                      "description": "The upstream source. Always \"instagram\"."
                    },
                    "notes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "Caveats you can act on — a ceiling Instagram imposes, a counter it withholds, a list that stopped early. Several real limits are reported only here, so read them. An empty result always comes with a note explaining it, never as an unexplained empty array."
                    },
                    "pagesFetched": {
                      "type": "number",
                      "description": "Pages of results read, which is what the request costs: one credit per page. resolve-url reports 0 and is not billed."
                    },
                    "kind": {
                      "type": "string",
                      "description": "One of post, reel, profile, hashtag, location, story, explore or unknown."
                    },
                    "canonicalUrl": {
                      "type": "string",
                      "description": "The link in its canonical form, or null."
                    },
                    "username": {
                      "type": "string",
                      "description": "The account handle, when the link carries one."
                    },
                    "shortcode": {
                      "type": "string",
                      "description": "The post or reel short code, when the link points at one."
                    },
                    "postId": {
                      "type": "string",
                      "description": "The numeric media id, when it can be decoded from the short code."
                    },
                    "hashtagName": {
                      "type": "string",
                      "description": "The tag, when the link points at a hashtag. Posts under a hashtag cannot be read — the note says so."
                    },
                    "locationId": {
                      "type": "string",
                      "description": "The place id, when the link points at a location. Posts at a place cannot be read either."
                    }
                  },
                  "additionalProperties": false
                },
                "examples": {
                  "default": {
                    "value": {
                      "transport": "instagram",
                      "notes": [],
                      "pagesFetched": 0,
                      "kind": "post",
                      "canonicalUrl": "https://www.instagram.com/p/DcOX3hWFiey/",
                      "username": null,
                      "shortcode": "DcOX3hWFiey",
                      "postId": "3489413250744250799",
                      "hashtagName": null,
                      "locationId": null
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Invalid or missing Bearer token"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/media": {
      "get": {
        "operationId": "media",
        "tags": [
          "Utilities"
        ],
        "summary": "Stream an image or video asset",
        "description": "Re-fetches one asset and streams it back, with Range requests supported. Instagram’s own asset URLs are signed and expire, so every asset in a response carries a downloadUrl pointing here instead. Only Instagram’s own CDN hosts can be fetched; anything else is a 400 saying so. Billing: 1 credit.",
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "The asset URL, taken from an asset’s downloadUrl or from a profilePicUrl or coverUrl. Must be an Instagram CDN host.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "401": {
            "description": "Invalid or missing Bearer token"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    }
  }
}