Build on Proofly
Free public REST API. No API key required for the verification endpoint. Integrate 3D model authorship verification into your platform in minutes.
Base URL
https://api.proofly.store
All endpoints return JSON. Responses include X-Proofly-API-Version and X-Cache: HIT | MISS headers.
/api/hiddenmark/public/verify/{mark_code}Verify HiddenMark Code
Check whether a HiddenMark code belongs to a model published on Proofly. Returns creator identity and model metadata. No authentication required.
Path Parameters
mark_coderequiredORVIONIS_HM: prefix, up to the first null byte)Request
curl -X GET "https://api.proofly.store/api/hiddenmark/public/verify/PF-42-7-a3f9c1b2" \ -H "Accept: application/json"
Response — 200 verified
{
"ok": true,
"verified": true,
"mark_code": "PF-42-7-a3f9c1b2",
"platform": "proofly",
"api_version": 1,
"creator": {
"id": 7,
"username": "mikrotopia",
"display_name": "MikroTopia Designs",
"profile_url": "https://proofly.store/profile/mikrotopia"
},
"model": {
"id": 42,
"title": "Articulated Dragon — Print-in-Place",
"url": "https://proofly.store/item/42/articulated-dragon-print-in-place",
"published_at": "2025-11-14T09:32:00Z"
}
}Response — 200 not verified
{
"ok": true,
"verified": false,
"mark_code": "PF-0-0-unknown",
"platform": "proofly",
"api_version": 1
}Response Fields
okbooleanAlways true when the request was processed (even if not verified)verifiedbooleantrue if the mark_code is registered in Proofly's databasemark_codestringThe mark code that was queriedplatformstringAlways "proofly"api_versionnumberAPI version integer — increment when breaking changes shipcreatorobject | nullPresent when verified=true. Contains id, username, display_name, profile_urlmodelobject | nullPresent when verified=true. Contains id, title, url, published_atHTTP Status Codes
Code Examples
JavaScript / TypeScript
async function verifyMark(markCode) {
const res = await fetch(
`https://api.proofly.store/api/hiddenmark/public/verify/${markCode}`,
{ headers: { Accept: "application/json" } }
)
if (!res.ok) throw new Error(`HTTP ${res.status}`)
const data = await res.json()
if (data.verified) {
console.log(`Verified: ${data.creator.display_name} — ${data.model.title}`)
} else {
console.log("Mark not found in Proofly database")
}
}Python
import requests
def verify_mark(mark_code: str) -> dict:
url = f"https://api.proofly.store/api/hiddenmark/public/verify/{mark_code}"
r = requests.get(url, headers={"Accept": "application/json"}, timeout=10)
r.raise_for_status()
return r.json()
result = verify_mark("PF-42-7-a3f9c1b2")
if result["verified"]:
print(f"Author: {result['creator']['display_name']}")
print(f"Model: {result['model']['title']}")
print(f"URL: {result['model']['url']}")Where do HiddenMark codes come from?
Every STL file published on Proofly has a unique HiddenMark code written into the 80-byte binary header at upload time (example header: ORVIONIS_HM:PF-42-7-a3f9c1b2). The code survives:
- Re-slicing in Cura / PrusaSlicer / Bambu Studio
- Downloading and re-sharing the file
- Minor geometry edits that don't touch the file header
To extract the code from a file, read bytes 0–79 of the binary STL and look for the substring ORVIONIS_HM:. Everything after the colon until the next null byte or whitespace is the mark code.
Blender Add-on & Publish API
Publish a 3D model draft directly from Blender (or any tool) using your API key — no browser needed. The listing is created as a private draft; go to your dashboard to add images and publish it.
Blender Add-onv1.4.2
Supports Blender 3.6+. Install via Edit → Preferences → Add-ons → Install. A Proofly tab appears in the N-panel of the 3D Viewport.
- Generate an API key at /settings/api
- Select the mesh objects you want to publish
- Fill in title, category, license, and click Publish Draft
- Open your dashboard to add cover images and go live
POST /api/enterprise/publish
Creates a draft listing. Requires an X-API-Key header. Returns the item ID and a dashboard URL to complete the listing.
curl -X POST https://api.proofly.store/api/enterprise/publish \ -H "X-API-Key: pfly_YOUR_KEY" \ -F "file=@my_model.stl" \ -F "title=Dragon Miniature" \ -F "category=miniatures" \ -F "license_code=commercial" \ -F "is_free=false" \ -F "price_usd=4.99" \ -F "tags=dragon,fantasy,3d-print"
| Field | Required | Description |
|---|---|---|
| file | yes | .stl .glb .gltf .obj .fbx .3mf .zip — max 200 MB |
| title | yes | Listing title, max 128 chars |
| description | no | Listing description, max 10 000 chars |
| category | no | Category slug (default: characters) |
| license_code | no | personal | commercial | extended (default: personal) |
| is_free | no | true | false (default: true) |
| price_usd | no | Float in USD, ignored when is_free=true |
| tags | no | Comma-separated tags, max 20 |
| intended_use | no | game_engine | 3d_print | vr_ar | archviz | animation | vtuber — adds +15 to listing score |
{
"ok": true,
"item": {
"id": 123,
"slug": "dragon-miniature",
"url": "https://proofly.store/item/123/dragon-miniature",
"dashboard_url": "https://proofly.store/dashboard/models/123",
"is_draft": true,
"mark_code": "PF-123-7-a3f9c1"
}
}Unity Editor Plugin
Publish GameObjects from any Unity project as draft listings on Proofly — no browser tab required. The plugin exports your selection as OBJ (built-in, no extra packages) or FBX (requires com.unity.formats.fbx), then uploads via the same enterprise API the Blender add-on uses.
Unity Pluginv1.1.1 · Unity 2021.3+
Works with Unity 2021.3 LTS and newer. OBJ export requires no additional packages. FBX export requires the optional com.unity.formats.fbx package.
- Generate an API key at /settings/api
- Install via Package Manager:
Window → Package Manager → + → Add package from disk → unity-plugin/package.jsonor copy theEditor/folder into yourAssets/tree - Open
Window → Proofly → Publish to Marketplace - Select GameObjects in the Hierarchy, fill in details, click Publish Draft
- Open your dashboard to add cover images and go live
Coming Soon
The following endpoints are planned for future API versions. Contact us if you need early access.
GET /api/marketplace/itemsBrowse public marketplace listings with filters (category, price, format, sort)
GET /api/marketplace/creatorsPublic creator profiles — rank, stats, top models
GET /api/categoriesFull category tree with item counts
Webhook: new_saleCreator-scoped webhooks for real-time sale notifications
Questions or integration help?
Open a thread in our community or reach out directly.