API Hoạt hình

Các endpoint để khám phá các Hoạt hình có sẵn và áp dụng chúng cho các nhân vật có rig.


POST/openapi/v1/animations

Tạo một tác vụ Hoạt hình

Endpoint này cho phép bạn tạo một tác vụ mới để áp dụng hoạt hình cho một nhân vật đã được rigging trước đó — một hành động dựng sẵn từ thư viện hoạt hình (action_id), nhiều hành động dựng sẵn được gộp vào một tệp (action_ids), hoặc một đoạn chuyển động bạn đã tạo bằng Text to Motion API (motion_task_id). Bao gồm các tùy chọn xử lý hậu kỳ.

Tham số

  • Name
    rig_task_id
    Type
    string
    Bắt buộc
    Description

    id của một tác vụ rigging đã hoàn thành thành công (từ POST /openapi/v1/rigging). Nhân vật từ tác vụ này sẽ được tạo hoạt hình.

  • Name
    action_id
    Type
    integer
    Description

    Định danh của hành động hoạt hình dựng sẵn cần áp dụng. Xem Tài liệu tham khảo Thư viện hoạt hình để biết danh sách đầy đủ các hoạt hình khả dụng. Chỉ cung cấp đúng một trong ba tham số action_id, action_ids hoặc motion_task_id.

  • Name
    action_ids
    Type
    array of integers
    Description

    Nhiều hành động hoạt hình dựng sẵn được áp dụng cùng lúc, trả về dưới dạng một tệp duy nhất chứa một đoạn hoạt hình cho mỗi hành động — hữu ích để điều khiển một nhân vật từ một máy trạng thái (state machine) trong game engine. Cung cấp từ 1 đến 10 giá trị action_id từ Tài liệu tham khảo Thư viện hoạt hình; các id phải là duy nhất. Tốn 3 tín dụng cho mỗi hành động. Chỉ cung cấp đúng một trong ba tham số action_id, action_ids hoặc motion_task_id.

    Truyền action_ids chỉ chứa một phần tử tương đương với việc truyền giá trị đó dưới dạng action_id.

  • Name
    motion_task_id
    Type
    string
    Description

    id của một tác vụ Text to Motion đã hoàn thành thành công để áp dụng thay cho một hành động dựng sẵn. Đoạn hoạt hình được tạo ra sẽ được ánh xạ lại (retarget) lên nhân vật đã rigging và đoạn hoạt hình được chụp nhanh (snapshot) tại thời điểm tạo, do đó tác vụ này không bị ảnh hưởng nếu tác vụ nguồn sau đó hết hạn hoặc bị xóa. Các asset của tác vụ nguồn được lưu giữ trong 3 ngày — hãy áp dụng đoạn hoạt hình trước khi nó hết hạn. Yêu cầu rig dạng hai chân (biped). Chỉ cung cấp đúng một trong ba tham số action_id, action_ids hoặc motion_task_id.

  • Name
    post_process
    Type
    object
    Description

    Xử lý hậu kỳ tùy chọn cho đầu ra hoạt hình. Bỏ qua tham số này để nhận các tệp hoạt hình tiêu chuẩn.

Chỉ áp dụng khi post_process is set
  • Name
    operation_type
    Type
    string
    Bắt buộc
    Description

    Loại thao tác cần thực hiện. Các giá trị khả dụng: change_fps, fbx2usdz, extract_armature.

  • Name
    fps
    Type
    integer
    mặc định 30
    Description

    Tốc độ khung hình mục tiêu. Chỉ áp dụng khi operation_type là change_fps. Các giá trị được phép: 24, 25, 30, 60.

Giá trị trả về

Thuộc tính result của phản hồi chứa id của tác vụ hoạt hình vừa được tạo.

