Instadram
Whisky & bourbon collection in AI: search the catalog, read and manage your shelf (OAuth).
我该使用它吗
质量与安全性
发现(1)
- LOW在 fetch_bottle_reviews 中
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"instadram": {
"url": "https://api.instadram.me/mcp"
}
}
}远程端点
https://api.instadram.me/mcpstreamable-http它能做什么
工具清单
工具(47)
🟢whoami
Return the signed-in user's public profile (uid, username, display name) plus pro (paid or gifted Instadram Pro). Uses the Bearer token uid only. Available to free users.
输入模式
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟢list_my_bottles(status, query, limit, offset, cursor)
List bottles in the signed-in user's collection. Filters: status (unopened|opened|consumed|excluded|wishlist|active|tried) and optional text query. Always scoped to the token uid — a userId argument is ignored.
输入模式
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"unopened",
"opened",
"consumed",
"excluded",
"wishlist",
"active",
"tried"
],
"description": "Bottle status or shelf group (active / wishlist / tried)"
},
"query": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Filter by display name, distillery, or notes"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 20,
"description": "Page size (max 50)"
},
"offset": {
"type": "integer",
"minimum": 0,
"description": "Number of items to skip"
},
"cursor": {
"type": "string",
"description": "Opaque pagination cursor from a previous response (numeric offset)"
}
},
"additionalProperties": false
}🟢get_my_bottle(bottleId)
Get one bottle from the signed-in user's collection by id. 404 if missing or not theirs.
输入模式
{
"type": "object",
"properties": {
"bottleId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "Bottle document id in the caller's collection"
}
},
"required": [
"bottleId"
],
"additionalProperties": false
}🟢search_catalog(query, limit, offset, cursor)
Search the public bottle catalog (expressions and distilleries). Does not return other users' collections.
输入模式
{
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 20,
"description": "Page size (max 50)"
},
"offset": {
"type": "integer",
"minimum": 0,
"description": "Number of items to skip"
},
"cursor": {
"type": "string",
"description": "Opaque pagination cursor from a previous response (numeric offset)"
}
},
"required": [
"query"
],
"additionalProperties": false
}🟢get_expression(expressionId)
Get one public catalog expression by id, or by path distilleries/{id}/brands/{id}/expressions/{id}.
输入模式
{
"type": "object",
"properties": {
"expressionId": {
"type": "string",
"minLength": 1,
"maxLength": 256,
"description": "Expression document id or nested catalog path"
}
},
"required": [
"expressionId"
],
"additionalProperties": false
}🟢list_my_activity(limit, offset, cursor)
List the signed-in user's own pours/activity. Never returns other users' activity.
输入模式
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 20,
"description": "Page size (max 50)"
},
"offset": {
"type": "integer",
"minimum": 0,
"description": "Number of items to skip"
},
"cursor": {
"type": "string",
"description": "Opaque pagination cursor from a previous response (numeric offset)"
}
},
"additionalProperties": false
}🟢list_my_collections(limit, offset, cursor)
List the signed-in user's shelf groups / collections.
输入模式
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 20,
"description": "Page size (max 50)"
},
"offset": {
"type": "integer",
"minimum": 0,
"description": "Number of items to skip"
},
"cursor": {
"type": "string",
"description": "Opaque pagination cursor from a previous response (numeric offset)"
}
},
"additionalProperties": false
}🟢search_users(query, limit, offset, cursor)
Search public Instadram profiles by exact username (usernames/{handle} or users.username) then displayName prefix. Returns uid, username, displayName, photoURL. Never email or billing fields.
输入模式
{
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Username or display-name prefix"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 20,
"description": "Page size (max 50)"
},
"offset": {
"type": "integer",
"minimum": 0,
"description": "Number of items to skip"
},
"cursor": {
"type": "string",
"description": "Opaque pagination cursor from a previous response (numeric offset)"
}
},
"required": [
"query"
],
"additionalProperties": false
}🟢get_user(username, userId)
Get one public profile by username or userId. Resolves handles via usernames/{handle}. Public fields only — no email, stripeCustomerId, or billing.
输入模式
{
"type": "object",
"properties": {
"username": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "Instadram handle (with or without @). Resolved via usernames/{handle}."
},
"userId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "Firebase uid of the target user"
}
},
"additionalProperties": false
}🟢list_user_bottles(username, userId, status, query, limit, ...)
List bottles on another user's public shelf. Requires username or userId. Same status/query/paging as list_my_bottles. 404 if the user is missing; empty list if they have no bottles.
输入模式
{
"type": "object",
"properties": {
"username": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "Instadram handle (with or without @). Resolved via usernames/{handle}."
},
"userId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "Firebase uid of the target user"
},
"status": {
"type": "string",
"enum": [
"unopened",
"opened",
"consumed",
"excluded",
"wishlist",
"active",
"tried"
],
"description": "Bottle status or shelf group (active / wishlist / tried)"
},
"query": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Filter by display name, distillery, or notes"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 20,
"description": "Page size (max 50)"
},
"offset": {
"type": "integer",
"minimum": 0,
"description": "Number of items to skip"
},
"cursor": {
"type": "string",
"description": "Opaque pagination cursor from a previous response (numeric offset)"
}
},
"additionalProperties": false
}🟢get_user_bottle(username, userId, bottleId)
Get one bottle from another user's public collection. Requires username or userId plus bottleId. 404 if the user or bottle is missing.
输入模式
{
"type": "object",
"properties": {
"username": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "Instadram handle (with or without @). Resolved via usernames/{handle}."
},
"userId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "Firebase uid of the target user"
},
"bottleId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "Bottle document id in the target user's collection"
}
},
"required": [
"bottleId"
],
"additionalProperties": false
}🟢list_user_activity(username, userId, limit, offset, cursor)
List another user's pours/activity (authenticated feed read). Requires username or userId. Newest first. Same paging caps as list_my_activity.
输入模式
{
"type": "object",
"properties": {
"username": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "Instadram handle (with or without @). Resolved via usernames/{handle}."
},
"userId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "Firebase uid of the target user"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 20,
"description": "Page size (max 50)"
},
"offset": {
"type": "integer",
"minimum": 0,
"description": "Number of items to skip"
},
"cursor": {
"type": "string",
"description": "Opaque pagination cursor from a previous response (numeric offset)"
}
},
"additionalProperties": false
}🟢list_user_collections(username, userId, limit, offset, cursor)
List another user's public shelf groups. Requires username or userId.
输入模式
{
"type": "object",
"properties": {
"username": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "Instadram handle (with or without @). Resolved via usernames/{handle}."
},
"userId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "Firebase uid of the target user"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 20,
"description": "Page size (max 50)"
},
"offset": {
"type": "integer",
"minimum": 0,
"description": "Number of items to skip"
},
"cursor": {
"type": "string",
"description": "Opaque pagination cursor from a previous response (numeric offset)"
}
},
"additionalProperties": false
}🟢fetch_bottle_reviews(bottleName, bottleId, username, userId)
AI community-review research for a bottle (fetchBottleReviews). Not a user tasting-note form. iOS may have this flagged off; the tool still works. Pass bottleName, or bottleId (own collection), or username/userId + bottleId to resolve the display name then research. Returns reviews_found, msrp, general_consensus, summary, overall_rating, reviewers. Read/research only — does not write Firestore.
输入模式
{
"type": "object",
"properties": {
"bottleName": {
"type": "string",
"minLength": 1,
"maxLength": 256,
"description": "Bottle display name to research"
},
"bottleId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "Resolve display name from a collection doc, then research"
},
"username": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "Instadram handle (with or without @). Resolved via usernames/{handle}."
},
"userId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "Firebase uid of the target user"
}
},
"additionalProperties": false
}🟢lookup_bottle(imageData, query)
Add-bottle AI identify (analyzeBourbonImage). Photo (imageData) or text (query). Returns distillery, location, spirit.brand + expressions (name, proof, msrp, tasting_notes, etc.), success, confidence. Does not write a bottle or set expressionRef. Never generates art (transformImage is not used).
输入模式
{
"type": "object",
"properties": {
"imageData": {
"type": "string",
"minLength": 1,
"description": "Base64 bottle photo, same as analyzeBourbonImage"
},
"query": {
"type": "string",
"minLength": 1,
"maxLength": 256,
"description": "Bottle name when no photo is available"
}
},
"additionalProperties": false
}🟢get_feed(scope, limit, offset, cursor)
The Home feed as the app shows it: recent pours, adds and ratings from everyone (scope global, the app default) or only people you follow plus you (scope following). Blocked and hidden accounts are removed.
输入模式
{
"type": "object",
"properties": {
"scope": {
"type": "string",
"enum": [
"global",
"following"
],
"default": "global"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 20
},
"offset": {
"type": "integer",
"minimum": 0
},
"cursor": {
"type": "string",
"description": "nextCursor from a previous page"
}
},
"additionalProperties": false
}🟢explore_catalog(limit)
The Explore tab's bottle deck: recent public shelf bottles with photos from other collectors, one per expression, blocked and hidden accounts removed.
输入模式
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 30
}
},
"additionalProperties": false
}🟢discover_users(query, limit, cursor)
Discover people like the app's People list: everyone (empty query) or a name/handle match, ranked like the app, with badge and whether you follow them. Use follow_user to follow.
输入模式
{
"type": "object",
"properties": {
"query": {
"type": "string",
"maxLength": 100
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 20
},
"cursor": {
"type": "string",
"description": "nextCursor from a previous page"
}
},
"additionalProperties": false
}🟢search_cocktails(bottleName, spiritType, category, proof, limit)
Cocktails to make with a bottle, like the app's recipe rail on a bottle page. Pass the bottle's name (plus spiritType, category, proof when known). Results note how many of the main liquors you already own. For browsing all drinks use explore_recipes.
输入模式
{
"type": "object",
"properties": {
"bottleName": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Bottle display name"
},
"spiritType": {
"type": "string",
"maxLength": 60,
"description": "e.g. bourbon, gin"
},
"category": {
"type": "string",
"maxLength": 60
},
"proof": {
"type": "number"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 20
}
},
"required": [
"bottleName"
],
"additionalProperties": false
}🟢explore_recipes(cursor, pageSize)
The Explore recipe feed: every drink, ordered by how few bottles you'd need to buy from your own shelf, then popularity. Paged with nextCursor.
输入模式
{
"type": "object",
"properties": {
"cursor": {
"type": "string",
"description": "nextCursor from a previous page"
},
"pageSize": {
"type": "integer",
"minimum": 1,
"maximum": 40,
"default": 20
}
},
"additionalProperties": false
}🟢check_username(username)
Check whether an @handle is valid and free before set_username (same rules and messages as Edit Profile).
输入模式
{
"type": "object",
"properties": {
"username": {
"type": "string",
"maxLength": 64
}
},
"required": [
"username"
],
"additionalProperties": false
}🟢export_shelf
Export your whole collection as CSV (Pro, like Profile → Export Collection): the same columns and values as the app's file. Returns filename and csv text.
输入模式
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟡add_bottle_from_photo(imageData, status, style, name, distillery, ...)
Add a bottle from a photo, like Add Bottle → photo in the app: the preview identifies it; after the user agrees, AI art is made from the photo (1K) and the bottle is added with it. Free: 5 AI art a day; Pro: unlimited. Two steps: repeat with confirm_token after the user agrees.
输入模式
{
"type": "object",
"properties": {
"imageData": {
"type": "string",
"description": "Base64 JPEG/PNG photo of the bottle (or a data: URL)"
},
"status": {
"type": "string",
"enum": [
"unopened",
"opened",
"finished",
"wishlist",
"tried"
],
"default": "unopened"
},
"style": {
"type": "string",
"enum": [
"Elements",
"Dark",
"Blended",
"Heritage",
"Oak",
"Cheers"
],
"default": "Elements",
"description": "Art style. Free: Elements. Pro: Elements, Dark, Blended, Heritage, Oak, Cheers."
},
"name": {
"type": "string",
"description": "Override the identified name"
},
"distillery": {
"type": "string"
},
"proof": {
"type": "number"
},
"rating": {
"type": "number"
},
"confirm_token": {
"type": "string",
"description": "Omit first: you get a preview (and what it costs). Repeat with identical arguments plus this token after the user agrees."
}
},
"required": [
"imageData"
],
"additionalProperties": false
}⚪regenerate_art(bottle_id, style, imageData, confirm_token)
Make new AI art for one of your bottles from its stored photo (or a new photo), like Think harder → Only regenerate the art. Uses 1 AI art credit (free 5/day, Pro unlimited). Two steps.
输入模式
{
"type": "object",
"properties": {
"bottle_id": {
"type": "string"
},
"style": {
"type": "string",
"enum": [
"Elements",
"Dark",
"Blended",
"Heritage",
"Oak",
"Cheers"
],
"default": "Elements",
"description": "Art style. Free: Elements. Pro: Elements, Dark, Blended, Heritage, Oak, Cheers."
},
"imageData": {
"type": "string",
"description": "Base64 JPEG/PNG photo of the bottle (or a data: URL)"
},
"confirm_token": {
"type": "string",
"description": "Omit first: you get a preview (and what it costs). Repeat with identical arguments plus this token after the user agrees."
}
},
"required": [
"bottle_id"
],
"additionalProperties": false
}🟡reidentify_bottle(bottle_id, update_identity, imageData, confirm_token)
Think harder about one of your bottles: identify it again from its photo and research fresh reviews. Reviews are saved when found; pass update_identity to also replace the name, distillery and proof. Two steps.
输入模式
{
"type": "object",
"properties": {
"bottle_id": {
"type": "string"
},
"update_identity": {
"type": "boolean",
"default": false
},
"imageData": {
"type": "string",
"description": "Base64 JPEG/PNG photo of the bottle (or a data: URL)"
},
"confirm_token": {
"type": "string",
"description": "Omit first: you get a preview (and what it costs). Repeat with identical arguments plus this token after the user agrees."
}
},
"required": [
"bottle_id"
],
"additionalProperties": false
}🟢search_public_bottles(query, limit, offset, cursor)
Search bottles like the app's Search tab: other collectors' shelf bottles (with owner username and display name) plus public catalog bottles, ranked like the app. Paged with nextCursor/hasMore/total.
输入模式
{
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 2,
"maxLength": 100
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 20
},
"offset": {
"type": "integer",
"minimum": 0
},
"cursor": {
"type": "string",
"description": "nextCursor from a previous page"
}
},
"required": [
"query"
],
"additionalProperties": false
}🟡add_bottle(expression_path, name, distillery, proof, status, ...)
Add a bottle to your shelf, wishlist or Tried list (same as the app's Add Bottle form). Free accounts can hold 25 unopened/opened bottles; Pro is unlimited. Two steps: the first call only previews and returns confirm_token; show the preview to the user and repeat the call with confirm_token only after they agree.
输入模式
{
"type": "object",
"properties": {
"expression_path": {
"type": "string",
"description": "Catalog path from search_catalog (preferred)"
},
"name": {
"type": "string",
"description": "Bottle name when it isn't in the catalog"
},
"distillery": {
"type": "string"
},
"proof": {
"type": "number"
},
"status": {
"type": "string",
"enum": [
"unopened",
"opened",
"finished",
"wishlist",
"tried"
],
"description": "unopened/opened count toward the free 25-bottle shelf; finished, wishlist and tried don't"
},
"rating": {
"type": "number",
"minimum": 0,
"maximum": 5,
"multipleOf": 0.25
},
"notes": {
"type": "string",
"description": "Your tasting notes"
},
"bottle_notes": {
"type": "string",
"description": "Notes about this bottle (batch, gift, etc.)"
},
"purchase_price": {
"type": "number"
},
"purchased_from": {
"type": "string"
},
"is_favorite": {
"type": "boolean"
},
"collection_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Your collection ids (list_my_collections)"
},
"confirm_token": {
"type": "string",
"description": "Omit on the first call to get a preview. After the user agrees, call again with identical arguments plus this token."
}
},
"additionalProperties": false
}🟡update_bottle(bottle_id, fields, confirm_token)
Edit your bottle: notes, price, store, custom name/distillery/proof, batch, barrel details, favorite. Two steps: the first call only previews and returns confirm_token; show the preview to the user and repeat the call with confirm_token only after they agree.
输入模式
{
"type": "object",
"properties": {
"bottle_id": {
"type": "string",
"description": "Id from list_my_bottles"
},
"fields": {
"type": "object",
"additionalProperties": false,
"properties": {
"notes": {
"type": [
"string",
"null"
]
},
"bottle_notes": {
"type": [
"string",
"null"
]
},
"purchase_price": {
"type": [
"number",
"null"
]
},
"purchased_from": {
"type": [
"string",
"null"
]
},
"custom_name": {
"type": [
"string",
"null"
]
},
"custom_distillery": {
"type": [
"string",
"null"
]
},
"custom_proof": {
"type": [
"number",
"null"
]
},
"batch_number": {
"type": [
"string",
"null"
]
},
"store_pick_name": {
"type": [
"string",
"null"
]
},
"barrel_number": {
"type": [
"string",
"null"
]
},
"barrel_warehouse": {
"type": [
"string",
"null"
]
},
"barrel_floor_rick": {
"type": [
"string",
"null"
]
},
"barrel_mashbill": {
"type": [
"string",
"null"
]
},
"barrel_age_at_bottling": {
"type": [
"string",
"null"
]
},
"is_favorite": {
"type": "boolean"
}
}
},
"confirm_token": {
"type": "string",
"description": "Omit on the first call to get a preview. After the user agrees, call again with identical arguments plus this token."
}
},
"required": [
"bottle_id",
"fields"
],
"additionalProperties": false
}🟡set_bottle_status(bottle_id, status, confirm_token)
Move a bottle between unopened, opened, finished, wishlist and tried. Moving into unopened/opened re-checks the free 25-bottle limit. Two steps: the first call only previews and returns confirm_token; show the preview to the user and repeat the call with confirm_token only after they agree.
输入模式
{
"type": "object",
"properties": {
"bottle_id": {
"type": "string",
"description": "Id from list_my_bottles"
},
"status": {
"type": "string",
"enum": [
"unopened",
"opened",
"finished",
"wishlist",
"tried"
],
"description": "unopened/opened count toward the free 25-bottle shelf; finished, wishlist and tried don't"
},
"confirm_token": {
"type": "string",
"description": "Omit on the first call to get a preview. After the user agrees, call again with identical arguments plus this token."
}
},
"required": [
"bottle_id",
"status"
],
"additionalProperties": false
}🟡rate_bottle(bottle_id, rating, confirm_token)
Rate one of your bottles 0-5 in steps of 0.25 (0 clears). Posts a 'rated' update like the app. Two steps: the first call only previews and returns confirm_token; show the preview to the user and repeat the call with confirm_token only after they agree.
输入模式
{
"type": "object",
"properties": {
"bottle_id": {
"type": "string",
"description": "Id from list_my_bottles"
},
"rating": {
"type": "number",
"minimum": 0,
"maximum": 5,
"multipleOf": 0.25
},
"confirm_token": {
"type": "string",
"description": "Omit on the first call to get a preview. After the user agrees, call again with identical arguments plus this token."
}
},
"required": [
"bottle_id",
"rating"
],
"additionalProperties": false
}🔴remove_bottle(bottle_id, confirm_token)
Permanently delete one of your bottles. Two steps: the first call only previews and returns confirm_token; show the preview to the user and repeat the call with confirm_token only after they agree.
输入模式
{
"type": "object",
"properties": {
"bottle_id": {
"type": "string",
"description": "Id from list_my_bottles"
},
"confirm_token": {
"type": "string",
"description": "Omit on the first call to get a preview. After the user agrees, call again with identical arguments plus this token."
}
},
"required": [
"bottle_id"
],
"additionalProperties": false
}🟡wishlist_add(bottle_id, expression_path, name, distillery, confirm_token)
Put a bottle on your wishlist: a new one (expression_path or name), or move an existing bottle_id there. Two steps: the first call only previews and returns confirm_token; show the preview to the user and repeat the call with confirm_token only after they agree.
输入模式
{
"type": "object",
"properties": {
"bottle_id": {
"type": "string",
"description": "Id from list_my_bottles"
},
"expression_path": {
"type": "string",
"description": "Catalog path from search_catalog (preferred)"
},
"name": {
"type": "string",
"description": "Bottle name when it isn't in the catalog"
},
"distillery": {
"type": "string"
},
"confirm_token": {
"type": "string",
"description": "Omit on the first call to get a preview. After the user agrees, call again with identical arguments plus this token."
}
},
"additionalProperties": false
}🔴wishlist_remove(bottle_id, confirm_token)
Delete a bottle from your wishlist. Two steps: the first call only previews and returns confirm_token; show the preview to the user and repeat the call with confirm_token only after they agree.
输入模式
{
"type": "object",
"properties": {
"bottle_id": {
"type": "string",
"description": "Id from list_my_bottles"
},
"confirm_token": {
"type": "string",
"description": "Omit on the first call to get a preview. After the user agrees, call again with identical arguments plus this token."
}
},
"required": [
"bottle_id"
],
"additionalProperties": false
}🟢log_pour(bottle_id, confirm_token)
Log that you're drinking one of your bottles (posts to your followers' feed, like the app's Pour). Two steps: the first call only previews and returns confirm_token; show the preview to the user and repeat the call with confirm_token only after they agree.
输入模式
{
"type": "object",
"properties": {
"bottle_id": {
"type": "string",
"description": "Id from list_my_bottles"
},
"confirm_token": {
"type": "string",
"description": "Omit on the first call to get a preview. After the user agrees, call again with identical arguments plus this token."
}
},
"required": [
"bottle_id"
],
"additionalProperties": false
}🟡create_collection(name, description, confirm_token)
Create one of your collections. Two steps: the first call only previews and returns confirm_token; show the preview to the user and repeat the call with confirm_token only after they agree.
输入模式
{
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 80
},
"description": {
"type": "string"
},
"confirm_token": {
"type": "string",
"description": "Omit on the first call to get a preview. After the user agrees, call again with identical arguments plus this token."
}
},
"required": [
"name"
],
"additionalProperties": false
}🟡rename_collection(collection_id, name, description, confirm_token)
Rename one of your collections (and optionally change its description). Two steps: the first call only previews and returns confirm_token; show the preview to the user and repeat the call with confirm_token only after they agree.
输入模式
{
"type": "object",
"properties": {
"collection_id": {
"type": "string",
"description": "Id from list_my_collections"
},
"name": {
"type": "string",
"maxLength": 80
},
"description": {
"type": "string"
},
"confirm_token": {
"type": "string",
"description": "Omit on the first call to get a preview. After the user agrees, call again with identical arguments plus this token."
}
},
"required": [
"collection_id",
"name"
],
"additionalProperties": false
}🔴delete_collection(collection_id, confirm_token)
Delete one of your collections. Its bottles stay on your shelf. Two steps: the first call only previews and returns confirm_token; show the preview to the user and repeat the call with confirm_token only after they agree.
输入模式
{
"type": "object",
"properties": {
"collection_id": {
"type": "string",
"description": "Id from list_my_collections"
},
"confirm_token": {
"type": "string",
"description": "Omit on the first call to get a preview. After the user agrees, call again with identical arguments plus this token."
}
},
"required": [
"collection_id"
],
"additionalProperties": false
}🟡add_to_collection(bottle_id, collection_id, confirm_token)
Add one of your bottles to one of your collections. Two steps: the first call only previews and returns confirm_token; show the preview to the user and repeat the call with confirm_token only after they agree.
输入模式
{
"type": "object",
"properties": {
"bottle_id": {
"type": "string",
"description": "Id from list_my_bottles"
},
"collection_id": {
"type": "string",
"description": "Id from list_my_collections"
},
"confirm_token": {
"type": "string",
"description": "Omit on the first call to get a preview. After the user agrees, call again with identical arguments plus this token."
}
},
"required": [
"bottle_id",
"collection_id"
],
"additionalProperties": false
}🔴remove_from_collection(bottle_id, collection_id, confirm_token)
Take one of your bottles out of one of your collections (the bottle stays on your shelf). Two steps: the first call only previews and returns confirm_token; show the preview to the user and repeat the call with confirm_token only after they agree.
输入模式
{
"type": "object",
"properties": {
"bottle_id": {
"type": "string",
"description": "Id from list_my_bottles"
},
"collection_id": {
"type": "string",
"description": "Id from list_my_collections"
},
"confirm_token": {
"type": "string",
"description": "Omit on the first call to get a preview. After the user agrees, call again with identical arguments plus this token."
}
},
"required": [
"bottle_id",
"collection_id"
],
"additionalProperties": false
}🔴delete_my_activity(activity_id, confirm_token)
Delete one of your own feed posts (id from list_my_activity). The bottle stays on your shelf. Two steps: the first call only previews and returns confirm_token; show the preview to the user and repeat the call with confirm_token only after they agree.
输入模式
{
"type": "object",
"properties": {
"activity_id": {
"type": "string",
"description": "Id from list_my_activity"
},
"confirm_token": {
"type": "string",
"description": "Omit on the first call to get a preview. After the user agrees, call again with identical arguments plus this token."
}
},
"required": [
"activity_id"
],
"additionalProperties": false
}🟢follow_user(username, userId, confirm_token)
Follow someone (username or userId from search_users). Two steps: the first call only previews and returns confirm_token; show the preview to the user and repeat the call with confirm_token only after they agree.
输入模式
{
"type": "object",
"properties": {
"username": {
"type": "string",
"description": "Instadram handle (with or without @)"
},
"userId": {
"type": "string",
"description": "User id"
},
"confirm_token": {
"type": "string",
"description": "Omit on the first call to get a preview. After the user agrees, call again with identical arguments plus this token."
}
},
"additionalProperties": false
}🟢unfollow_user(username, userId, confirm_token)
Stop following someone. Two steps: the first call only previews and returns confirm_token; show the preview to the user and repeat the call with confirm_token only after they agree.
输入模式
{
"type": "object",
"properties": {
"username": {
"type": "string",
"description": "Instadram handle (with or without @)"
},
"userId": {
"type": "string",
"description": "User id"
},
"confirm_token": {
"type": "string",
"description": "Omit on the first call to get a preview. After the user agrees, call again with identical arguments plus this token."
}
},
"additionalProperties": false
}🟢block_user(username, userId, confirm_token)
Block someone: hides their posts and profile from your feed, Explore and Discover (doesn't unfollow, like the app). Two steps: the first call only previews and returns confirm_token; show the preview to the user and repeat the call with confirm_token only after they agree.
输入模式
{
"type": "object",
"properties": {
"username": {
"type": "string",
"description": "Instadram handle (with or without @)"
},
"userId": {
"type": "string",
"description": "User id"
},
"confirm_token": {
"type": "string",
"description": "Omit on the first call to get a preview. After the user agrees, call again with identical arguments plus this token."
}
},
"additionalProperties": false
}🔴unblock_all_users(confirm_token)
Unblock every user you've blocked (same as Profile → Unblock All Users). Two steps: the first call only previews and returns confirm_token; show the preview to the user and repeat the call with confirm_token only after they agree.
输入模式
{
"type": "object",
"properties": {
"confirm_token": {
"type": "string",
"description": "Omit on the first call to get a preview. After the user agrees, call again with identical arguments plus this token."
}
},
"additionalProperties": false
}🟡update_profile(displayName, bio, location, website, instagram, ...)
Edit your profile like Edit Profile in the app: displayName, bio, location, website, instagram, twitter, facebook, tiktok. Only fields you pass change; an empty string clears an optional field. Photos and handle aren't changed here (see set_username). Two steps: the first call only previews and returns confirm_token; show the preview to the user and repeat the call with confirm_token only after they agree.
输入模式
{
"type": "object",
"properties": {
"displayName": {
"type": "string",
"maxLength": 200,
"description": "Display name"
},
"bio": {
"type": "string",
"maxLength": 500,
"description": "Bio"
},
"location": {
"type": "string",
"maxLength": 200,
"description": "location; empty string clears it"
},
"website": {
"type": "string",
"maxLength": 200,
"description": "website; empty string clears it"
},
"instagram": {
"type": "string",
"maxLength": 200,
"description": "instagram; empty string clears it"
},
"twitter": {
"type": "string",
"maxLength": 200,
"description": "twitter; empty string clears it"
},
"facebook": {
"type": "string",
"maxLength": 200,
"description": "facebook; empty string clears it"
},
"tiktok": {
"type": "string",
"maxLength": 200,
"description": "tiktok; empty string clears it"
},
"confirm_token": {
"type": "string",
"description": "Omit on the first call to get a preview. After the user agrees, call again with identical arguments plus this token."
}
},
"additionalProperties": false
}🟡set_username(username, confirm_token)
Change your @handle (3–20 characters: lowercase letters, numbers, underscore). Your old handle is released. Use check_username first. Two steps: the first call only previews and returns confirm_token; show the preview to the user and repeat the call with confirm_token only after they agree.
输入模式
{
"type": "object",
"properties": {
"username": {
"type": "string",
"description": "New handle, with or without @"
},
"confirm_token": {
"type": "string",
"description": "Omit on the first call to get a preview. After the user agrees, call again with identical arguments plus this token."
}
},
"required": [
"username"
],
"additionalProperties": false
}🟡send_feedback(kind, message, confirm_token)
Send a bug report, feature idea or other feedback to the Instadram team as you (same as Profile → Send Feedback). 10–5000 characters. Two steps: the first call only previews and returns confirm_token; show the preview to the user and repeat the call with confirm_token only after they agree.
输入模式
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"bug",
"enhancement",
"other"
]
},
"message": {
"type": "string",
"minLength": 10,
"maxLength": 5000
},
"confirm_token": {
"type": "string",
"description": "Omit on the first call to get a preview. After the user agrees, call again with identical arguments plus this token."
}
},
"required": [
"kind",
"message"
],
"additionalProperties": false
}社区
证据