核心概念:文件、报价与任务
本页面介绍驱动该平台的基础理念和模式。理解这些概念将帮助您充分利用 API,并为 3D 打印工作流程构建强大的集成。
API 基础路由
对于外部 API 调用,请直接向 https://api.quote3d.com/v2/... 发送请求(例如:GET https://api.quote3d.com/v2/user)。
在您的软件中,将 https://api.quote3d.com 设置为 API 主机/基础 URL,并调用诸如 /v2/user、/v2/file 和 /v2/quotes 等 v2 路径。
1. 身份验证与安全
每个端点都需要使用您的Quote3D API令牌进行身份验证,只有一个例外:文件管理中记录的公开上传路由。外部调用请使用 https://api.quote3d.com/v2 作为基础路由。令牌可以作为 Authorization: Bearer YOUR_TOKEN 或 X-API-Token 发送。请在Quote3D控制台生成令牌并妥善保密。
令牌可以设置作用域。完全访问令牌可到达所有端点,而小组件作用域的令牌仅限于嵌入式小组件所需的端点。调用作用域之外的任何内容都会返回403。您可以在控制台的「令牌」页面查看和修改令牌的作用域。
提醒:请妥善保管您的 API token。切勿公开分享或提交到版本控制。
2. 账户管理
通过专用端点管理您的账户、上传文件和使用统计信息:
GET /v2/user获取您的账户信息、套餐和每月额度——quotes_used、quotes_limit、storage_used、storage_limit 和 reset_date 都在这里GET /v2/user/uploads列出您上传到您账户的所有文件。这些文件按最新到最旧的顺序排列。GET /v2/quota获取您的速率限制额度——全局上限以及按端点细分的剩余调用次数和重置时间——同时返回今日、本月、本年及历史累计的请求数GET /v2/usage获取详细的使用分析,包括端点统计信息、材料使用情况和基于时间的趋势
3. 文件管理
上传、下载和管理您的3D模型文件(STL、3MF、OBJ格式):
GET /v2/file/upload-id— 获取一个临时upload_id,以便使用公共上传路由上传新文件。POST /v2/file/public/{upload_id}— 此路由不需要身份验证。在您的客户端使用此路由可直接将文件上传到我们的存储空间。使用公共上传路由可避免将大文件通过您的后端服务器路由。这可以防止暴露您的API令牌并减少服务器负载。
POST /v2/file— 从您的服务器端上传文件(需要身份验证,当您想从后端上传时使用此方法)GET /v2/file/{file_id}— 使用其file_id下载文件DELETE /v2/file/{file_id}— 删除您不再需要的文件
如果文件不是有效的STL、3MF或OBJ模型,或超过平台文件大小上限(默认50 MB),上传将被拒绝。两个上传路由都会执行相同的检查。
文件存储方式
上传的模型以加密方式存储,且无法被公开访问——不存在可以直接提供已存储文件的链接。响应中的 file_path 字段是经过身份验证的下载路径 (GET /v2/file/{file_id}),而非磁盘上的位置,因此请将其视为端点而非可分享的 URL。删除文件不仅会将其从您的列表中移除,还会将其从存储中彻底删除。
4. 部件信息与技术分析
检查模型是否可打印,并获取部件尺寸及高级技术指标:
POST /v2/printability/{file_id}即时分析 – 在生成报价前,验证尺寸、体积、表面积和几何完整性(开口边缘/非流形)。
Quote3D 不仅仅进行简单的尺寸检查;它分析模型的流形(manifold)完整性并评估对 3D 打印至关重要的附着风险。这些指标在 Printability 和 Quote 响应中均有提供。
5. 报价操作
为您的 3D 打印生成即时报价并管理报价历史:
POST /v2/file/quote/{file_id}— 为 3D 模型启动异步报价计算。返回一个作业 ID;使用作业端点检索完成的结果。POST /v2/file/quote/{file_id}/async— 替代的异步报价端点。返回一个作业 ID,您可以使用它来检查状态并获取完成的结果。GET /v2/jobs/{job_id}— 检查异步报价作业的状态。返回进度百分比和完成状态。GET /v2/quotes— 检索您的所有报价历史,支持分页GET /v2/quotes/{quote_id}— 获取特定报价的详细信息DELETE /v2/quotes/{quote_id}— 从您的历史记录中删除报价
异步工作流: POST /v2/file/quote/{file_id} 首先返回一个作业 ID。使用 GET /v2/jobs/{job_id} 获取简洁的完成结果,并使用 GET /v2/quotes/{quote_id} 获取可用的存储的详细报价数据。
报价请求参数
在生成报价时,您可以在请求体中提供自定义配置。您未指定的任何参数将自动从您的仪表板切片配置文件设置中获取。这允许您为每个报价覆盖特定设置,同时为其他设置保留默认值。
重要提示:如果您在请求中未提供参数,API 将使用您的仪表板切片配置文件(打印机配置文件、材料配置文件或全局设置)中的值。请确保在仪表板中设置您的默认配置文件,以获得一致的报价。您还可以配置仪表板上的特定打印机配置文件中的所有参数,并简单地在您的请求中传递其 'printer_id' 以立即应用这些设置,而无需单独传递它们。
配置优先级: V2 API 请求中发送的值会覆盖所选用户配置文件的值;任何仍然缺失的字段将回退到用户/全局默认配置文件。
下表涵盖了集成方最常覆盖的参数,但并非完整清单——报价引擎还接受更多打印机、材料和定价字段,而且每一项都可以在控制台的切片配置文件中设置一次,无需在每次请求时发送。请在那里配置好配置文件,只发送每次报价中变化的部分;完整字段清单见OpenAPI架构。
Request Validation
printer_config、material_config 和 quote_config 中的数值字段会在作业排队前进行边界校验。超出取值范围的值、非有限数值(NaN、Infinity)、错误的类型,或在只允许零及以上的位置出现的负数,都会以 HTTP 400 和指明具体字段的 VALIDATION_ERROR 被拒绝。在有意义的位置仍然接受零:按角色设置的速度或加速度为 0 表示“使用打印机默认值”,与 OrcaSlicer 采用的约定相同。
- 温度限制:材料温度(temperature 和 bed_temperature,无论是在请求中发送还是从材料配置文件中读取)会与打印机的 min_hotend_temp / max_hotend_temp 以及 min_bed_temp / max_bed_temp 进行比对。若某种材料所需的温度超出所选打印机的能力,该请求将被拒绝而不会给出报价。仅适用于 FDM:树脂和粉末类技术既没有喷嘴也没有热床。将打印机的温度限制留空即可跳过此检查。
- 已启用的技术类型:如果您在全局设置中限制了技术类型,针对已禁用技术的报价请求将被拒绝。将该设置留空即表示接受全部三种技术。
- 材料价格字段:price_per_gram 是计价引擎实际使用的值。保存材料配置文件时,price_per_kg 会据此自动重新计算(若只提供每千克价格,则由 price_per_kg 推导出 price_per_gram),因此两者绝不会互相矛盾。
根参数
| 参数 | 类型 | 描述 |
|---|---|---|
| technology | string | 可选。生产技术:'FDM'、'SLA' 或 'SLS'('RESIN' 可作为 'SLA' 的别名)。它决定应用哪些技术专属参数,以及批量生产时零件如何排布。省略时使用所选打印机的技术,若仍无则回退为 'FDM'。 |
| printer_id | string | 可选。要使用的特定打印机的 ID,而不是默认打印机。 |
| quantity | number | 可选。要生产的副本总数(默认:1)。 |
数量和批量生产逻辑
我们的系统利用基于指定 'quantity' 的高级打包算法:
- FDM 技术:零件尽可能地并排放置在构建板上(X 轴和 Y 轴)。
- SLA 技术:零件并排放置在树脂槽中(X 轴和 Y 轴)。
- SLS 技术:零件可以堆叠在所有轴(X、Y 和 Z)上,以充分利用粉末床的容量。
由于这种优化的排布,如果多个零件可以放入一个批次,固定的额外成本(例如预热、冷却和层变化)仅应用于每个必需的批次。这确保了批量订单具有高度真实且具有成本效益的定价。
printer_config
打印机配置参数。所有字段都是可选的,如果未提供,将使用您的默认打印机配置文件值。
| 参数 | 类型 | 描述 |
|---|---|---|
| nozzle_diameter | number | FDM nozzle diameter (mm). Drives extrusion width, so it changes both print time and material use. |
| support_material | boolean | Enable support generation. When omitted, the profile value is used. |
| bed_size_x | number | Build volume X dimension (mm) |
| bed_size_y | number | Build volume Y dimension (mm) |
| bed_size_z | number | Build volume Z dimension (mm) |
| print_speed | number | Default print speed (mm/s) |
| max_print_speed | number | Maximum print speed (mm/s) |
| travel_speed | number | Travel speed (mm/s) |
| first_layer_speed | number | First layer speed (mm/s) |
| layer_height | number | Layer height (mm) |
| min_layer_height | number | Minimum layer height (mm) |
| max_layer_height | number | Maximum layer height (mm) |
| perimeters | number | Number of perimeters/walls |
| top_solid_layers | number | Top solid layers count |
| bottom_solid_layers | number | Bottom solid layers count |
| min_wall_count | number | Minimum wall count |
| max_wall_count | number | Maximum wall count |
| fill_density | number | Infill density (0-100%) |
| infill_pattern | string | 填充图案。默认值:rectilinear。基础类 (rectilinear, alignedrectilinear, zigzag, crosszag, lockedzag, line, grid),三角形 (triangles, trihexagon),立方体 (cubic, adaptivecubic, supportcubic),蜂窝 (honeycomb, honeycomb3d, lateralhoneycomb),高级 (gyroid),特殊 (monotonic, monotonicline),空间填充 (hilbertcurve, archimedeanchords, octagramspiral)。hilbertcurve, archimedeanchords, octagramspiral 可被接受,但没有自己的生成器 —— 它们被视为 rectilinear。数值匹配不区分大小写且忽略分隔符,因此 tri-hexagon 和 Zig Zag 均有效;OrcaSlicer 的拼写方式 3dhoneycomb 同样被接受。lightning, quartercubic, laterallattice, crosshatch, concentric, tpmsd, tpmsfk 不受支持且将返回 400 错误。 |
| support_overhang_angle | number | Support overhang angle (degrees) |
| support_density | number | Support density (0-100%) |
| brim_enabled | boolean | Enable brim generation for FDM quotes |
| brim_width | number | Brim width in millimeters when brim is enabled |
| acceleration_print | number | Print acceleration (mm/s²) |
| acceleration_travel | number | Travel acceleration (mm/s²) |
| acceleration_retraction | number | Retraction acceleration (mm/s²) |
| acceleration_outer_wall | number | Outer wall acceleration (mm/s²). 0 uses acceleration_print. |
| acceleration_inner_wall | number | Inner wall acceleration (mm/s²). 0 uses acceleration_print. |
| acceleration_sparse_infill | number | Sparse infill acceleration (mm/s²). 0 uses acceleration_print. |
| acceleration_solid_infill | number | Solid infill acceleration (mm/s²). 0 uses acceleration_print. |
| acceleration_top_surface | number | Top surface acceleration (mm/s²). 0 uses acceleration_print. |
| acceleration_bridge | number | Bridge acceleration (mm/s²). 0 uses acceleration_print. |
| acceleration_first_layer | number | First layer acceleration (mm/s²). 0 uses acceleration_print. |
| retraction_minimum_travel | number | Travel moves shorter than this do not retract (mm). Reference default 1. |
| z_hop_mm | number | Nozzle lift before a travel move (mm). 0 disables it. Reference default 0.4. |
| bed_exclude_x | number | Unusable bed edge margin on X (mm), removed from the packing area. |
| bed_exclude_y | number | Unusable bed edge margin on Y (mm), removed from the packing area. |
| jerk_print | number | Print jerk (mm/s) |
| jerk_travel | number | Travel jerk (mm/s) |
| jerk_retraction | number | Retraction jerk (mm/s) |
| min_hotend_temp | number | Minimum hotend temperature (°C) |
| max_hotend_temp | number | Maximum hotend temperature (°C) |
| min_bed_temp | number | Minimum bed temperature (°C) |
| max_bed_temp | number | Maximum bed temperature (°C) |
| hourly_cost | number | Machine hourly cost |
| SLA 专属 | ||
| sla_exposure_time | number | SLA:每层曝光时间(秒) |
| sla_bottom_exposure_time | number | SLA:基准曝光时间(秒) |
| sla_bottom_layer_count | number | SLA:底层数量 |
| sla_lift_distance | number | SLA:抬升距离(毫米) |
| sla_lift_speed | number | SLA:抬升速度(毫米/秒) |
| sla_retract_speed | number | SLA:回抽速度(毫米/秒) |
| sla_cleaning_cost | number | SLA:每次打印的固定清洗成本(IPA、耗材) |
| sla_pad_enabled | boolean | SLA:在底座/筏板上打印模型。默认关闭;底座树脂将与支撑材料一并计算。 |
| sla_pad_wall_thickness | number | SLA:底座壁厚 (mm)。别名:sla_pad_height。 |
| sla_pad_wall_height | number | SLA:底座壁高 (mm)(底座凹槽周围的凸起边缘)。 |
| sla_pad_wall_slope | number | SLA:底座壁坡度(度,45-90)。底座以此角度向下收缩。 |
| sla_pad_brim_size | number | SLA:底座裙边尺寸 (mm)。别名:sla_pad_expansion。 |
| sla_pad_max_merge_distance | number | SLA:距离小于此值的支撑脚将合并为一个底座区域 (mm)。 |
| sla_support_head_front_diameter | number | SLA:支持头前端(尖端)直径 (mm)。 |
| sla_support_head_penetration | number | SLA:支持头嵌入模型表面的深度 (mm)。 |
| sla_support_head_width | number | SLA:支持头杆长度 (mm)。 |
| sla_support_pillar_diameter | number | SLA:支持柱直径 (mm)。决定了大部分支撑树脂的体积。 |
| sla_support_base_diameter | number | SLA:支持柱底座(脚部)直径 (mm)。 |
| sla_support_base_height | number | SLA:支持柱底座(脚部)高度 (mm)。 |
| sla_support_object_elevation | number | SLA:物体高于成型平台的高度(单位:mm)。这也会增加打印层数,从而影响打印时间。仅在生成支撑时应用。 |
| sla_support_critical_angle | number | SLA:布置支撑时使用的桥接斜率(单位:度)。这与 support_overhang_angle 不同。 |
| sla_support_max_pillar_link_distance | number | SLA:间距大于此值的支撑柱将不会进行交叉连接(单位:mm)。 |
| sla_support_max_bridge_length | number | SLA:支撑头到达平台时可能采取的最长横向桥接长度(单位:mm)。 |
| sla_support_max_bridges_on_pillar | number | SLA:单个支撑柱允许的桥接数量。 |
| sla_support_points_density | number | SLA:支撑点密度百分比,100 = 正常。这与 support_density 不同,后者是 FDM 支撑填充百分比。 |
| sla_elephant_foot_compensation | number | SLA:底层向内缩进的距离,以抵消底部的扩宽。每台自带的 SLA 打印机参考值为 0.2。设置为 0 则禁用。 |
| sla_elephant_foot_min_width | number | SLA:比此值更窄的轮廓将保持不变,以免细微特征被抹除。参考值为 0.2。 |
| sla_faded_layers | number | SLA:补偿量逐渐减弱至零所经过的层数。这并非底层层数;参考 MSLA 配置使用的是 8。 |
| SLS 专用 | ||
| sls_laser_speed | number | SLS:激光速度(毫米/秒) |
| sls_hatch_spacing | number | SLS:扫描间距(毫米) |
| sls_layer_thickness | number | SLS:层厚(毫米) |
| sls_layer_recoat_time | number | SLS:层铺粉时间(秒) |
| sls_preheat_time | number | SLS:预热时间(分钟) |
| sls_cooling_time | number | SLS:冷却时间(分钟) |
| sla_light_off_delay | number | SLA: Light-off delay for each layer (seconds). |
| sla_transition_layer_count | number | SLA: Number of transition layers. |
| sla_drain_holes | array | SLA: Drainage holes configuration to prevent suction cups. |
| sls_bb_multiplier | number | SLS:部件占用构建槽位每等效克数的机器空间附加费。槽位是指部件的最小体积包围盒加上其分摊的粉末间隙和不可用腔室边缘,因此即使模型旋转到达,该值也不会改变。0 表示禁用附加费。 |
| sls_contour_count | number | SLS:激光在每个切片轮廓周围扫描的轮廓(边界)次数。0 表示禁用轮廓扫描。 |
| sls_contour_speed | number | SLS:轮廓扫描速度,单位为 mm/s。0 表示轮廓按 sls_laser_speed 速度扫描。 |
| sls_jump_speed | number | SLS:扫描矢量之间非烧结重新定位移动的振镜跳转速度,单位为 mm/s。0 表示跳转速度为 sls_laser_speed(上限)。 |
| sls_part_spacing | number | SLS:部件周围的最小粉末间隙(单位:mm),同时应用于部件之间以及部件与腔室壁之间。它决定了单次构建可容纳的部件数量,因此影响机器空间占用份额和固定成本分摊。0 表示使用引擎默认值 3 mm。 |
| max_volumetric_flow | number | Maximum volumetric flow rate in mm³/s. |
material_config
材料配置参数。所有字段都是可选的,如果未提供,将使用您的默认材料配置文件值。
材料配置文件集成:filament_type 参数应与您的仪表板材料配置文件中的材料名称匹配。当您指定 filament_type(例如 "PLA"、"ABS"、"PETG")时,API 会自动从该材料配置文件加载所有属性,包括密度、温度、回抽设置和定价。
定价准确性:材料成本按 price_per_gram 计算。在材料配置文件中只需设置 price_per_kg 或 price_per_gram 其中之一即可——另一个会自动保持同步。您仍然可以在单次请求中通过 material_config 里的 price_per_gram 或 price_per_kg 覆盖价格。
示例:如果您在仪表板中有一个 "PLA" 材料配置文件,其中 price_per_kg: 20.0 且 price_per_gram: 0.02,您可以简单地在请求中发送 {"filament_type": "PLA"},所有定价将自动计算。
| 参数 | 类型 | 描述 |
|---|---|---|
| filament_type | string | Filament type (PLA, ABS, PETG, etc.) |
| color | string | 可选:颜色名称(如 '白色'、'黑色'、'#FFFFFF')。注意:对于 SLA/SLS 技术,仅当 'post_processing' 设置为 'painted' 时才应用颜色。 |
| density | number | Material density (g/cm³) |
| diameter | number | Filament diameter (mm) |
| filament_flow_ratio | number | FDM 流量倍率。1.0 表示 100% 流量。请求值将覆盖所选的用户材料配置文件;如果缺失,则在默认值 1.0 之前使用全局配置文件值。 |
| powder_bulk_density | number | SLS: Bulk density of loose powder in g/cm³. Used for reusable powder and refresh calculations. |
| temperature | number | Print temperature (°C) |
| print_temp_min | number | Minimum print temperature (°C) |
| print_temp_max | number | Maximum print temperature (°C) |
| bed_temperature | number | Bed temperature (°C) |
| bed_temp_min | number | Minimum bed temperature (°C) |
| bed_temp_max | number | Maximum bed temperature (°C) |
| fan_speed | number | Fan speed (0-100%) |
| min_fan_speed | number | Minimum fan speed (0-100%) |
| retraction_distance | number | Retraction distance (mm) |
| retraction_speed | number | Retraction speed (mm/s) |
| slow_down_min_speed | number | Lower speed bound for layer cooling (mm/s). Reference default 20. |
| retraction_minimum_travel | number | Overrides the printer value for this material (mm). |
| z_hop_mm | number | Overrides the printer value for this material (mm). |
| price_per_kg | number | Price per kilogram |
| price_per_gram | number | Price per gram |
| support_cost_multiplier | number | Support material cost multiplier |
| sls_refresh_factor | number | SLS powder refresh rate ratio (e.g. 0.3 = 30% fresh powder). |
| max_volumetric_flow | number | Material specific volumetric flow limit in mm³/s. |
| min_layer_time | number | Minimum layer time in seconds for cooling. |
quote_config
报价定价配置参数。所有字段都是可选的,如果未提供,将使用您的默认全局设置值。货币默认为您的仪表板偏好设置(例如 "USD", "TRY", "EUR")。
| 参数 | 类型 | 描述 |
|---|---|---|
| currency | string | Currency code (USD, TRY, EUR, GBP, JPY, CNY, RUB). Defaults to your dashboard preference. |
| tax_rate | number | Tax rate percentage (0-100) |
| fixed_fee | number | Fixed fee per quote |
| energy_cost_per_kwh | number | Energy cost per kWh |
| hollowing | string | SLA/SLS 专用:'solid'(实心)、'2mm' 或 '3mm'。对于 SLA,当设置中启用 SLA 掏空时,默认值为 '2mm';对于 SLS,当启用 SLS 掏空时,默认值为 '2mm'。SLS 部件在掏空时不会设置排粉孔,因此未烧结的粉末会留在内部:该部分按粉床密度计费且无法回收。如果部件的壁厚已经薄于配置壁厚的两倍,则保持实心。 |
| post_processing | string | SLA/SLS专用:'standard'、'sanding'、'painting' 或 'painted'(默认:'standard')。该值会记录在报价上;也正是 'painted' 让所选颜色应用到SLA/SLS零件。 |
| sla_post_processing_fee_standard | number | SLA standard post-processing fee per part. Overrides the settings value; post_processing selects which one applies. |
| sla_post_processing_fee_sanding | number | SLA sanding post-processing fee per part. Overrides the settings value; post_processing selects which one applies. |
| sla_post_processing_fee_painting | number | SLA painting post-processing fee per part. Overrides the settings value; post_processing selects which one applies. |
| sla_post_processing_fee_painted | number | SLA painted post-processing fee per part. Overrides the settings value; post_processing selects which one applies. |
| sls_post_processing_fee_standard | number | SLS standard post-processing fee per part. Overrides the settings value; post_processing selects which one applies. |
| sls_post_processing_fee_sanding | number | SLS sanding post-processing fee per part. Overrides the settings value; post_processing selects which one applies. |
| sls_post_processing_fee_painting | number | SLS painting post-processing fee per part. Overrides the settings value; post_processing selects which one applies. |
| sls_post_processing_fee_painted | number | SLS painted post-processing fee per part. Overrides the settings value; post_processing selects which one applies. |
| enable_batch_system | boolean | Enable/disable batch calculation system (default: true) |
| sls_min_build_fill | number | SLS:最小构建填充率,取值为 0 到 1 之间的比例。订单将按至少占据单次构建运行的该比例进行计费 —— 0 表示与其他任务共享构建,1 表示计费整个构建。当 enable_batch_system 为 false 时,此项将被忽略。 |
| material_wastage_factor | number | Factor for calculating material wastage (e.g. 1.10 for 10% wastage). |
| volume_discount_tiers | array | Quantity discount tiers, e.g. [{"minVolume": 100, "discount": 5}]. Falls back to your Global Settings tiers. |
提示:报价会自动保存到您的帐户。您可以随时通过报价历史记录端点访问它们。
6. 打印机和报价配置
配置打印机设置和定价以获得准确的报价。您可以在仪表盘的切片配置部分管理您的默认配置,当您在 API 请求中未指定参数时,系统将自动使用这些配置。
配置类型
- 打印机档案 - 配置您的打印机设置(打印床尺寸、喷嘴直径、打印速度、层高、加速度、抖动、温度等),以匹配您的实际打印机。在仪表盘中将其设置为您的默认档案,除非您覆盖特定参数,否则它将用于所有报价请求。
- 材料档案 - 为您使用的每种材料设置材料属性(灯丝类型、密度、直径、温度、风扇速度、回抽设置、定价)。当您在请求中指定 filament_type 时,API 将自动使用匹配的材料档案。
- 全局设置 - 配置全局报价设置,如税率、固定费用、能源成本和默认货币。这些设置适用于所有报价,除非在请求中被覆盖。
最佳实践:在仪表盘切片档案部分设置您的默认档案。这样,您可以在不指定所有参数的情况下提出简单的报价请求,API 将自动使用您配置的默认值。在需要时,您仍然可以按请求覆盖任何参数。
档案合并方式
当您提出报价请求时,API 会使用以下优先级将您的请求参数与仪表盘档案合并:
- 请求参数 - 您在 API 请求中明确提供的数值具有最高优先级
- 用户档案 - 如果您设置了用户特定的默认档案,则接下来使用它
- 全局配置 - 如果不存在用户配置,系统将回退到全局默认值。
这意味着您可以仅覆盖您需要的参数(例如,仅 layer_height 或 fill_density),同时保留来自仪表盘档案的所有其他设置。
7. Webhooks
当您的账户中发生事件时,接收实时通知:
POST /v2/webhooks- 创建新的Webhook端点GET /v2/webhooks- 列出您的所有 WebhooksGET /v2/webhooks/{webhook_id}- 获取 Webhook 详情和交付统计信息PUT /v2/webhooks/{webhook_id}- 更新Webhook设置DELETE /v2/webhooks/{webhook_id}- 删除Webhook
支持的事件: quote.completed, quote.failed, file.uploaded, file.deleted, job.status_changed, widget.added_to_cart. Webhooks包含HMAC-SHA256签名以进行安全验证。
8. 分析与报告
获取您 API 的使用情况和报价统计信息:
GET /v2/analytics/quotes- 获取全面的报价统计信息,包括总报价数、平均价格、材料使用趋势GET /v2/analytics/popular- 查看您最受欢迎的材料和打印机配置GET /v2/analytics/cost-trends- 分析一段时间内的成本趋势(每日、每周或每月分组)GET /v2/analytics/export- 将您的报价和使用数据导出为 CSV 或 JSON
9. 速率限制与配额
Quote3D 使用速率限制以确保公平使用和系统稳定性:
- 速率限制应用于每个 API 令牌,并且因端点而异
- 速率限制信息包含在响应头中:
X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset,X-RateLimit-Window - 当达到速率限制时,您将收到 429 Too Many Requests 响应,其中包含 Retry-After 头
- 报价和存储的月度配额基于您的订阅计划
- 限制值可按部署配置,因此请读取当前值而不要写死在代码中。上面的响应标头和该端点都会报告这些值:
GET /v2/quota
最佳实践:处理速率限制错误时实施指数退避,以避免使 API 过载。
10. 响应与错误
每个JSON响应都使用相同的信封结构。成功的调用返回 success: true,端点载荷位于 data 之下,因此您的客户端在任何地方都能读到一致的结构。文件下载和CSV导出是例外——它们返回原始文件内容而不是信封。
{
"success": true,
"data": { "...": "endpoint-specific payload" }
}分页与排序
/v2/quotes 和 /v2/user/uploads 等列表端点使用 limit 和 offset 查询参数分页(默认50条,最多100条)。除结果外还会返回包含 total、limit、offset、has_more、page 和 total_pages 的 pagination 对象,因此请使用 has_more,而不要自行推算列表末尾。排序使用 field:direction 形式的可重复单一参数,例如 ?sort=created_at:desc&sort=total_price:asc;上传记录默认按最新优先排列。
错误响应
失败时返回 success: false,并附带可读的错误消息和相应的HTTP状态码。请始终根据状态码分支,而不要依赖可能被改写的消息文本。
| 状态 | 含义 |
|---|---|
| 400 | 请求体或查询参数无效——字段格式错误、文件格式不受支持,或模型无法放入所选打印机。 |
| 401 | API令牌缺失、格式错误、已过期或已吊销。 |
| 403 | 令牌有效但不允许执行此调用——通常是作用域限制或IP地址被封禁。 |
| 404 | 请求的文件、报价、任务或Webhook不存在,或不属于您的账户。 |
| 429 | 超出速率限制。请读取 Retry-After 标头并在重试前退避等待。 |
| 500 | 服务器端意外错误。可以退避后重试;若持续出现,请附上时间戳联系支持团队。 |
异步报价有所不同:任务入队会以202成功返回,而随后失败的计算会在任务端点上表现为带有错误消息的 failed 状态,而不是HTTP错误。请始终检查任务状态,而不只是启动时收到的状态码。
11. RESTful、带版本的API
- 所有端点都经过版本化(例如:/v2/)
- 使用标准的HTTP方法:
GET,POST,PUT,DELETE - 由OpenAPI 3.0.3架构描述,可导入您自己的工具中
- 破坏性变更与新增内容记录在 API更新日志