Các chế độ lỗi

  • Name
    400 - Bad Request
    Description

    Yêu cầu không hợp lệ. Các nguyên nhân phổ biến:

    • Thiếu tham số: rig_task_id bị thiếu, hoặc không có tham số nào trong số action_id, action_ids và motion_task_id được cung cấp.
    • Tham số xung đột: có nhiều hơn một trong số action_id, action_ids và motion_task_id được cung cấp — chúng loại trừ lẫn nhau.
    • Tác vụ rig không hợp lệ: rig_task_id không hợp lệ hoặc trỏ đến một tác vụ thất bại/không tồn tại.
    • ID hành động không hợp lệ: action_id — hoặc một phần tử của action_ids — không tương ứng với một hoạt hình hợp lệ.
    • Quá nhiều hành động: action_ids chứa nhiều hơn 10 id.
    • Hành động trùng lặp: action_ids chứa cùng một id nhiều hơn một lần.
    • Tác vụ chuyển động chưa sẵn sàng: tác vụ motion_task_id chưa SUCCEEDED.
    • Rig không được hỗ trợ: motion_task_id yêu cầu rig dạng hai chân (biped); rig dạng bốn chân (quadruped) sẽ bị từ chối.
  • Name
    401 - Unauthorized
    Description

    Xác thực thất bại. Vui lòng kiểm tra khóa API của bạn.

  • Name
    402 - Payment Required
    Description

    Không đủ tín dụng để thực hiện tác vụ này.

  • Name
    404 - Not Found
    Description

    Không tìm thấy tác vụ rigging được chỉ định bởi rig_task_id, không tìm thấy tác vụ chuyển động được chỉ định bởi motion_task_id, hoặc đoạn chuyển động đã hết hạn (các asset của tác vụ nguồn được lưu giữ trong 3 ngày).

  • Name
    429 - Too Many Requests
    Description

    Bạn đã vượt quá giới hạn tốc độ.

Request

POST
/openapi/v1/animations
# Animate a rigged model with required params only
curl https://api.meshy.ai/openapi/v1/animations \
  -X POST \
  -H "Authorization: Bearer ${YOUR_API_KEY}" \
  -H 'Content-Type: application/json' \
  -d '{
    "rig_task_id": "018b314a-a1b5-716d-c222-2f1776f7f579",
    "action_id": 92
  }'

# Apply several preset actions and get one file with one clip per action
curl https://api.meshy.ai/openapi/v1/animations \
  -X POST \
  -H "Authorization: Bearer ${YOUR_API_KEY}" \
  -H 'Content-Type: application/json' \
  -d '{
    "rig_task_id": "018b314a-a1b5-716d-c222-2f1776f7f579",
    "action_ids": [10, 25, 92]
  }'

# Apply a generated Text to Motion clip instead of a preset action
curl https://api.meshy.ai/openapi/v1/animations \
  -X POST \
  -H "Authorization: Bearer ${YOUR_API_KEY}" \
  -H 'Content-Type: application/json' \
  -d '{
    "rig_task_id": "018b314a-a1b5-716d-c222-2f1776f7f579",
    "motion_task_id": "018c425b-b2c6-727e-d333-3c1887i9h791"
  }'

# With post-processing to change FPS
curl https://api.meshy.ai/openapi/v1/animations \
  -X POST \
  -H "Authorization: Bearer ${YOUR_API_KEY}" \
  -H 'Content-Type: application/json' \
  -d '{
    "rig_task_id": "018b314a-a1b5-716d-c222-2f1776f7f579",
    "action_id": 92,
    "post_process": {
      "operation_type": "change_fps",
      "fps": 24
    }
  }'

Response

{
  "result": "018c425b-b2c6-727e-d333-3c1887i9h791"
}

GET/openapi/v1/animations/:id

Truy xuất một Animation Task

Endpoint này cho phép bạn truy xuất một animation task với một id task hợp lệ. Tham khảo The Animation Task Object để xem các thuộc tính được bao gồm.

Tham số

  • Name
    id
    Type
    path
    Description

    Định danh duy nhất của animation task cần truy xuất.

Kết quả trả về

Phản hồi chứa đối tượng Animation Task. Xem chi tiết tại mục The Animation Task Object.

Request

GET
/openapi/v1/animations/018c425b-b2c6-727e-d333-3c1887i9h791
curl https://api.meshy.ai/openapi/v1/animations/018c425b-b2c6-727e-d333-3c1887i9h791 
  -H "Authorization: Bearer ${YOUR_API_KEY}"

Response

