Add an Instagram feed to your website

Three ways to integrate, one account. Pick the one that fits your site — each takes a few minutes.

Quick start

  1. Create a free account. Sign up with your email address — no password, we send you a login link.
  2. Pick your integration. WordPress plugin, PHP widget or the JSON API. Your API token is in the dashboard.
  3. Embed the feed. The profile you ask for is fetched on the first request and then kept up to date automatically.

The Instagram account must be a Business or Creator account (free to switch in the Instagram app). Private and personal accounts can't be read.

WordPress

Install quqii – Social Media Feed Grid from the plugin directory, connect it to your account in the plugin's settings, then add a shortcode or the Social Media Feed block in the editor.

[quqii-feed instagram="quqii.official"]

Examples

# Swipeable slider with autoplay
[quqii-feed instagram="quqii.official" layout="slider" autoplay="1"]

# 4 columns, no gaps, square corners
[quqii-feed instagram="quqii.official" columns="4" no-gap="1" no-radius="1"]

# Only the images, 8 posts, captions on tap
[quqii-feed instagram="quqii.official" profile="0" limit="8" caption="1" captionpos="overlay"]

# Just the follower count, inline in a sentence
[quqii-feed instagram="quqii.official" display="followers"]

Shortcode attributes

Only instagram is required. For every other attribute you can set a default in the plugin's settings; the attribute overrides it for one feed.

AttributeValuesDescription
instagramusernameThe Instagram account to show.
displayall (default), profile, grid, followers, instagramWhat to show: everything, only the profile header, only the posts, only the follower count, or only a button to the profile.
layoutgrid (default), sliderA grid, or a swipeable slider.
columns1–8 (default 3)Columns of the grid, or visible slides of the slider.
columns-mobilenumber, e.g. 1.3Columns / visible slides on small screens. A fraction lets the next slide peek in.
limitnumberNumber of posts to show.
profile0Hides the profile area (picture, name, followers).
caption1 / 0Show post captions.
captionposbelow, overlayCaptions below the image, or as a tap-to-reveal overlay.
showlikes, followercount1 / 0Show or hide like counts and the follower count.
linktoinstagram1 / 0Link images to the post on Instagram.
inlinevideo1 / 0Play videos on your page in an overlay (default) instead of opening Instagram.
no-gap, no-radius1No space between posts / square corners.
autoplay, autoplay-interval1; seconds 1–30Slider only: advance by itself, and how fast (default 4.5 s).
arrows, dots0Slider only: hide the arrows / the dot navigation.
classCSS classAn extra class on the feed's outer element, for your own styling.

Works in every page builder that supports shortcodes (Elementor, Divi, WPBakery and others). In a theme template use <?php echo do_shortcode('[quqii-feed instagram="quqii.official"]'); ?>.

PHP widget

For any PHP website. One file, three steps: include the widget, fetch the profile from the API, render it. Download quqii-widget.php from your dashboard — your token is already filled into the example there.

<?php
require 'quqii-widget.php';

$token    = 'YOUR_TOKEN';
$username = 'quqii.official';
$posts    = 12;   // how many posts you show

$response = @file_get_contents(
    'https://feed.quqii.net/api.php?u=' . urlencode($username) . '&limit=' . $posts . '&token=' . $token
);
$profile = $response ? json_decode($response, true) : null;
?>

<div>
    <?php quqii_render($profile, ['columns' => 4]); ?>
</div>

Options for quqii_render()

Named like the shortcode attributes. All are optional.

OptionDescription
columns1–8 columns (default 3).
columns-mobileColumns on small screens (default: 2, then 1).
displayall (default), profile, grid, followers or instagram.
profile0 = posts only.
limitShow only the first N posts. To also fetch only N, add &limit=N to the API request.
showlikes, followercount0 hides the like counts / the follower count.
linktoinstagram1 or 0.
no-gap, no-radius1 = no space between posts / square corners.
classAn extra CSS class on the widget's outer element.

Captions, the slider layout and playing videos in an overlay are available in the WordPress plugin only.

JSON API

Use the API from any language to build your own layout. Send your token as a header; every request counts as one API call.

curl -H "Authorization: Bearer YOUR_TOKEN" \
     "https://feed.quqii.net/api.php?u=quqii.official&limit=12"

Request parameters

ParameterDescription
uRequired. The Instagram username (a profile URL or a leading @ works too).
tokenYour API token — better sent as the header Authorization: Bearer …, because query strings end up in server logs.
limitHow many posts you want, 1–36 and never more than your plan allows (Free 12, Supporter 16, Starter 24, Pro 36, Agency 36). Ask only for what you show.
pageOptional. The URL of the page that shows the feed — it appears next to the account in your dashboard.

Response

{
  "username": "quqii.official",
  "fullName": "quqii",
  "followersCount": 3800,
  "profilePicUrlHD": "https://...",
  "latestPosts": [
    {
      "id": "17900000000000000",
      "type": "Image",
      "shortCode": "AbC_123",
      "url": "https://www.instagram.com/p/AbC_123/",
      "displayUrl": "https://...",
      "caption": "...",
      "timestamp": "2026-10-12T10:43:00+0000",
      "likesCount": 42,
      "commentsCount": 3
    }
  ]
}
FieldMeaning
username, fullName, biography, externalUrlThe profile's texts.
followersCount, followsCount, postsCountThe profile's numbers.
profilePicUrlHDProfile picture.
latestPostsNewest first. Each post has id, type (Image, Video or Sidecar = carousel), shortCode, url (the post on Instagram), caption, timestamp (ISO 8601), displayUrl (the image — for a video its preview image) and likesCount / commentsCount (missing when the owner hides them).
videoUrlOnly if Instagram provides a video file. For other accounts' videos it usually doesn't: show displayUrl as a preview and link to url.
childPostsThe items of a carousel, each with type, displayUrl and, where available, videoUrl.

Image and video URLs are Instagram's own and stop working after a few days. Always use a fresh response and don't store the URLs. The service refreshes each profile automatically, at the latest every three days.

Answers & errors

HTTPBodyMeaning
200the profileData as above.
202{"status":"queued"}The profile is being fetched (first request, or its image links had expired). Try again in a few seconds.
400invalid_username, missing_usernameThe username is missing or not a valid Instagram username.
401missing_token, invalid_tokenNo token, or one that isn't valid (any more).
404account_unavailableThe account can't be shown. With "reason": "not_professional" it is private or a personal account: its owner has to switch it to a free Creator or Business account in the Instagram app.
429quota_exceededYour call limit is reached and this profile isn't loaded yet. Profiles already loaded keep working, without new posts.

Limits

Each plan has a number of API calls per billing period and a maximum number of posts per feed — see Pricing. A billing period starts on the day you subscribe to a paid plan; with a free account it is the calendar month. Your dashboard shows the usage and when it starts over.

When the call limit is reached, feeds keep working with the posts that were already visible, and new posts are no longer shown until the next period starts (or you upgrade). You get an email at 80 % and 90 % of your limit.

Ready to start?

Create a free account and have your first feed on your site in a few minutes.

Start for free