API Animasi

Endpoint untuk menemukan Animasi yang tersedia dan menerapkannya pada karakter yang memiliki rig.


POST/openapi/v1/animations

Create an Animation Task

Endpoint ini memungkinkan Anda membuat tugas baru untuk menerapkan animasi pada karakter yang sebelumnya sudah di-rig — sebuah aksi preset dari pustaka animasi (action_id), beberapa aksi preset yang digabungkan menjadi satu file (action_ids), atau klip gerakan yang Anda hasilkan dengan Text to Motion API (motion_task_id). Mencakup opsi pasca-pemrosesan.

Parameter

  • Name
    rig_task_id
    Type
    string
    Wajib
    Description

    id dari tugas rigging yang telah berhasil diselesaikan (dari POST /openapi/v1/rigging). Karakter dari tugas ini akan dianimasikan.

  • Name
    action_id
    Type
    integer
    Description

    Pengidentifikasi aksi animasi preset yang akan diterapkan. Lihat Referensi Pustaka Animasi untuk daftar lengkap animasi yang tersedia. Berikan tepat satu dari action_id, action_ids, atau motion_task_id.

  • Name
    action_ids
    Type
    array of integers
    Description

    Beberapa aksi animasi preset yang diterapkan sekaligus, dikembalikan sebagai satu file yang berisi satu klip animasi per aksi — berguna untuk menggerakkan karakter dari state machine di dalam game engine. Berikan 1 hingga 10 nilai action_id dari Referensi Pustaka Animasi; id harus unik. Biaya 3 kredit per aksi. Berikan tepat satu dari action_id, action_ids, atau motion_task_id.

    Mengirimkan action_ids dengan satu elemen setara dengan mengirimkan nilai tersebut sebagai action_id.

  • Name
    motion_task_id
    Type
    string
    Description

    id dari tugas Text to Motion yang telah berhasil diselesaikan untuk diterapkan sebagai pengganti aksi preset. Klip yang dihasilkan di-retarget ke karakter yang telah di-rig dan klip tersebut diambil snapshot-nya pada saat pembuatan, sehingga tugas ini tidak terpengaruh jika tugas sumber kemudian kedaluwarsa atau dihapus. Aset tugas sumber disimpan selama 3 hari — terapkan klip sebelum kedaluwarsa. Membutuhkan rig biped. Berikan tepat satu dari action_id, action_ids, atau motion_task_id.

  • Name
    post_process
    Type
    object
    Description

    Pasca-pemrosesan opsional untuk keluaran animasi. Abaikan untuk menerima file animasi standar.

Hanya berlaku ketika post_process is set
  • Name
    operation_type
    Type
    string
    Wajib
    Description

    Jenis operasi yang akan dilakukan. Nilai yang tersedia: change_fps, fbx2usdz, extract_armature.

  • Name
    fps
    Type
    integer
    default 30
    Description

    Frame rate target. Hanya berlaku saat operation_type adalah change_fps. Nilai yang diizinkan: 24, 25, 30, 60.

Nilai Kembali

Properti result pada respons berisi id tugas dari tugas animasi yang baru dibuat.

Mode Kegagalan

  • Name
    400 - Bad Request
    Description

    Permintaan tidak dapat diterima. Penyebab umum:

    • Parameter hilang: rig_task_id tidak ada, atau tidak ada satupun dari action_id, action_ids, dan motion_task_id yang diberikan.
    • Parameter bertentangan: lebih dari satu dari action_id, action_ids, dan motion_task_id diberikan — parameter-parameter ini saling eksklusif.
    • Tugas rig tidak valid: rig_task_id tidak valid atau merujuk pada tugas yang gagal/tidak ada.
    • ID aksi tidak valid: action_id — atau salah satu entri dari action_ids — tidak sesuai dengan animasi yang valid.
    • Terlalu banyak aksi: action_ids berisi lebih dari 10 id.
    • Aksi duplikat: action_ids berisi id yang sama lebih dari sekali.
    • Tugas motion belum siap: tugas motion_task_id belum SUCCEEDED.
    • Rig tidak didukung: motion_task_id membutuhkan rig biped; rig quadruped ditolak.
  • Name
    401 - Unauthorized
    Description

    Autentikasi gagal. Silakan periksa kunci API Anda.

  • Name
    402 - Payment Required
    Description

    Kredit tidak cukup untuk melakukan tugas ini.

  • Name
    404 - Not Found
    Description

    Tugas rigging yang ditentukan oleh rig_task_id tidak ditemukan, tugas motion yang ditentukan oleh motion_task_id tidak ditemukan, atau klip motion telah kedaluwarsa (aset tugas sumber disimpan selama 3 hari).

  • Name
    429 - Too Many Requests
    Description

    Anda telah melampaui batas laju Anda.

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

Mengambil Tugas Animasi