{
  "id": "018c425b-b2c6-727e-d333-3c1887i9h791",
  "type": "animate",
  "status": "SUCCEEDED",
  "created_at": 1747032440896,
  "progress": 100,
  "started_at": 1747032441210,
  "finished_at": 1747032457530,
  "expires_at": 1747291657530,
  "task_error": {

    "message": ""

  },

  "consumed_credits": 3,
  "result": {
    "animation_glb_url": "https://assets.meshy.ai/0630d47c-84b8-4d37-bc02-69e45d9272c1/tasks/018c425b-b2c6-727e-d333-3c1887i9h791/output/Animation_Reaping_Swing_withSkin.glb?Expires=...",
    "animation_fbx_url": "https://assets.meshy.ai/0630d47c-84b8-4d37-bc02-69e45d9272c1/tasks/018c425b-b2c6-727e-d333-3c1887i9h791/output/Animation_Reaping_Swing_withSkin.fbx?Expires=...",
    "processed_usdz_url": "https://assets.meshy.ai/0630d47c-84b8-4d37-bc02-69e45d9272c1/tasks/018c425b-b2c6-727e-d333-3c1887i9h791/output/processed.usdz?Expires=...",
    "processed_armature_fbx_url": "https://assets.meshy.ai/0630d47c-84b8-4d37-bc02-69e45d9272c1/tasks/018c425b-b2c6-727e-d333-3c1887i9h791/output/processed_armature.fbx?Expires=...",
    "processed_animation_fps_fbx_url": "https://assets.meshy.ai/0630d47c-84b8-4d37-bc02-69e45d9272c1/tasks/018c425b-b2c6-727e-d333-3c1887i9h791/output/processed_60fps.fbx?Expires=..."
  },
  "preceding_tasks": 0
}

DELETE/openapi/v1/animations/:id

Xóa một Tác vụ Hoạt hình

Endpoint này xóa vĩnh viễn một tác vụ hoạt hình, bao gồm tất cả các mô hình và dữ liệu liên quan. Hành động này không thể hoàn tác.

Tham số Đường dẫn

  • Name
    id
    Type
    path
    Description

    ID của tác vụ hoạt hình cần xóa.

Trạng thái Tác vụ

Một tác vụ vẫn đang ở trạng thái PENDING sẽ bị xóa và số tín dụng đã tiêu tốn tại thời điểm tạo sẽ được hoàn lại.

Một tác vụ đã ở trạng thái IN_PROGRESS thì không thể bị xóa: yêu cầu sẽ bị từ chối với mã 409 Conflict và tác vụ vẫn tiếp tục chạy. Tín dụng cho một tác vụ mà worker đã bắt đầu xử lý sẽ không được hoàn lại, vì vậy việc xóa nó giữa chừng sẽ khiến bạn mất cả tín dụng lẫn kết quả. Hãy đợi cho đến khi nó đạt trạng thái SUCCEEDED, FAILED hoặc CANCELED, sau đó mới xóa.

Một tác vụ ở trạng thái cuối cùng (SUCCEEDED, FAILED hoặc CANCELED) sẽ bị xóa mà không được hoàn tiền.

Kết quả trả về

Trả về 200 OK khi thành công, hoặc 409 Conflict khi tác vụ đang ở trạng thái IN_PROGRESS.

Request

DELETE
/openapi/v1/animations/018b314a-a1b5-716d-c222-2f1776f7f579
curl --request DELETE \
  --url https://api.meshy.ai/openapi/v1/animations/018b314a-a1b5-716d-c222-2f1776f7f579 \
  -H "Authorization: Bearer ${YOUR_API_KEY}"

Response

// 200 OK on success, with an empty body.
//
// 409 Conflict when the task is IN_PROGRESS — the task is left running:
{
  "message": "Task is IN_PROGRESS and cannot be deleted. Credits for a task the worker has already started are not refundable; wait for it to reach SUCCEEDED, FAILED or CANCELED, then delete it."
}

GET/openapi/v1/animations

List Animation Tasks

Trả về danh sách đã phân trang các tác vụ Hoạt hình của người gọi, mới nhất trước. Phân trang tiêu chuẩn thông qua page_num và page_size.

Lưu ý rằng các tác vụ được tạo qua API được quản lý qua API — chúng không xuất hiện trong My Assets của ứng dụng web. Sử dụng endpoint này để tìm một tác vụ mà bạn không còn ID của nó.

Request

GET
/openapi/v1/animations
curl "https://api.meshy.ai/openapi/v1/animations?page_num=1&page_size=20" \
-H "Authorization: Bearer ${YOUR_API_KEY}"

