Reverse-engineered from Bambu Handy app (v3.x) via live traffic capture
These endpoints are not documented in the original OpenBambuAPI
Base URL:https://api.bambulab.com/v1
Also accessible via:https://makerworld.com/api/v1(Cloudflare-protected)
MakerWorld is Bambu Lab's 3D model sharing platform. The app communicates with 8 microservices for content discovery, social features, and model management. All endpoints require Bearer JWT authentication.
3D model management — designs (models), instances (print profiles), favorites, downloads.
Get full design details including title, creator, instances, tags, images.
| Parameter | Type | Required | Description |
|---|---|---|---|
designId |
path | yes | Numeric design ID |
trafficSource |
query | no | Analytics source: browse, recommend, search |
visitHistory |
query | no | true to log page visit |
Response includes:
id— design IDtitle— design titledesignCreator—{ name, uid, avatar }instances[]— array of print instancesid— instance ID (needed for download)isDefault— booleantitle— instance nameplates[]— plate configurations
tags[]— category tagslikeCount,downloadCount,commentCountimages[]— gallery image URLs
curl -s "https://api.bambulab.com/v1/design-service/design/2416782?trafficSource=browse&visitHistory=true" \
-H "Authorization: Bearer $TOKEN"Get designs that are remixes of a given design.
Like/unlike a design (toggle). No request body needed.
Download a 3MF file for a design instance.
| Parameter | Type | Description |
|---|---|---|
instanceId |
path | Instance ID from design details |
type |
query | preview (metadata only) or download (full 3MF binary) |
Download workflow:
- Fetch design details → get default instance ID
- Call with
type=download→ receive 3MF binary
# Preview (metadata)
curl -s "https://api.bambulab.com/v1/design-service/instance/2650240/f3mf?type=preview" \
-H "Authorization: Bearer $TOKEN"
# Download (full 3MF file)
curl -sOJ "https://api.bambulab.com/v1/design-service/instance/2650240/f3mf?type=download" \
-H "Authorization: Bearer $TOKEN"Get a user's favorited designs.
| Parameter | Type | Description |
|---|---|---|
userId |
path | Numeric user ID |
offset |
query | Pagination offset |
limit |
query | Page size (default 20) |
Check if specific designs are in the current user's favorites.
| Parameter | Type | Description |
|---|---|---|
designId |
query | Design ID to check |
Get designs the current user has liked. Supports offset and limit query params.
Lightweight endpoint returning only IDs of all favorited designs.
Get draft designs that had slicing errors.
Extends the existing /design-user-service/my/preference endpoint (already documented in cloud-http.md).
Get the current user's MakerWorld profile (distinct from /my/preference).
| Parameter | Type | Description |
|---|---|---|
immediacy |
query | true for non-cached response |
Get mutual follows (users who follow you and you follow back).
Check user permissions.
| Parameter | Type | Description |
|---|---|---|
permType |
query | 0 = general permissions, 6 = upload permission |
Personalized design recommendations ("For You" feed).
| Parameter | Type | Description |
|---|---|---|
limit |
query | Number of results (default 20) |
offset |
query | Pagination offset |
seed |
query | Randomization seed (0 for fresh results) |
acceptTypes |
query | Comma-separated content type IDs |
Content type IDs:
| ID | Type |
|---|---|
0 |
3D Model |
2 |
Remix |
3 |
Article |
5 |
Collection |
6 |
Tutorial |
curl -s "https://api.bambulab.com/v1/design-recommend-service/my/for-you?limit=20&offset=0&seed=0&acceptTypes=0,2,5,6,3" \
-H "Authorization: Bearer $TOKEN"Comments, ratings, and direct messaging for designs.
Get comments and ratings for a design.
| Parameter | Type | Description |
|---|---|---|
designId |
query | Design ID |
offset |
query | Pagination offset |
limit |
query | Page size (default 20) |
type |
query | 0 = all |
sort |
query | 0 = newest first |
curl -s "https://api.bambulab.com/v1/comment-service/commentandrating?designId=2416782&offset=0&limit=20&type=0&sort=0" \
-H "Authorization: Bearer $TOKEN"Get a single comment with full details.
Get replies to a comment.
| Parameter | Type | Description |
|---|---|---|
commentId |
path | Parent comment ID |
limit |
query | Max replies (default 10) |
after |
query | Reply ID cursor for forward pagination |
msgCommentReplyId |
query | Load context around a specific reply |
Like a comment (toggle).
Post a reply to a comment.
Get rating data for a specific design instance.
Get message sessions (direct messages inbox).
| Parameter | Type | Description |
|---|---|---|
userSelect |
query | all or specific filter |
typeSelect |
query | all or specific filter |
projectScope |
query | 0 = general, 2 = MakerWorld |
offset |
query | Pagination offset |
limit |
query | Page size |
Design discovery, navigation categories, trending, and related content.
Get homepage navigation structure (categories, featured sections).
Get "recommended for you" designs.
Note: The API has a typo — it's
recommand, notrecommend.
Browse designs by navigation category.
| Parameter | Type | Description |
|---|---|---|
navKey |
query | Category key (see table below) |
offset |
query | Pagination offset |
limit |
query | Page size (default 20) |
Known category keys:
| navKey | Category |
|---|---|
Trending |
Trending designs |
category_400 |
Toys & Games |
category_800 |
Home & Living |
# Trending designs
curl -s "https://api.bambulab.com/v1/search-service/select/design/nav?navKey=Trending&offset=0&limit=20" \
-H "Authorization: Bearer $TOKEN"Get designs related to a specific design.
| Parameter | Type | Description |
|---|---|---|
designId |
path | Design ID |
offset |
query | Pagination offset |
limit |
query | Page size |
scene |
query | Relation scene (1 = similar) |
App-level configuration and dynamic content.
Get app homepage configuration (banners, featured content, section ordering).
Get app-wide configuration (feature flags, URLs, global settings).
Get count of unread support trouble tickets.
Get count of unread MakerWorld-related support items.
Get boost status for a design (points-based promotion system).
| Parameter | Type | Description |
|---|---|---|
designId |
query | Design ID |
Get report/moderation classification options.
| Parameter | Type | Description |
|---|---|---|
source |
query | Report source: message, design, etc. |
Get multiple onboarding/achievement task statuses.
| Parameter | Type | Description |
|---|---|---|
taskNames |
query | Comma-separated: app_newbie_task_v2, app_newbie_task_v3 |
Get user analytics/tracking tags.
| Parameter | Type | Description |
|---|---|---|
UID |
query | User analytics UUID |
These extend the existing user-service docs.
Get unread message count across all categories.
Get the most recent message.
Mark messages as read.
Get device task notification status (for badge counts).
Mark device task notifications as read.
The existing /my/messages endpoint supports these type values:
| type | Category |
|---|---|
1 |
System notifications |
2 |
Comment notifications |
3 |
Like notifications |
4 |
Follow notifications |
5 |
Print task notifications |
Get a specific print task by ID (distinct from /iot-service/api/user/task/{taskId}).
Get printed plate info for a design instance.
| Parameter | Type | Description |
|---|---|---|
instanceId |
query | Design instance ID |
Get model/printer profile linked to user.
| Parameter | Type | Description |
|---|---|---|
profileId |
query | Profile ID |
modelId |
query | Printer model ID (e.g., US932767835d32ea) |
Register device push notification token (FCM/APNs).
Check for app updates. Returns latest version info.
All list endpoints use offset + limit pagination:
?offset=0&limit=20 # First page
?offset=20&limit=20 # Second page
| Resource | Format | Example |
|---|---|---|
| User ID | Numeric (10 digits) | 3469901296 |
| Design ID | Numeric (7 digits) | 2416782 |
| Instance ID | Numeric (7 digits) | 2650240 |
| Comment ID | Numeric (7 digits) | 4177733 |
| Task ID | Numeric (9 digits) | 788462557 |
| Profile ID | Numeric (9 digits) | 635995371 |
| Printer serial | {region}{hex} |
USf86740b8413939 |
| Analytics UID | UUID v1 | 65c31ea0-cd74-11ed-b18f-39cf197fa3d4 |
The app sends analytics events to a separate domain:
POST https://event.bblmw.com/app2/home— Home screen eventsPOST https://event.bblmw.com/app2/makerworld— MakerWorld browsing events
On startup, the app calls:
GET http://ip-api.com/json/?fields=status,message,continent,continentCode,...
Used for regional content serving.
1. Browse → GET /search-service/select/design/nav?navKey=Trending
2. View design → GET /design-service/design/{designId}
3. Check fav → GET /design-service/my/design/favoriteslist?designId={id}
4. Get ratings → GET /comment-service/commentandrating?designId={id}
5. Download → GET /design-service/instance/{instanceId}/f3mf?type=download
6. Upload → FTP to printer SD card (port 990, FTPS)
7. Print → MQTT command on device/{serial}/request
These endpoints were reverse-engineered from the Bambu Handy Flutter app using:
- APK static analysis — jadx decompilation + URL pattern extraction
- Live traffic capture — Flutter Dio interceptor logs via
adb logcat -s flutter:* - Token extraction — Heap dump scan for JWT tokens
- Tooling: apkre automated API discovery