[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-nav-en":3,"docs-en-models\u002Fvideo\u002Fliveness-verification":180},[4,26,43,105,155,172,176],{"title":5,"path":6,"stem":7,"children":8,"page":25},"Getting Started","\u002Fgetting-started","1.getting-started",[9,13,17,21],{"title":10,"path":11,"stem":12},"Your First SilvaMux API Call","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F1.quick-start",{"title":14,"path":15,"stem":16},"Model Selection","\u002Fgetting-started\u002Fmodel-selection","1.getting-started\u002F2.model-selection",{"title":18,"path":19,"stem":20},"Rate Limits","\u002Fgetting-started\u002Frate-limits","1.getting-started\u002F3.rate-limits",{"title":22,"path":23,"stem":24},"FAQ","\u002Fgetting-started\u002Ffaq","1.getting-started\u002F4.faq",false,{"title":27,"path":28,"stem":29,"children":30,"page":25},"Billing","\u002Fbilling","2.billing",[31,35,39],{"title":32,"path":33,"stem":34},"Billing Overview","\u002Fbilling\u002Foverview","2.billing\u002F1.overview",{"title":36,"path":37,"stem":38},"Online Top-up","\u002Fbilling\u002Frecharge","2.billing\u002F2.recharge",{"title":40,"path":41,"stem":42},"Bills, Usage & Exports","\u002Fbilling\u002Fusage-export","2.billing\u002F3.usage-export",{"title":44,"path":45,"stem":46,"children":47,"page":25},"Coding Plan","\u002Fcoding-plan","3.coding-plan",[48,52,56,60,67,102],{"title":49,"path":50,"stem":51},"Coding Plan Overview","\u002Fcoding-plan\u002Foverview","3.coding-plan\u002F1.overview",{"title":53,"path":54,"stem":55},"Quick Start","\u002Fcoding-plan\u002Fquick-start","3.coding-plan\u002F2.quick-start",{"title":57,"path":58,"stem":59},"Usage Notes","\u002Fcoding-plan\u002Fusage-notes","3.coding-plan\u002F3.usage-notes",{"title":61,"path":62,"stem":63,"children":64},"Personal","\u002Fcoding-plan\u002Fpersonal","3.coding-plan\u002F4.personal\u002Findex",[65],{"title":66,"path":62,"stem":63},"Pricing & Benefits",{"title":68,"path":69,"stem":70,"children":71,"page":-1},"Developer Guide","\u002Fcoding-plan\u002Fguide","3.coding-plan\u002F5.guide\u002Findex",[72,74,78,82,86,90,94,98],{"title":73,"path":69,"stem":70},"Endpoints & Protocols",{"title":75,"path":76,"stem":77},"Claude Code","\u002Fcoding-plan\u002Fguide\u002Fclaude-code","3.coding-plan\u002F5.guide\u002F1.claude-code",{"title":79,"path":80,"stem":81},"OpenCode","\u002Fcoding-plan\u002Fguide\u002Fopencode","3.coding-plan\u002F5.guide\u002F2.opencode",{"title":83,"path":84,"stem":85},"Cursor","\u002Fcoding-plan\u002Fguide\u002Fcursor","3.coding-plan\u002F5.guide\u002F3.cursor",{"title":87,"path":88,"stem":89},"Codex","\u002Fcoding-plan\u002Fguide\u002Fcodex","3.coding-plan\u002F5.guide\u002F4.codex",{"title":91,"path":92,"stem":93},"ZCode","\u002Fcoding-plan\u002Fguide\u002Fzcode","3.coding-plan\u002F5.guide\u002F5.zcode",{"title":95,"path":96,"stem":97},"TRAE","\u002Fcoding-plan\u002Fguide\u002Ftrae","3.coding-plan\u002F5.guide\u002F6.trae",{"title":99,"path":100,"stem":101},"CodeBuddy","\u002Fcoding-plan\u002Fguide\u002Fcodebuddy","3.coding-plan\u002F5.guide\u002F7.codebuddy",{"title":22,"path":103,"stem":104},"\u002Fcoding-plan\u002Ffaq","3.coding-plan\u002F6.faq",{"title":106,"path":107,"stem":108,"children":109,"page":25},"Model APIs","\u002Fmodels","4.models",[110,143],{"title":111,"path":112,"stem":113,"children":114,"page":25},"Text Generation Model API","\u002Fmodels\u002Fchat","4.models\u002F1.chat",[115,119,123,127,131,135,139],{"title":116,"path":117,"stem":118},"Overview","\u002Fmodels\u002Fchat\u002Foverview","4.models\u002F1.chat\u002F1.overview",{"title":120,"path":121,"stem":122},"OpenAI Compatible API","\u002Fmodels\u002Fchat\u002Fopenai","4.models\u002F1.chat\u002F2.openai",{"title":124,"path":125,"stem":126},"Anthropic Compatible","\u002Fmodels\u002Fchat\u002Fanthropic","4.models\u002F1.chat\u002F3.anthropic",{"title":128,"path":129,"stem":130},"Volcengine Compatible","\u002Fmodels\u002Fchat\u002Fvolcengine","4.models\u002F1.chat\u002F4.volcengine",{"title":132,"path":133,"stem":134},"Zhipu Compatible","\u002Fmodels\u002Fchat\u002Fzhipu","4.models\u002F1.chat\u002F5.zhipu",{"title":136,"path":137,"stem":138},"SilvaMux Unified Entry","\u002Fmodels\u002Fchat\u002Funified","4.models\u002F1.chat\u002F6.unified",{"title":140,"path":141,"stem":142},"Multimodal Input","\u002Fmodels\u002Fchat\u002Fmultimodal","4.models\u002F1.chat\u002F7.multimodal",{"title":144,"path":145,"stem":146,"children":147,"page":25},"Image Generation Model API","\u002Fmodels\u002Fimages","4.models\u002F2.images",[148,151],{"title":116,"path":149,"stem":150},"\u002Fmodels\u002Fimages\u002Foverview","4.models\u002F2.images\u002F1.overview",{"title":152,"path":153,"stem":154},"Image Generation API","\u002Fmodels\u002Fimages\u002Fgeneration","4.models\u002F2.images\u002F2.generation",{"title":156,"path":157,"stem":158,"children":159,"page":25},"Usage & Balance","\u002Fusage-and-balance","5.usage-and-balance",[160,164,168],{"title":161,"path":162,"stem":163},"Query Balance","\u002Fusage-and-balance\u002Fbalance","5.usage-and-balance\u002F1.balance",{"title":165,"path":166,"stem":167},"Query Usage","\u002Fusage-and-balance\u002Fusage","5.usage-and-balance\u002F2.usage",{"title":169,"path":170,"stem":171},"Query Request Usage","\u002Fusage-and-balance\u002Frequest-usage","5.usage-and-balance\u002F3.request-usage",{"title":173,"path":174,"stem":175},"Error Codes","\u002Ferrors","6.errors",{"title":177,"path":178,"stem":179},"Getting Started with SilvaMux","\u002F","index",{"id":181,"title":182,"body":183,"description":1706,"extension":1707,"meta":1708,"navigation":25,"path":1709,"rawbody":1710,"requiredFlags":1711,"seo":1712,"stem":1713,"__hash__":1714},"docs_en\u002F4.models\u002F3.video\u002F4.liveness-verification.md","Liveness Verification",{"type":184,"value":185,"toc":1689},"minimark",[186,190,204,214,228,233,258,336,340,478,482,488,491,542,592,613,616,743,781,786,790,799,835,841,845,851,853,878,900,902,978,988,1028,1032,1038,1040,1110,1168,1170,1238,1255,1259,1264,1270,1276,1296,1300,1306,1349,1353,1359,1364,1368,1381,1483,1500,1503,1612,1616,1660,1664,1685],[187,188,182],"h1",{"id":189},"liveness-verification",[191,192,193,194,198,199,203],"p",{},"SilvaMux provides the same \"real-person verification\" face liveness API as Volcengine. Customers can launch the Volcengine H5 liveness page, and after the user verifies in person, their front-face asset is ingested as a ",[195,196,197],"strong",{},"real-person asset (LivenessFace)",", then referenced in video generation via ",[200,201,202],"code",{},"asset:\u002F\u002F\u003CId>"," — closing the loop of a private real-person likeness library:",[205,206,211],"pre",{"className":207,"code":209,"language":210},[208],"language-text","Launch liveness H5 → user completes verification → callback → get real-person asset group → upload real-person assets → generate video\n","text",[200,212,209],{"__ignoreMap":213},"",[215,216,217],"blockquote",{},[191,218,219,220,227],{},"The API behaves the same as Volcengine's \"manage private asset libraries\" (",[221,222,226],"a",{"href":223,"rel":224},"https:\u002F\u002Fdocs.volcengine.com\u002Fdocs\u002F82379\u002F2333587?lang=zh",[225],"nofollow","Launch real-person verification H5 (CreateVisualValidateSession)","); only the endpoint points at this platform, and authentication uses platform-issued AK\u002FSK.",[229,230,232],"h2",{"id":231},"preparation","Preparation",[234,235,236,244,255],"ol",{},[237,238,239,240,243],"li",{},"Console → Credentials → create a ",[195,241,242],{},"Volcengine compatible (AK\u002FSK)"," credential; the AK and SK are returned once (the SK is visible only then).",[237,245,246,247,250,251,254],{},"AK\u002FSK are bound to the organization; the project is selected via the ",[200,248,249],{},"ProjectName"," field (empty or ",[200,252,253],{},"default"," uses the default project).",[237,256,257],{},"Use the official Volcengine SDK or a custom V4 signature, sending requests to this platform:",[259,260,261,274],"table",{},[262,263,264],"thead",{},[265,266,267,271],"tr",{},[268,269,270],"th",{},"Item",[268,272,273],{},"Value",[275,276,277,288,298,308,318,326],"tbody",{},[265,278,279,283],{},[280,281,282],"td",{},"Endpoint",[280,284,285],{},[200,286,287],{},"https:\u002F\u002Fwww.silvamux.com\u002Fapi\u002Fark",[265,289,290,293],{},[280,291,292],{},"Region",[280,294,295],{},[200,296,297],{},"cn-beijing",[265,299,300,303],{},[280,301,302],{},"Service",[280,304,305],{},[200,306,307],{},"ark",[265,309,310,313],{},[280,311,312],{},"Version",[280,314,315],{},[200,316,317],{},"2024-01-01",[265,319,320,323],{},[280,321,322],{},"Authentication",[280,324,325],{},"Volcengine V4 signing with platform-issued AK\u002FSK",[265,327,328,331],{},[280,329,330],{},"Invocation",[280,332,333],{},[200,334,335],{},"POST \u002Fapi\u002Fark?Action=\u003CAction>&Version=2024-01-01",[229,337,339],{"id":338},"overall-flow","Overall Flow",[259,341,342,358],{},[262,343,344],{},[265,345,346,349,352,355],{},[268,347,348],{},"Step",[268,350,351],{},"Action",[268,353,354],{},"API",[268,356,357],{},"Result",[275,359,360,383,407,427,458],{},[265,361,362,365,368,373],{},[280,363,364],{},"①",[280,366,367],{},"Start verification",[280,369,370],{},[200,371,372],{},"CreateVisualValidateSession",[280,374,375,378,379,382],{},[200,376,377],{},"H5Link"," + ",[200,380,381],{},"BytedToken"," (session id)",[265,384,385,388,391,394],{},[280,386,387],{},"②",[280,389,390],{},"User opens the H5 and completes liveness actions",[280,392,393],{},"browser redirect, platform callback",[280,395,396,397,400,401,378,404],{},"auto-redirects to your ",[200,398,399],{},"CallbackURL"," with ",[200,402,403],{},"bytedToken",[200,405,406],{},"resultCode",[265,408,409,412,415,420],{},[280,410,411],{},"③",[280,413,414],{},"Confirm the result and get the asset group",[280,416,417],{},[200,418,419],{},"GetVisualValidateResult",[280,421,422,423,426],{},"creates and returns ",[200,424,425],{},"GroupId"," (a LivenessFace real-person asset group, one-time)",[265,428,429,432,435,444],{},[280,430,431],{},"④",[280,433,434],{},"Upload real-person assets",[280,436,437,440,441,443],{},[200,438,439],{},"CreateAsset"," (targeting ③'s ",[200,442,425],{},")",[280,445,446,447,450,451,454,455],{},"returns the real upstream asset ",[200,448,449],{},"Id","; poll ",[200,452,453],{},"GetAsset"," until ",[200,456,457],{},"Active",[265,459,460,463,466,469],{},[280,461,462],{},"⑤",[280,464,465],{},"Generate video",[280,467,468],{},"video generation API",[280,470,471,472,474,475],{},"reference via ",[200,473,202],{}," in ",[200,476,477],{},"content",[229,479,481],{"id":480},"create-a-verification-session-createvisualvalidatesession","① Create a Verification Session — CreateVisualValidateSession",[205,483,486],{"className":484,"code":485,"language":210},[208],"POST \u002Fapi\u002Fark?Action=CreateVisualValidateSession&Version=2024-01-01\n",[200,487,485],{"__ignoreMap":213},[191,489,490],{},"Request body:",[259,492,493,506],{},[262,494,495],{},[265,496,497,500,503],{},[268,498,499],{},"Field",[268,501,502],{},"Required",[268,504,505],{},"Description",[275,507,508,527],{},[265,509,510,514,517],{},[280,511,512],{},[200,513,399],{},[280,515,516],{},"Yes",[280,518,519,520,178,523,526],{},"Callback URL that receives the result after verification; must be an ",[200,521,522],{},"http",[200,524,525],{},"https"," URL",[265,528,529,533,536],{},[280,530,531],{},[200,532,249],{},[280,534,535],{},"No",[280,537,538,539,541],{},"Project name; empty or ",[200,540,253],{}," uses the default project",[205,543,547],{"className":544,"code":545,"language":546,"meta":213,"style":213},"language-json shiki shiki-themes github-light github-dark","{\n  \"CallbackURL\": \"https:\u002F\u002Fyour-host.example\u002Fcallback\",\n  \"ProjectName\": \"default\"\n}\n","json",[200,548,549,558,575,586],{"__ignoreMap":213},[550,551,554],"span",{"class":552,"line":553},"line",1,[550,555,557],{"class":556},"sVt8B","{\n",[550,559,561,565,568,572],{"class":552,"line":560},2,[550,562,564],{"class":563},"sj4cs","  \"CallbackURL\"",[550,566,567],{"class":556},": ",[550,569,571],{"class":570},"sZZnC","\"https:\u002F\u002Fyour-host.example\u002Fcallback\"",[550,573,574],{"class":556},",\n",[550,576,578,581,583],{"class":552,"line":577},3,[550,579,580],{"class":563},"  \"ProjectName\"",[550,582,567],{"class":556},[550,584,585],{"class":570},"\"default\"\n",[550,587,589],{"class":552,"line":588},4,[550,590,591],{"class":556},"}\n",[215,593,594],{},[191,595,596,597,600,601,600,604,607,608,612],{},"The request is signed with platform-issued AK\u002FSK using Volcengine V4 signing (",[200,598,599],{},"Service=ark",", ",[200,602,603],{},"Region=cn-beijing",[200,605,606],{},"Version=2024-01-01","); see the integration notes in ",[221,609,611],{"href":610},"\u002Fen\u002Fdocs\u002Fmodels\u002Fvideo\u002Fassets","Asset Management"," for signing details.",[191,614,615],{},"Response:",[205,617,619],{"className":544,"code":618,"language":546,"meta":213,"style":213},"{\n  \"ResponseMetadata\": {\n    \"RequestId\": \"3f2f8b4d1a6e4c5b9a7d0e2f1c3b4a5d\",\n    \"Action\": \"CreateVisualValidateSession\",\n    \"Version\": \"2024-01-01\",\n    \"Service\": \"ark\",\n    \"Region\": \"cn-beijing\"\n  },\n  \"Result\": {\n    \"H5Link\": \"https:\u002F\u002F... (the Volcengine H5 liveness page)\",\n    \"BytedToken\": \"VVS-01JXXXXXXXXXXXXXX\"\n  }\n}\n",[200,620,621,625,633,645,657,670,683,694,700,708,721,732,738],{"__ignoreMap":213},[550,622,623],{"class":552,"line":553},[550,624,557],{"class":556},[550,626,627,630],{"class":552,"line":560},[550,628,629],{"class":563},"  \"ResponseMetadata\"",[550,631,632],{"class":556},": {\n",[550,634,635,638,640,643],{"class":552,"line":577},[550,636,637],{"class":563},"    \"RequestId\"",[550,639,567],{"class":556},[550,641,642],{"class":570},"\"3f2f8b4d1a6e4c5b9a7d0e2f1c3b4a5d\"",[550,644,574],{"class":556},[550,646,647,650,652,655],{"class":552,"line":588},[550,648,649],{"class":563},"    \"Action\"",[550,651,567],{"class":556},[550,653,654],{"class":570},"\"CreateVisualValidateSession\"",[550,656,574],{"class":556},[550,658,660,663,665,668],{"class":552,"line":659},5,[550,661,662],{"class":563},"    \"Version\"",[550,664,567],{"class":556},[550,666,667],{"class":570},"\"2024-01-01\"",[550,669,574],{"class":556},[550,671,673,676,678,681],{"class":552,"line":672},6,[550,674,675],{"class":563},"    \"Service\"",[550,677,567],{"class":556},[550,679,680],{"class":570},"\"ark\"",[550,682,574],{"class":556},[550,684,686,689,691],{"class":552,"line":685},7,[550,687,688],{"class":563},"    \"Region\"",[550,690,567],{"class":556},[550,692,693],{"class":570},"\"cn-beijing\"\n",[550,695,697],{"class":552,"line":696},8,[550,698,699],{"class":556},"  },\n",[550,701,703,706],{"class":552,"line":702},9,[550,704,705],{"class":563},"  \"Result\"",[550,707,632],{"class":556},[550,709,711,714,716,719],{"class":552,"line":710},10,[550,712,713],{"class":563},"    \"H5Link\"",[550,715,567],{"class":556},[550,717,718],{"class":570},"\"https:\u002F\u002F... (the Volcengine H5 liveness page)\"",[550,720,574],{"class":556},[550,722,724,727,729],{"class":552,"line":723},11,[550,725,726],{"class":563},"    \"BytedToken\"",[550,728,567],{"class":556},[550,730,731],{"class":570},"\"VVS-01JXXXXXXXXXXXXXX\"\n",[550,733,735],{"class":552,"line":734},12,[550,736,737],{"class":556},"  }\n",[550,739,741],{"class":552,"line":740},13,[550,742,591],{"class":556},[259,744,745,753],{},[262,746,747],{},[265,748,749,751],{},[268,750,499],{},[268,752,505],{},[275,754,755,764],{},[265,756,757,761],{},[280,758,759],{},[200,760,377],{},[280,762,763],{},"The liveness page for the user to open in a browser (mobile or desktop)",[265,765,766,770],{},[280,767,768],{},[200,769,381],{},[280,771,772,775,776,778,779],{},[195,773,774],{},"Platform session id",", used later as ",[200,777,381],{}," by ",[200,780,419],{},[215,782,783],{},[191,784,785],{},"The H5 link is single-use and the session is valid for 30 minutes.",[229,787,789],{"id":788},"verification-callback","② Verification Callback",[191,791,792,793,795,796,798],{},"After the user completes liveness actions (blinking, head turns, etc.) on ",[200,794,377],{},", Volcengine redirects their browser to the platform callback; the platform records the result, then serves an HTML page that automatically forwards the browser to your ",[200,797,399],{}," with these parameters appended:",[259,800,801,810],{},[262,802,803],{},[265,804,805,808],{},[268,806,807],{},"Parameter",[268,809,505],{},[275,811,812,823],{},[265,813,814,818],{},[280,815,816],{},[200,817,403],{},[280,819,820,821,443],{},"Platform session id (same as ①'s ",[200,822,381],{},[265,824,825,829],{},[280,826,827],{},[200,828,406],{},[280,830,831,834],{},[200,832,833],{},"10000"," means verification passed",[191,836,837,838,840],{},"Your callback service can show the \"verification result\" and then call ",[200,839,419],{}," to formally obtain the asset group.",[229,842,844],{"id":843},"get-the-real-person-asset-group-getvisualvalidateresult","③ Get the Real-Person Asset Group — GetVisualValidateResult",[205,846,849],{"className":847,"code":848,"language":210},[208],"POST \u002Fapi\u002Fark?Action=GetVisualValidateResult&Version=2024-01-01\n",[200,850,848],{"__ignoreMap":213},[191,852,490],{},[259,854,855,865],{},[262,856,857],{},[265,858,859,861,863],{},[268,860,499],{},[268,862,502],{},[268,864,505],{},[275,866,867],{},[265,868,869,873,875],{},[280,870,871],{},[200,872,381],{},[280,874,516],{},[280,876,877],{},"The session id returned by ①",[205,879,881],{"className":544,"code":880,"language":546,"meta":213,"style":213},"{\n  \"BytedToken\": \"VVS-01JXXXXXXXXXXXXXX\"\n}\n",[200,882,883,887,896],{"__ignoreMap":213},[550,884,885],{"class":552,"line":553},[550,886,557],{"class":556},[550,888,889,892,894],{"class":552,"line":560},[550,890,891],{"class":563},"  \"BytedToken\"",[550,893,567],{"class":556},[550,895,731],{"class":570},[550,897,898],{"class":552,"line":577},[550,899,591],{"class":556},[191,901,615],{},[205,903,905],{"className":544,"code":904,"language":546,"meta":213,"style":213},"{\n  \"ResponseMetadata\": { \"Action\": \"GetVisualValidateResult\", \"Version\": \"2024-01-01\", \"Service\": \"ark\", \"Region\": \"cn-beijing\" },\n  \"Result\": { \"GroupId\": \"group-01JXXXXXXXXXXXXXX\" }\n}\n",[200,906,907,911,957,974],{"__ignoreMap":213},[550,908,909],{"class":552,"line":553},[550,910,557],{"class":556},[550,912,913,915,918,921,923,926,928,931,933,935,937,940,942,944,946,949,951,954],{"class":552,"line":560},[550,914,629],{"class":563},[550,916,917],{"class":556},": { ",[550,919,920],{"class":563},"\"Action\"",[550,922,567],{"class":556},[550,924,925],{"class":570},"\"GetVisualValidateResult\"",[550,927,600],{"class":556},[550,929,930],{"class":563},"\"Version\"",[550,932,567],{"class":556},[550,934,667],{"class":570},[550,936,600],{"class":556},[550,938,939],{"class":563},"\"Service\"",[550,941,567],{"class":556},[550,943,680],{"class":570},[550,945,600],{"class":556},[550,947,948],{"class":563},"\"Region\"",[550,950,567],{"class":556},[550,952,953],{"class":570},"\"cn-beijing\"",[550,955,956],{"class":556}," },\n",[550,958,959,961,963,966,968,971],{"class":552,"line":577},[550,960,705],{"class":563},[550,962,917],{"class":556},[550,964,965],{"class":563},"\"GroupId\"",[550,967,567],{"class":556},[550,969,970],{"class":570},"\"group-01JXXXXXXXXXXXXXX\"",[550,972,973],{"class":556}," }\n",[550,975,976],{"class":552,"line":588},[550,977,591],{"class":556},[191,979,980,981,984,985,987],{},"On success the platform creates and returns a ",[195,982,983],{},"LivenessFace real-person asset group"," (",[200,986,425],{},"); the group is backed by a real upstream real-person group whose id clients never need to know.",[259,989,990,999],{},[262,991,992],{},[265,993,994,997],{},[268,995,996],{},"Behavior",[268,998,505],{},[275,1000,1001,1009,1020],{},[265,1002,1003,1006],{},[280,1004,1005],{},"One-time",[280,1007,1008],{},"The session is destroyed on success and cannot be reused",[265,1010,1011,1014],{},[280,1012,1013],{},"Failure",[280,1015,1016,1017],{},"A missing, expired session or a callback that never arrived all return ",[200,1018,1019],{},"401 InvalidVisualValidate",[265,1021,1022,1025],{},[280,1023,1024],{},"Validity",[280,1026,1027],{},"30 minutes (counted from when the callback arrives)",[229,1029,1031],{"id":1030},"upload-real-person-assets-createasset","④ Upload Real-Person Assets — CreateAsset",[205,1033,1036],{"className":1034,"code":1035,"language":210},[208],"POST \u002Fapi\u002Fark?Action=CreateAsset&Version=2024-01-01\n",[200,1037,1035],{"__ignoreMap":213},[191,1039,490],{},[259,1041,1042,1052],{},[262,1043,1044],{},[265,1045,1046,1048,1050],{},[268,1047,499],{},[268,1049,502],{},[268,1051,505],{},[275,1053,1054,1065,1077,1098],{},[265,1055,1056,1060,1062],{},[280,1057,1058],{},[200,1059,425],{},[280,1061,516],{},[280,1063,1064],{},"The LivenessFace group id returned by ③",[265,1066,1067,1072,1074],{},[280,1068,1069],{},[200,1070,1071],{},"URL",[280,1073,516],{},[280,1075,1076],{},"Publicly accessible URL of the front-face asset",[265,1078,1079,1084,1086],{},[280,1080,1081],{},[200,1082,1083],{},"AssetType",[280,1085,516],{},[280,1087,1088,1091,1092,1091,1095],{},[200,1089,1090],{},"Image"," \u002F ",[200,1093,1094],{},"Video",[200,1096,1097],{},"Audio",[265,1099,1100,1105,1107],{},[280,1101,1102],{},[200,1103,1104],{},"Name",[280,1106,535],{},[280,1108,1109],{},"Asset name; derived from the URL when omitted",[205,1111,1113],{"className":544,"code":1112,"language":546,"meta":213,"style":213},"{\n  \"GroupId\": \"group-01JXXXXXXXXXXXXXX\",\n  \"URL\": \"https:\u002F\u002Fyour-host.example\u002Fface.jpg\",\n  \"AssetType\": \"Image\",\n  \"Name\": \"my-face\"\n}\n",[200,1114,1115,1119,1130,1142,1154,1164],{"__ignoreMap":213},[550,1116,1117],{"class":552,"line":553},[550,1118,557],{"class":556},[550,1120,1121,1124,1126,1128],{"class":552,"line":560},[550,1122,1123],{"class":563},"  \"GroupId\"",[550,1125,567],{"class":556},[550,1127,970],{"class":570},[550,1129,574],{"class":556},[550,1131,1132,1135,1137,1140],{"class":552,"line":577},[550,1133,1134],{"class":563},"  \"URL\"",[550,1136,567],{"class":556},[550,1138,1139],{"class":570},"\"https:\u002F\u002Fyour-host.example\u002Fface.jpg\"",[550,1141,574],{"class":556},[550,1143,1144,1147,1149,1152],{"class":552,"line":588},[550,1145,1146],{"class":563},"  \"AssetType\"",[550,1148,567],{"class":556},[550,1150,1151],{"class":570},"\"Image\"",[550,1153,574],{"class":556},[550,1155,1156,1159,1161],{"class":552,"line":659},[550,1157,1158],{"class":563},"  \"Name\"",[550,1160,567],{"class":556},[550,1162,1163],{"class":570},"\"my-face\"\n",[550,1165,1166],{"class":552,"line":672},[550,1167,591],{"class":556},[191,1169,615],{},[205,1171,1173],{"className":544,"code":1172,"language":546,"meta":213,"style":213},"{\n  \"ResponseMetadata\": { \"Action\": \"CreateAsset\", \"Version\": \"2024-01-01\", \"Service\": \"ark\", \"Region\": \"cn-beijing\" },\n  \"Result\": { \"Id\": \"\u003Creal upstream asset id>\" }\n}\n",[200,1174,1175,1179,1218,1234],{"__ignoreMap":213},[550,1176,1177],{"class":552,"line":553},[550,1178,557],{"class":556},[550,1180,1181,1183,1185,1187,1189,1192,1194,1196,1198,1200,1202,1204,1206,1208,1210,1212,1214,1216],{"class":552,"line":560},[550,1182,629],{"class":563},[550,1184,917],{"class":556},[550,1186,920],{"class":563},[550,1188,567],{"class":556},[550,1190,1191],{"class":570},"\"CreateAsset\"",[550,1193,600],{"class":556},[550,1195,930],{"class":563},[550,1197,567],{"class":556},[550,1199,667],{"class":570},[550,1201,600],{"class":556},[550,1203,939],{"class":563},[550,1205,567],{"class":556},[550,1207,680],{"class":570},[550,1209,600],{"class":556},[550,1211,948],{"class":563},[550,1213,567],{"class":556},[550,1215,953],{"class":570},[550,1217,956],{"class":556},[550,1219,1220,1222,1224,1227,1229,1232],{"class":552,"line":577},[550,1221,705],{"class":563},[550,1223,917],{"class":556},[550,1225,1226],{"class":563},"\"Id\"",[550,1228,567],{"class":556},[550,1230,1231],{"class":570},"\"\u003Creal upstream asset id>\"",[550,1233,973],{"class":556},[550,1235,1236],{"class":552,"line":588},[550,1237,591],{"class":556},[215,1239,1240],{},[191,1241,1242,1243,1246,1247,1250,1251,1254],{},"The platform routes the upstream group automatically ",[195,1244,1245],{},"by the target group's type",": pointing at a LivenessFace group uploads to the real-person upstream — you don't need to (and shouldn't) pass ",[200,1248,1249],{},"GroupType",". Pointing at a normal AIGC group ingests into the organization-level AIGC group; the two never mix.\nThe organization needs the AVGV2 capability, otherwise the call returns ",[200,1252,1253],{},"403 SubscriptionRequired",".",[229,1256,1258],{"id":1257},"manage-real-person-assets","⑤ Manage Real-Person Assets",[1260,1261,1263],"h3",{"id":1262},"query-status-getasset","Query Status — GetAsset",[205,1265,1268],{"className":1266,"code":1267,"language":210},[208],"POST \u002Fapi\u002Fark?Action=GetAsset&Version=2024-01-01\n",[200,1269,1267],{"__ignoreMap":213},[191,1271,1272,1273],{},"Request body: ",[200,1274,1275],{},"{ \"Id\": \"\u003Casset id>\", \"ProjectName\": \"default\" }",[191,1277,1278,567,1281,1091,1284,1091,1286,1289,1290,1292,1293,1295],{},[200,1279,1280],{},"Result.Status",[200,1282,1283],{},"Processing",[200,1285,457],{},[200,1287,1288],{},"Failed",". Assets usually start as ",[200,1291,1283],{},"; poll until ",[200,1294,457],{}," before using them in video generation.",[1260,1297,1299],{"id":1298},"list-assets-listassets","List Assets — ListAssets",[205,1301,1304],{"className":1302,"code":1303,"language":210},[208],"POST \u002Fapi\u002Fark?Action=ListAssets&Version=2024-01-01\n",[200,1305,1303],{"__ignoreMap":213},[191,1307,1308,1309,984,1312,600,1315,600,1317,600,1320,1322,1323,178,1326,1329,1330,178,1333,1336,1337,1340,1341,1344,1345,1348],{},"The request body supports ",[200,1310,1311],{},"Filter",[200,1313,1314],{},"GroupIds",[200,1316,1249],{},[200,1318,1319],{},"Statuses",[200,1321,1104],{},"), pagination (",[200,1324,1325],{},"PageNumber",[200,1327,1328],{},"PageSize",", max 100), and sorting (",[200,1331,1332],{},"SortBy",[200,1334,1335],{},"SortOrder",", e.g. ",[200,1338,1339],{},"SortBy=CreateTime&SortOrder=Desc","). Passing ",[200,1342,1343],{},"LivenessFace"," as ",[200,1346,1347],{},"Filter.GroupType"," lists only real-person assets.",[1260,1350,1352],{"id":1351},"delete-assets-deleteasset","Delete Assets — DeleteAsset",[205,1354,1357],{"className":1355,"code":1356,"language":210},[208],"POST \u002Fapi\u002Fark?Action=DeleteAsset&Version=2024-01-01\n",[200,1358,1356],{"__ignoreMap":213},[191,1360,1272,1361,1363],{},[200,1362,1275],{},". Deletes both the Volcengine upstream asset and the local record synchronously.",[229,1365,1367],{"id":1366},"referencing-in-video-generation","Referencing in Video Generation",[191,1369,1370,1371,1373,1374,1376,1377,1380],{},"Once a real-person asset is ",[200,1372,457],{},", reference it in video generation's ",[200,1375,477],{}," via ",[200,1378,1379],{},"asset:\u002F\u002F\u003Casset id>",":",[205,1382,1384],{"className":544,"code":1383,"language":546,"meta":213,"style":213},"{\n  \"model\": \"\u003CMODEL_CALL_NAME>\",\n  \"content\": [\n    {\"type\": \"image_url\", \"image_url\": {\"url\": \"asset:\u002F\u002F\u003Casset id>\"}, \"role\": \"reference_image\"},\n    {\"type\": \"text\", \"text\": \"Make the character in the frame dance\"}\n  ]\n}\n",[200,1385,1386,1390,1402,1410,1452,1474,1479],{"__ignoreMap":213},[550,1387,1388],{"class":552,"line":553},[550,1389,557],{"class":556},[550,1391,1392,1395,1397,1400],{"class":552,"line":560},[550,1393,1394],{"class":563},"  \"model\"",[550,1396,567],{"class":556},[550,1398,1399],{"class":570},"\"\u003CMODEL_CALL_NAME>\"",[550,1401,574],{"class":556},[550,1403,1404,1407],{"class":552,"line":577},[550,1405,1406],{"class":563},"  \"content\"",[550,1408,1409],{"class":556},": [\n",[550,1411,1412,1415,1418,1420,1423,1425,1427,1430,1433,1435,1438,1441,1444,1446,1449],{"class":552,"line":588},[550,1413,1414],{"class":556},"    {",[550,1416,1417],{"class":563},"\"type\"",[550,1419,567],{"class":556},[550,1421,1422],{"class":570},"\"image_url\"",[550,1424,600],{"class":556},[550,1426,1422],{"class":563},[550,1428,1429],{"class":556},": {",[550,1431,1432],{"class":563},"\"url\"",[550,1434,567],{"class":556},[550,1436,1437],{"class":570},"\"asset:\u002F\u002F\u003Casset id>\"",[550,1439,1440],{"class":556},"}, ",[550,1442,1443],{"class":563},"\"role\"",[550,1445,567],{"class":556},[550,1447,1448],{"class":570},"\"reference_image\"",[550,1450,1451],{"class":556},"},\n",[550,1453,1454,1456,1458,1460,1463,1465,1467,1469,1472],{"class":552,"line":659},[550,1455,1414],{"class":556},[550,1457,1417],{"class":563},[550,1459,567],{"class":556},[550,1461,1462],{"class":570},"\"text\"",[550,1464,600],{"class":556},[550,1466,1462],{"class":563},[550,1468,567],{"class":556},[550,1470,1471],{"class":570},"\"Make the character in the frame dance\"",[550,1473,591],{"class":556},[550,1475,1476],{"class":552,"line":672},[550,1477,1478],{"class":556},"  ]\n",[550,1480,1481],{"class":552,"line":685},[550,1482,591],{"class":556},[215,1484,1485],{},[191,1486,1487,1488,1491,1492,1495,1496,1254],{},"Video generation uses the platform's own API + API key (",[200,1489,1490],{},"sk_live_","), not AK\u002FSK signing; ",[200,1493,1494],{},"model"," uses the real call name from the Model Plaza. See ",[221,1497,1499],{"href":1498},"\u002Fen\u002Fdocs\u002Fmodels\u002Fvideo\u002Foverview","Video Generation API",[229,1501,173],{"id":1502},"error-codes",[259,1504,1505,1515],{},[262,1506,1507],{},[265,1508,1509,1512],{},[268,1510,1511],{},"Code",[268,1513,1514],{},"Meaning",[275,1516,1517,1527,1540,1558,1574,1584,1598],{},[265,1518,1519,1524],{},[280,1520,1521],{},[200,1522,1523],{},"InvalidSignature",[280,1525,1526],{},"Signature verification failed (wrong AK\u002FSK, tampered request, or excessive clock skew)",[265,1528,1529,1534],{},[280,1530,1531],{},[200,1532,1533],{},"InvalidVisualValidate",[280,1535,1536,1537,1539],{},"Verification session invalid, expired, or incomplete (all ",[200,1538,419],{}," failure paths, HTTP 401)",[265,1541,1542,1550],{},[280,1543,1544,1091,1547],{},[200,1545,1546],{},"MissingParameter.*",[200,1548,1549],{},"InvalidParameter.*",[280,1551,1552,1553,1555,1556,443],{},"Missing required field \u002F invalid field value (e.g. ",[200,1554,399],{}," not http(s), invalid ",[200,1557,1083],{},[265,1559,1560,1571],{},[280,1561,1562,1091,1565,1091,1568],{},[200,1563,1564],{},"NotFound.project",[200,1566,1567],{},"NotFound.group_id",[200,1569,1570],{},"NotFound.asset_id",[280,1572,1573],{},"Project \u002F asset group \u002F asset not found",[265,1575,1576,1581],{},[280,1577,1578],{},[200,1579,1580],{},"SubscriptionRequired",[280,1582,1583],{},"The organization has not enabled the capability (e.g. AVGV2)",[265,1585,1586,1591],{},[280,1587,1588],{},[200,1589,1590],{},"UpstreamError.Asset",[280,1592,1593,1594,1597],{},"Upstream asset service error; the upstream reason is passed through and ",[200,1595,1596],{},"X-Upstream-Request-Id"," is set on the response",[265,1599,1600,1605],{},[280,1601,1602],{},[200,1603,1604],{},"InternalError",[280,1606,1607,1608,1611],{},"Internal error; note the ",[200,1609,1610],{},"RequestId"," and contact support",[229,1613,1615],{"id":1614},"notes","Notes",[1617,1618,1619,1627,1637,1645,1651],"ul",{},[237,1620,1621,567,1624,1626],{},[195,1622,1623],{},"H5 is single-use with a 30-minute validity",[200,1625,377],{}," can be used once and the session lives 30 minutes; create a new session after timeout.",[237,1628,1629,1632,1633,1636],{},[195,1630,1631],{},"The callback URL must be publicly reachable",": Volcengine calls back via browser redirects; ",[200,1634,1635],{},"localhost","\u002Fintranet addresses do not work.",[237,1638,1639,1642,1643,1636],{},[195,1640,1641],{},"Asset URLs must be publicly accessible",": the platform fetches assets to ingest them; ",[200,1644,1635],{},[237,1646,1647,1650],{},[195,1648,1649],{},"Assets must be your own front face",": comply with applicable laws, regulations, and the platform's terms of service; do not upload other people's likenesses.",[237,1652,1653,1656,1657,1659],{},[195,1654,1655],{},"Assets are isolated per project",": upload and query must use the same ",[200,1658,249],{},"; video generation must use the project the asset belongs to.",[229,1661,1663],{"id":1662},"references","References",[1617,1665,1666,1674],{},[237,1667,1668,1669,1671,1672],{},"This platform's ",[221,1670,611],{"href":610}," and ",[221,1673,1499],{"href":1498},[237,1675,1676,1677,600,1680],{},"Volcengine official docs: ",[221,1678,226],{"href":223,"rel":1679},[225],[221,1681,1684],{"href":1682,"rel":1683},"https:\u002F\u002Fdocs.volcengine.com\u002Fdocs\u002F82379\u002F2333589?lang=zh",[225],"Private real-person likeness asset usage guide",[1686,1687,1688],"style",{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":213,"searchDepth":560,"depth":560,"links":1690},[1691,1692,1693,1694,1695,1696,1697,1702,1703,1704,1705],{"id":231,"depth":560,"text":232},{"id":338,"depth":560,"text":339},{"id":480,"depth":560,"text":481},{"id":788,"depth":560,"text":789},{"id":843,"depth":560,"text":844},{"id":1030,"depth":560,"text":1031},{"id":1257,"depth":560,"text":1258,"children":1698},[1699,1700,1701],{"id":1262,"depth":577,"text":1263},{"id":1298,"depth":577,"text":1299},{"id":1351,"depth":577,"text":1352},{"id":1366,"depth":560,"text":1367},{"id":1502,"depth":560,"text":173},{"id":1614,"depth":560,"text":1615},{"id":1662,"depth":560,"text":1663},"Build a private real-person likeness library via face liveness verification, then generate videos with real-person assets.","md",{},"\u002Fmodels\u002Fvideo\u002Fliveness-verification","---\ntitle: Liveness Verification\ndescription: Build a private real-person likeness library via face liveness verification, then generate videos with real-person assets.\nnavigation: false\n---\n\n# Liveness Verification\n\nSilvaMux provides the same \"real-person verification\" face liveness API as Volcengine. Customers can launch the Volcengine H5 liveness page, and after the user verifies in person, their front-face asset is ingested as a **real-person asset (LivenessFace)**, then referenced in video generation via `asset:\u002F\u002F\u003CId>` — closing the loop of a private real-person likeness library:\n\n```\nLaunch liveness H5 → user completes verification → callback → get real-person asset group → upload real-person assets → generate video\n```\n\n> The API behaves the same as Volcengine's \"manage private asset libraries\" ([Launch real-person verification H5 (CreateVisualValidateSession)](https:\u002F\u002Fdocs.volcengine.com\u002Fdocs\u002F82379\u002F2333587?lang=zh)); only the endpoint points at this platform, and authentication uses platform-issued AK\u002FSK.\n\n## Preparation\n\n1. Console → Credentials → create a **Volcengine compatible (AK\u002FSK)** credential; the AK and SK are returned once (the SK is visible only then).\n2. AK\u002FSK are bound to the organization; the project is selected via the `ProjectName` field (empty or `default` uses the default project).\n3. Use the official Volcengine SDK or a custom V4 signature, sending requests to this platform:\n\n| Item | Value |\n| --- | --- |\n| Endpoint | `https:\u002F\u002Fwww.silvamux.com\u002Fapi\u002Fark` |\n| Region | `cn-beijing` |\n| Service | `ark` |\n| Version | `2024-01-01` |\n| Authentication | Volcengine V4 signing with platform-issued AK\u002FSK |\n| Invocation | `POST \u002Fapi\u002Fark?Action=\u003CAction>&Version=2024-01-01` |\n\n## Overall Flow\n\n| Step | Action | API | Result |\n| --- | --- | --- | --- |\n| ① | Start verification | `CreateVisualValidateSession` | `H5Link` + `BytedToken` (session id) |\n| ② | User opens the H5 and completes liveness actions | browser redirect, platform callback | auto-redirects to your `CallbackURL` with `bytedToken` + `resultCode` |\n| ③ | Confirm the result and get the asset group | `GetVisualValidateResult` | creates and returns `GroupId` (a LivenessFace real-person asset group, one-time) |\n| ④ | Upload real-person assets | `CreateAsset` (targeting ③'s `GroupId`) | returns the real upstream asset `Id`; poll `GetAsset` until `Active` |\n| ⑤ | Generate video | video generation API | reference via `asset:\u002F\u002F\u003CId>` in `content` |\n\n## ① Create a Verification Session — CreateVisualValidateSession\n\n```\nPOST \u002Fapi\u002Fark?Action=CreateVisualValidateSession&Version=2024-01-01\n```\n\nRequest body:\n\n| Field | Required | Description |\n| --- | --- | --- |\n| `CallbackURL` | Yes | Callback URL that receives the result after verification; must be an `http`\u002F`https` URL |\n| `ProjectName` | No | Project name; empty or `default` uses the default project |\n\n```json\n{\n  \"CallbackURL\": \"https:\u002F\u002Fyour-host.example\u002Fcallback\",\n  \"ProjectName\": \"default\"\n}\n```\n\n> The request is signed with platform-issued AK\u002FSK using Volcengine V4 signing (`Service=ark`, `Region=cn-beijing`, `Version=2024-01-01`); see the integration notes in [Asset Management](\u002Fen\u002Fdocs\u002Fmodels\u002Fvideo\u002Fassets) for signing details.\n\nResponse:\n\n```json\n{\n  \"ResponseMetadata\": {\n    \"RequestId\": \"3f2f8b4d1a6e4c5b9a7d0e2f1c3b4a5d\",\n    \"Action\": \"CreateVisualValidateSession\",\n    \"Version\": \"2024-01-01\",\n    \"Service\": \"ark\",\n    \"Region\": \"cn-beijing\"\n  },\n  \"Result\": {\n    \"H5Link\": \"https:\u002F\u002F... (the Volcengine H5 liveness page)\",\n    \"BytedToken\": \"VVS-01JXXXXXXXXXXXXXX\"\n  }\n}\n```\n\n| Field | Description |\n| --- | --- |\n| `H5Link` | The liveness page for the user to open in a browser (mobile or desktop) |\n| `BytedToken` | **Platform session id**, used later as `BytedToken` by `GetVisualValidateResult` |\n\n> The H5 link is single-use and the session is valid for 30 minutes.\n\n## ② Verification Callback\n\nAfter the user completes liveness actions (blinking, head turns, etc.) on `H5Link`, Volcengine redirects their browser to the platform callback; the platform records the result, then serves an HTML page that automatically forwards the browser to your `CallbackURL` with these parameters appended:\n\n| Parameter | Description |\n| --- | --- |\n| `bytedToken` | Platform session id (same as ①'s `BytedToken`) |\n| `resultCode` | `10000` means verification passed |\n\nYour callback service can show the \"verification result\" and then call `GetVisualValidateResult` to formally obtain the asset group.\n\n## ③ Get the Real-Person Asset Group — GetVisualValidateResult\n\n```\nPOST \u002Fapi\u002Fark?Action=GetVisualValidateResult&Version=2024-01-01\n```\n\nRequest body:\n\n| Field | Required | Description |\n| --- | --- | --- |\n| `BytedToken` | Yes | The session id returned by ① |\n\n```json\n{\n  \"BytedToken\": \"VVS-01JXXXXXXXXXXXXXX\"\n}\n```\n\nResponse:\n\n```json\n{\n  \"ResponseMetadata\": { \"Action\": \"GetVisualValidateResult\", \"Version\": \"2024-01-01\", \"Service\": \"ark\", \"Region\": \"cn-beijing\" },\n  \"Result\": { \"GroupId\": \"group-01JXXXXXXXXXXXXXX\" }\n}\n```\n\nOn success the platform creates and returns a **LivenessFace real-person asset group** (`GroupId`); the group is backed by a real upstream real-person group whose id clients never need to know.\n\n| Behavior | Description |\n| --- | --- |\n| One-time | The session is destroyed on success and cannot be reused |\n| Failure | A missing, expired session or a callback that never arrived all return `401 InvalidVisualValidate` |\n| Validity | 30 minutes (counted from when the callback arrives) |\n\n## ④ Upload Real-Person Assets — CreateAsset\n\n```\nPOST \u002Fapi\u002Fark?Action=CreateAsset&Version=2024-01-01\n```\n\nRequest body:\n\n| Field | Required | Description |\n| --- | --- | --- |\n| `GroupId` | Yes | The LivenessFace group id returned by ③ |\n| `URL` | Yes | Publicly accessible URL of the front-face asset |\n| `AssetType` | Yes | `Image` \u002F `Video` \u002F `Audio` |\n| `Name` | No | Asset name; derived from the URL when omitted |\n\n```json\n{\n  \"GroupId\": \"group-01JXXXXXXXXXXXXXX\",\n  \"URL\": \"https:\u002F\u002Fyour-host.example\u002Fface.jpg\",\n  \"AssetType\": \"Image\",\n  \"Name\": \"my-face\"\n}\n```\n\nResponse:\n\n```json\n{\n  \"ResponseMetadata\": { \"Action\": \"CreateAsset\", \"Version\": \"2024-01-01\", \"Service\": \"ark\", \"Region\": \"cn-beijing\" },\n  \"Result\": { \"Id\": \"\u003Creal upstream asset id>\" }\n}\n```\n\n> The platform routes the upstream group automatically **by the target group's type**: pointing at a LivenessFace group uploads to the real-person upstream — you don't need to (and shouldn't) pass `GroupType`. Pointing at a normal AIGC group ingests into the organization-level AIGC group; the two never mix.\n> The organization needs the AVGV2 capability, otherwise the call returns `403 SubscriptionRequired`.\n\n## ⑤ Manage Real-Person Assets\n\n### Query Status — GetAsset\n\n```\nPOST \u002Fapi\u002Fark?Action=GetAsset&Version=2024-01-01\n```\n\nRequest body: `{ \"Id\": \"\u003Casset id>\", \"ProjectName\": \"default\" }`\n\n`Result.Status`: `Processing` \u002F `Active` \u002F `Failed`. Assets usually start as `Processing`; poll until `Active` before using them in video generation.\n\n### List Assets — ListAssets\n\n```\nPOST \u002Fapi\u002Fark?Action=ListAssets&Version=2024-01-01\n```\n\nThe request body supports `Filter` (`GroupIds`, `GroupType`, `Statuses`, `Name`), pagination (`PageNumber`\u002F`PageSize`, max 100), and sorting (`SortBy`\u002F`SortOrder`, e.g. `SortBy=CreateTime&SortOrder=Desc`). Passing `LivenessFace` as `Filter.GroupType` lists only real-person assets.\n\n### Delete Assets — DeleteAsset\n\n```\nPOST \u002Fapi\u002Fark?Action=DeleteAsset&Version=2024-01-01\n```\n\nRequest body: `{ \"Id\": \"\u003Casset id>\", \"ProjectName\": \"default\" }`. Deletes both the Volcengine upstream asset and the local record synchronously.\n\n## Referencing in Video Generation\n\nOnce a real-person asset is `Active`, reference it in video generation's `content` via `asset:\u002F\u002F\u003Casset id>`:\n\n```json\n{\n  \"model\": \"\u003CMODEL_CALL_NAME>\",\n  \"content\": [\n    {\"type\": \"image_url\", \"image_url\": {\"url\": \"asset:\u002F\u002F\u003Casset id>\"}, \"role\": \"reference_image\"},\n    {\"type\": \"text\", \"text\": \"Make the character in the frame dance\"}\n  ]\n}\n```\n\n> Video generation uses the platform's own API + API key (`sk_live_`), not AK\u002FSK signing; `model` uses the real call name from the Model Plaza. See [Video Generation API](\u002Fen\u002Fdocs\u002Fmodels\u002Fvideo\u002Foverview).\n\n## Error Codes\n\n| Code | Meaning |\n| --- | --- |\n| `InvalidSignature` | Signature verification failed (wrong AK\u002FSK, tampered request, or excessive clock skew) |\n| `InvalidVisualValidate` | Verification session invalid, expired, or incomplete (all `GetVisualValidateResult` failure paths, HTTP 401) |\n| `MissingParameter.*` \u002F `InvalidParameter.*` | Missing required field \u002F invalid field value (e.g. `CallbackURL` not http(s), invalid `AssetType`) |\n| `NotFound.project` \u002F `NotFound.group_id` \u002F `NotFound.asset_id` | Project \u002F asset group \u002F asset not found |\n| `SubscriptionRequired` | The organization has not enabled the capability (e.g. AVGV2) |\n| `UpstreamError.Asset` | Upstream asset service error; the upstream reason is passed through and `X-Upstream-Request-Id` is set on the response |\n| `InternalError` | Internal error; note the `RequestId` and contact support |\n\n## Notes\n\n- **H5 is single-use with a 30-minute validity**: `H5Link` can be used once and the session lives 30 minutes; create a new session after timeout.\n- **The callback URL must be publicly reachable**: Volcengine calls back via browser redirects; `localhost`\u002Fintranet addresses do not work.\n- **Asset URLs must be publicly accessible**: the platform fetches assets to ingest them; `localhost`\u002Fintranet addresses do not work.\n- **Assets must be your own front face**: comply with applicable laws, regulations, and the platform's terms of service; do not upload other people's likenesses.\n- **Assets are isolated per project**: upload and query must use the same `ProjectName`; video generation must use the project the asset belongs to.\n\n## References\n\n- This platform's [Asset Management](\u002Fen\u002Fdocs\u002Fmodels\u002Fvideo\u002Fassets) and [Video Generation API](\u002Fen\u002Fdocs\u002Fmodels\u002Fvideo\u002Foverview)\n- Volcengine official docs: [Launch real-person verification H5 (CreateVisualValidateSession)](https:\u002F\u002Fdocs.volcengine.com\u002Fdocs\u002F82379\u002F2333587?lang=zh), [Private real-person likeness asset usage guide](https:\u002F\u002Fdocs.volcengine.com\u002Fdocs\u002F82379\u002F2333589?lang=zh)\n",[],{"title":182,"description":1706},"4.models\u002F3.video\u002F4.liveness-verification","Wm1kNpI8s6GLZfeqelkoKdkNQyFYHXAIaHWjMQxH_94"]