GET/openapi/v1/animations/:id/stream

Truyền trực tuyến tác vụ Hoạt hình

Endpoint này truyền trực tuyến các cập nhật theo thời gian thực cho một tác vụ Hoạt hình bằng Server-Sent Events (SSE).

Tham số

  • Name
    id
    Type
    path
    Description

    Định danh duy nhất của tác vụ Hoạt hình cần truyền trực tuyến.

Kết quả trả về

Trả về một luồng The Animation Task Objects dưới dạng Server-Sent Events.

Đối với các tác vụ ở trạng thái PENDING hoặc IN_PROGRESS, luồng phản hồi sẽ chỉ bao gồm các trường progress và status cần thiết.

Request

GET
/openapi/v1/animations/018c425b-b2c6-727e-d333-3c1887i9h791/stream
curl -N https://api.meshy.ai/openapi/v1/animations/018c425b-b2c6-727e-d333-3c1887i9h791/stream 
-H "Authorization: Bearer ${YOUR_API_KEY}"

Response Stream

// Error event example
event: error
data: {
  "status_code": 404,
  "message": "Task not found"
}

// Message event examples illustrate task progress.
// For PENDING or IN_PROGRESS tasks, the response stream will not include all fields.
event: message
data: {
  "id": "018c425b-b2c6-727e-d333-3c1887i9h791",
  "progress": 0,
  "status": "PENDING"
}

event: message
data: {
  "id": "018c425b-b2c6-727e-d333-3c1887i9h791",
  "progress": 50,
  "status": "IN_PROGRESS"
}

event: message
data: { // Example of a SUCCEEDED task stream item, mirroring The Animation Task Object structure
  "id": "018c425b-b2c6-727e-d333-3c1887i9h791",
  "type": "animate",
  "status": "SUCCEEDED",
  "created_at": 1747032440896,
  "progress": 100,
  "started_at": 1747032441210,
  "finished_at": 1747032457530,
  "expires_at": 1747291657530,
  "task_error": {

    "message": ""

  },

  "consumed_credits": 3,
  "result": {
    "animation_glb_url": "https://assets.meshy.ai/.../Animation_Reaping_Swing_withSkin.glb?...",
    "animation_fbx_url": "https://assets.meshy.ai/.../Animation_Reaping_Swing_withSkin.fbx?...",
    "processed_usdz_url": "https://assets.meshy.ai/.../processed.usdz?...",
    "processed_armature_fbx_url": "https://assets.meshy.ai/.../processed_armature.fbx?...",
    "processed_animation_fps_fbx_url": "https://assets.meshy.ai/.../processed_60fps.fbx?..."
  },
  "preceding_tasks": 0
}

Đối tượng Animation Task

Đối tượng Animation Task đại diện cho đơn vị công việc để áp dụng hoạt hình cho một nhân vật đã có bộ xương (rigged).