Endpoint ini memungkinkan Anda mengambil tugas animasi berdasarkan id tugas yang valid. Lihat The Animation Task Object untuk melihat properti apa saja yang disertakan.

Parameter

  • Name
    id
    Type
    path
    Description

    Pengenal unik untuk tugas animasi yang akan diambil.

Returns

Respons berisi objek Animation Task. Periksa bagian The Animation Task Object untuk detailnya.

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

Menghapus Tugas Animasi

Endpoint ini menghapus secara permanen tugas animasi, termasuk semua model dan data yang terkait. Tindakan ini tidak dapat dibatalkan.

Parameter Path

  • Name
    id
    Type
    path
    Description

    ID dari tugas animasi yang akan dihapus.

Status Tugas

Tugas yang masih berstatus PENDING akan dihapus dan kredit yang digunakan pada saat pembuatan akan dikembalikan.

Tugas yang sudah berstatus IN_PROGRESS tidak dapat dihapus: permintaan akan ditolak dengan 409 Conflict dan tugas tetap berjalan. Kredit untuk tugas yang sudah mulai dikerjakan oleh worker tidak dapat dikembalikan, sehingga menghapusnya di tengah proses akan membuat Anda kehilangan kredit sekaligus hasilnya. Tunggu hingga statusnya mencapai SUCCEEDED, FAILED, atau CANCELED, lalu hapus.

Tugas dalam status akhir (SUCCEEDED, FAILED, atau CANCELED) akan dihapus tanpa pengembalian kredit.

Returns

Mengembalikan 200 OK jika berhasil, atau 409 Conflict ketika tugas berstatus 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

Mengembalikan daftar tugas Animasi milik pemanggil yang telah dipaginasi, dengan urutan terbaru lebih dulu. Paginasi standar melalui page_num dan page_size.

Perhatikan bahwa tugas yang dibuat melalui API dikelola melalui API — tugas tersebut tidak muncul di My Assets pada aplikasi web. Gunakan endpoint ini untuk menemukan tugas yang ID-nya sudah tidak Anda miliki lagi.

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

Streaming Task Animasi

Endpoint ini melakukan streaming pembaruan secara real-time untuk task Animasi menggunakan Server-Sent Events (SSE).

Parameter

  • Name
    id
    Type
    path
    Description

    Pengidentifikasi unik untuk task Animasi yang akan di-streaming.

Returns

Mengembalikan stream dari The Animation Task Objects sebagai Server-Sent Events.

Untuk task dengan status PENDING atau IN_PROGRESS, stream respons hanya akan menyertakan field progress dan status yang diperlukan.

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
}

The Animation Task Object

Objek Animation Task merepresentasikan unit kerja untuk menerapkan animasi pada karakter yang telah di-rig.

Properties

  • Name
    id
    Type
    string
    Description

    Pengenal unik untuk task ini.

  • Name
    type
    Type
    string
    Description

    Jenis task Animasi. Nilainya adalah animate.

  • Name
    status
    Type
    string
    Description

    Status task. Nilai yang mungkin: PENDING, IN_PROGRESS, SUCCEEDED, FAILED, CANCELED.

  • Name
    progress
    Type
    integer
    Description

    Progress task (0-100).

  • Name
    created_at
    Type
    timestamp
    Description

    Stempel waktu (milidetik sejak epoch) saat task dibuat.

  • Name
    started_at
    Type
    timestamp
    Description

    Stempel waktu (milidetik sejak epoch) saat task mulai diproses. 0 jika belum dimulai.

  • Name
    finished_at
    Type
    timestamp
    Description

    Stempel waktu (milidetik sejak epoch) saat task selesai. 0 jika belum selesai.

  • Name
    expires_at
    Type
    timestamp
    Description

    Stempel waktu (milidetik sejak epoch) saat aset hasil task kedaluwarsa.

  • Name
    task_error
    Type
    object
    Description

    Detail kesalahan untuk task yang gagal. Lihat Kesalahan untuk referensi lengkap objek task_error.

  • Name
    consumed_credits
    Type
    integer
    Description

    Jumlah kredit yang dikonsumsi oleh task ini. Muncul saat status task adalah PENDING, IN_PROGRESS, atau SUCCEEDED. Mengembalikan 0 untuk task FAILED (kredit dikembalikan jika gagal).

  • Name
    result
    Type
    object
    Description

    Berisi URL animasi hasil jika task SUCCEEDED.

    • Name
      animation_glb_url
      Type
      string
      Description
      URL yang dapat diunduh untuk animasi dalam format GLB. Untuk task yang dibuat dengan action_ids, file tunggal ini berisi setiap action yang diminta sebagai klip terpisah.
    • Name
      animation_fbx_url
      Type
      string
      Description
      URL yang dapat diunduh untuk animasi dalam format FBX. Untuk task yang dibuat dengan action_ids, file tunggal ini berisi setiap action yang diminta sebagai klip terpisah.
    • Name
      processed_usdz_url
      Type
      string
      Description
      URL yang dapat diunduh untuk animasi yang telah diproses dalam format USDZ.
    • Name
      processed_armature_fbx_url
      Type
      string
      Description
      URL yang dapat diunduh untuk armature yang telah diproses dalam format FBX.
    • Name
      processed_animation_fps_fbx_url
      Type
      string
      Description
      URL yang dapat diunduh untuk animasi dengan FPS yang telah diubah dalam format FBX (misalnya, jika operasi change_fps digunakan).
  • Name
    preceding_tasks
    Type
    integer
    Description

    Jumlah task sebelumnya dalam antrean. Hanya bermakna jika status adalah 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