Thuộc tính

  • Name
    id
    Type
    string
    Description

    Định danh duy nhất cho tác vụ.

  • Name
    type
    Type
    string
    Description

    Loại tác vụ Animation. Giá trị là animate.

  • Name
    status
    Type
    string
    Description

    Trạng thái của tác vụ. Các giá trị có thể có: PENDING, IN_PROGRESS, SUCCEEDED, FAILED, CANCELED.

  • Name
    progress
    Type
    integer
    Description

    Tiến độ của tác vụ (0-100).

  • Name
    created_at
    Type
    timestamp
    Description

    Dấu thời gian (mili-giây kể từ epoch) khi tác vụ được tạo.

  • Name
    started_at
    Type
    timestamp
    Description

    Dấu thời gian (mili-giây kể từ epoch) khi tác vụ bắt đầu xử lý. 0 nếu chưa bắt đầu.

  • Name
    finished_at
    Type
    timestamp
    Description

    Dấu thời gian (mili-giây kể từ epoch) khi tác vụ hoàn thành. 0 nếu chưa hoàn thành.

  • Name
    expires_at
    Type
    timestamp
    Description

    Dấu thời gian (mili-giây kể từ epoch) khi các asset kết quả của tác vụ hết hạn.

  • Name
    task_error
    Type
    object
    Description

    Chi tiết lỗi cho các tác vụ thất bại. Xem Lỗi để biết đầy đủ tham chiếu về đối tượng task_error.

  • Name
    consumed_credits
    Type
    integer
    Description

    Số lượng tín dụng đã tiêu thụ bởi tác vụ này. Có mặt khi trạng thái tác vụ là PENDING, IN_PROGRESS, hoặc SUCCEEDED. Trả về 0 đối với các tác vụ FAILED (tín dụng được hoàn lại khi thất bại).

  • Name
    result
    Type
    object
    Description

    Chứa các URL hoạt hình đầu ra nếu tác vụ SUCCEEDED.

    • Name
      animation_glb_url
      Type
      string
      Description
      URL có thể tải xuống cho hoạt hình ở định dạng GLB. Đối với một tác vụ được tạo với action_ids, tệp duy nhất này chứa mọi hành động (action) được yêu cầu dưới dạng một clip riêng biệt.
    • Name
      animation_fbx_url
      Type
      string
      Description
      URL có thể tải xuống cho hoạt hình ở định dạng FBX. Đối với một tác vụ được tạo với action_ids, tệp duy nhất này chứa mọi hành động (action) được yêu cầu dưới dạng một clip riêng biệt.
    • Name
      processed_usdz_url
      Type
      string
      Description
      URL có thể tải xuống cho hoạt hình đã xử lý ở định dạng USDZ.
    • Name
      processed_armature_fbx_url
      Type
      string
      Description
      URL có thể tải xuống cho bộ xương đã xử lý ở định dạng FBX.
    • Name
      processed_animation_fps_fbx_url
      Type
      string
      Description
      URL có thể tải xuống cho hoạt hình đã thay đổi FPS ở định dạng FBX (ví dụ, nếu thao tác change_fps đã được sử dụng).
  • Name
    preceding_tasks
    Type
    integer
    Description

    Số lượng tác vụ đứng trước trong hàng đợi. Chỉ có ý nghĩa nếu trạng thái là PENDING.

Example Animation Task Object

{
  "id": "018c425b-b2c6-727e-d333-3c1887i9h791",
  "type": "animate",
  "status": "SUCCEEDED",
  "created_at": 1747032440896,
  "progress": 100,
  "started_at": 1747032441210,
  "finished_at": 1747032457530,
  "expires_at": 1747291657530,
  "task_error": {

    "message": ""

  },

  "consumed_credits": 3,
  "result": {
    "animation_glb_url": "https://assets.meshy.ai/.../Animation_Reaping_Swing_withSkin.glb?...",
    "animation_fbx_url": "https://assets.meshy.ai/.../Animation_Reaping_Swing_withSkin.fbx?...",
    "processed_usdz_url": "https://assets.meshy.ai/.../processed.usdz?...",
    "processed_armature_fbx_url": "https://assets.meshy.ai/.../processed_armature.fbx?...",
    "processed_animation_fps_fbx_url": "https://assets.meshy.ai/.../processed_60fps.fbx?..."
  },
  "preceding_tasks": 0
}

GET/openapi/v1/animations/library

List Animations

Trả về mọi hoạt hình trong thư viện, sắp xếp theo action_id. Phản hồi là một danh sách đầy đủ chứ không phải một trang, vì vậy chỉ cần một lệnh gọi là đủ để điền vào bộ chọn hành động. Các bộ lọc thu hẹp kết quả; bỏ qua tất cả để lấy toàn bộ.

Để duyệt cùng một danh mục bằng mắt, với bản xem trước động của từng hành động, xem tài liệu tham khảo Thư viện hoạt hình.

endpoint này miễn phí — không tiêu tốn tín dụng.

Tham số

  • Name
    search
    Type
    string
    Description

    Khớp chuỗi con không phân biệt hoa thường trên name hoặc key. Được khớp theo nghĩa đen, vì vậy % và _ là các ký tự thông thường chứ không phải ký tự đại diện.

  • Name
    category
    Type
    string
    Description

    Khớp chính xác trên category.

    Các giá trị khả dụng:

    • WalkAndRun
    • BodyMovements
    • DailyActions
    • Fighting
    • Dancing
  • Name
    sub_category
    Type
    string
    Description

    Khớp chính xác trên sub_category. Có thể chấp nhận riêng lẻ — tên sub-category không duy nhất giữa các category (Transitioning xuất hiện ở cả Fighting và DailyActions), vì vậy nếu không có category, bộ lọc sẽ khớp với sub-category đó ở bất cứ nơi nào nó xuất hiện.

  • Name
    action_ids
    Type
    string
    Description

    Danh sách các giá trị action_id cách nhau bằng dấu phẩy để trả về, dùng để xác định các id cụ thể thay vì duyệt tìm. Chấp nhận tối đa 200 id. Các id mà không có hoạt hình nào mang sẽ đơn giản là không xuất hiện trong phản hồi, vì vậy bạn cũng có thể dùng cách này để kiểm tra xem các id bạn đã lưu trữ có còn khả dụng hay không.

Kết hợp bộ lọc

Các bộ lọc được áp dụng cùng nhau — mỗi bộ lọc sẽ thu hẹp kết quả thêm nữa, vì vậy một hoạt hình chỉ được trả về nếu nó thỏa mãn tất cả các bộ lọc đó. Trong một bộ lọc duy nhất, nhiều giá trị sẽ khớp với bất kỳ giá trị nào trong số đó: search khớp với name hoặc key, và action_ids khớp với bất kỳ id nào trong danh sách.

Điều đó có nghĩa là một sự kết hợp không có phần giao nhau sẽ trả về một mảng rỗng thay vì báo lỗi. Hành động 92 là "Double Combo Attack", một hoạt hình Fighting:

  • ?action_ids=92&category=Fighting trả về hành động 92.
  • ?action_ids=92&category=Dancing trả về [] — nó không phải là hoạt hình Dancing.
  • ?action_ids=92&search=walk trả về [] — tên của nó không khớp với walk.

Để lấy các hoạt hình cụ thể bất kể category của chúng, hãy truyền action_ids một mình.

Kết quả trả về

Trả về một danh sách Đối tượng Hoạt hình.

Request

GET
/openapi/v1/animations/library
curl "https://api.meshy.ai/openapi/v1/animations/library?category=Fighting" \
-H "Authorization: Bearer ${YOUR_API_KEY}"

Response

[
  {
    "action_id": 4,
    "name": "Attack",
    "key": "Attack",
    "category": "Fighting",
    "sub_category": "AttackingwithWeapon",
    "preview_url": "https://cdn.meshy.ai/webapp-assets/feature-demo/animation/preview/biped/Attack.gif"
  },
  {
    "action_id": 92,
    "name": "Double Combo Attack",
    "key": "Double_Combo_Attack",
    "category": "Fighting",
    "sub_category": "AttackingwithWeapon",
    "preview_url": "https://cdn.meshy.ai/webapp-assets/feature-demo/animation/preview/biped/Double_Combo_Attack.gif"
  }
]

The Animation Object

  • Name
    action_id
    Type
    integer
    Description

    Giá trị cần truyền vào action_id khi tạo một tác vụ hoạt hình. Duy nhất và ổn định, nhưng không liên tục — các hoạt hình đã ngừng sử dụng để lại các khoảng trống trong dãy số, vì vậy đừng bao giờ cho rằng một dải id là hợp lệ.

  • Name
    name
    Type
    string
    Description

    Nhãn dễ đọc, dùng để hiển thị. Không duy nhất: một số hoạt hình có cùng tên nhưng khác biến thể, vì vậy hãy dùng action_id hoặc key làm định danh.

  • Name
    key
    Type
    string
    Description

    Slug duy nhất và ổn định cho Hoạt hình. Sử dụng nó khi bạn cần một định danh không phải dạng số để làm khóa cho hệ thống lưu trữ của riêng bạn.

  • Name
    category
    Type
    string
    Description

    Nhóm cấp cao nhất, ví dụ Fighting.

  • Name
    sub_category
    Type
    string
    Description

    Nhóm con trong danh mục, ví dụ AttackingwithWeapon.

  • Name
    preview_url
    Type
    string
    Description

    URL của một ảnh GIF động xem trước hành động, phù hợp để hiển thị trực tiếp trong bộ chọn của riêng bạn.

Example Animation Object

{
  "action_id": 92,
  "name": "Double Combo Attack",
  "key": "Double_Combo_Attack",
  "category": "Fighting",
  "sub_category": "AttackingwithWeapon",
  "preview_url": "https://cdn.meshy.ai/webapp-assets/feature-demo/animation/preview/biped/Double_Combo_Attack.gif"
}