Mengembalikan setiap animasi dalam pustaka, diurutkan berdasarkan action_id. Respons adalah daftar lengkap, bukan sebuah halaman, sehingga satu panggilan sudah cukup untuk mengisi pemilih aksi. Filter mempersempit hasil; hilangkan semuanya untuk mengambil semua data.

Untuk menelusuri katalog yang sama secara visual, dengan pratinjau animasi untuk setiap aksi, lihat referensi Pustaka animasi.

Endpoint ini gratis — tidak menggunakan kredit.

Parameter

  • Name
    search
    Type
    string
    Description

    Pencocokan substring yang tidak peka huruf besar/kecil pada name atau key. Dicocokkan secara harfiah, sehingga % dan _ adalah karakter biasa, bukan wildcard.

  • Name
    category
    Type
    string
    Description

    Kecocokan persis pada category.

    Nilai yang tersedia:

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

    Kecocokan persis pada sub_category. Dapat diterima secara mandiri — nama sub-kategori tidak unik lintas kategori (Transitioning muncul di bawah Fighting maupun DailyActions), sehingga tanpa category filter ini cocok dengan sub-kategori tersebut di mana pun ia muncul.

  • Name
    action_ids
    Type
    string
    Description

    Daftar nilai action_id yang dipisahkan koma untuk dikembalikan, guna mengidentifikasi id tertentu alih-alih menelusuri. Menerima maksimal 200 id. Id yang tidak dimiliki animasi apa pun sekadar tidak muncul dalam respons, sehingga Anda juga dapat menggunakan ini untuk memeriksa apakah id yang telah Anda simpan masih tersedia.

Menggabungkan filter

Filter diterapkan secara bersamaan — masing-masing mempersempit hasil lebih lanjut, sehingga sebuah animasi hanya dikembalikan jika memenuhi semuanya. Dalam satu filter, beberapa nilai cocok dengan salah satunya: search cocok dengan name atau key, dan action_ids cocok dengan id mana pun dalam daftar.

Artinya, kombinasi yang tidak memiliki kecocokan akan mengembalikan array kosong, bukan sebuah error. Aksi 92 adalah "Double Combo Attack", sebuah animasi Fighting:

  • ?action_ids=92&category=Fighting mengembalikan aksi 92.
  • ?action_ids=92&category=Dancing mengembalikan [] — ini bukan animasi Dancing.
  • ?action_ids=92&search=walk mengembalikan [] — namanya tidak cocok dengan walk.

Untuk mengambil animasi tertentu terlepas dari kategorinya, kirimkan action_ids secara mandiri.

Pengembalian

Mengembalikan daftar Objek Animasi.

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"
  }
]

Objek Animasi

  • Name
    action_id
    Type
    integer
    Description

    Nilai yang dikirim sebagai action_id saat membuat tugas animasi. Unik dan stabil, tetapi tidak berurutan — Animasi yang sudah tidak digunakan meninggalkan celah dalam penomoran, jadi jangan pernah menganggap rentang id tertentu valid.

  • Name
    name
    Type
    string
    Description

    Label yang mudah dibaca manusia, untuk ditampilkan. Tidak unik: beberapa Animasi berbagi nama yang sama dengan varian yang berbeda, jadi gunakan action_id atau key sebagai identitas.

  • Name
    key
    Type
    string
    Description

    Slug unik dan stabil untuk Animasi tersebut. Gunakan ini jika Anda membutuhkan pengidentifikasi non-numerik untuk dijadikan kunci penyimpanan Anda sendiri.

  • Name
    category
    Type
    string
    Description

    Pengelompokan tingkat atas, misalnya Fighting.

  • Name
    sub_category
    Type
    string
    Description

    Pengelompokan dalam kategori tersebut, misalnya AttackingwithWeapon.

  • Name
    preview_url
    Type
    string
    Description

    URL dari GIF beranimasi yang menampilkan pratinjau aksi tersebut, cocok untuk dirender langsung di pemilih (picker) Anda sendiri.

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"
}