## Basic tool info Model name: wiro/panini-card Model description: Turn a selfie into a Panini-style player card video. Enter name, height, weight, and birth date, then choose a country card preset. Model cover: https://cdn.wiro.ai/uploads/models/wiro-panini-card-cover.mp4 Model categories: - tool - nogpu-pipeline - image-to-video - wiroEntertainment - quick-showcase - wiro-app Run Task Endpoint (POST): https://api.wiro.ai/v1/Run/wiro/panini-card Get Task Detail Endpoint (POST): https://api.wiro.ai/v1/Task/Detail ## Model Inputs: - name: inputImage label: Input Image help: Required: Your selfie photo type: combinefileinput default: panini-card-inputsample-2.jpg - name: prompt label: Caption help: Name;Height;Weight;Date of Birth separated by ; (e.g. jane doe;1.60;50;5.5.1955) type: textarea default: jane doe;1.60;50;5.5.1955 - name: effectType label: Effect Type help: Required type: selectwithcover default: panini-card-algeria options: - value: "panini-card-algeria" label: Algeria cover: panini-card-algeria.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-australia" label: Australia cover: panini-card-australia.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-austria" label: Austria cover: panini-card-austria.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-belgium" label: Belgium cover: panini-card-belgium.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-bosnia-herzegovina" label: Bosnia and Herzegovina cover: panini-card-bosnia-herzegovina.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-canada" label: Canada cover: panini-card-canada.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-cape-verde" label: Cape Verde cover: panini-card-cape-verde.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-croatia" label: Croatia cover: panini-card-croatia.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-curacao" label: Curacao cover: panini-card-curacao.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-czechia" label: Czechia cover: panini-card-czechia.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-dr-congo" label: DR Congo cover: panini-card-dr-congo.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-ecuador" label: Ecuador cover: panini-card-ecuador.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-egypt" label: Egypt cover: panini-card-egypt.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-france" label: France cover: panini-card-france.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-germany" label: Germany cover: panini-card-germany.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-ghana" label: Ghana cover: panini-card-ghana.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-haiti" label: Haiti cover: panini-card-haiti.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-iran" label: Iran cover: panini-card-iran.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-iraq" label: Iraq cover: panini-card-iraq.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-ivory-coast" label: Ivory Coast cover: panini-card-ivory-coast.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-japan" label: Japan cover: panini-card-japan.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-jordan" label: Jordan cover: panini-card-jordan.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-morocco" label: Morocco cover: panini-card-morocco.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-netherlands" label: Netherlands cover: panini-card-netherlands.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-new-zealand" label: New Zealand cover: panini-card-new-zealand.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-norway" label: Norway cover: panini-card-norway.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-panama" label: Panama cover: panini-card-panama.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-paraguay" label: Paraguay cover: panini-card-paraguay.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-qatar" label: Qatar cover: panini-card-qatar.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-saudi-arabia" label: Saudi Arabia cover: panini-card-saudi-arabia.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-scotland" label: Scotland cover: panini-card-scotland.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-senegal" label: Senegal cover: panini-card-senegal.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-south-africa" label: South Africa cover: panini-card-south-africa.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-south-korea" label: South Korea cover: panini-card-south-korea.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-sweden" label: Sweden cover: panini-card-sweden.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-switzerland" label: Switzerland cover: panini-card-switzerland.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-tunisia" label: Tunisia cover: panini-card-tunisia.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-turkey" label: Turkey cover: panini-card-turkey.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-uruguay" label: Uruguay cover: panini-card-uruguay.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-uzbekistan" label: Uzbekistan cover: panini-card-uzbekistan.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-argentina" label: Argentina cover: panini-card-argentina.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-brazil" label: Brazil cover: panini-card-brazil.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-colombia" label: Colombia cover: panini-card-colombia.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-england" label: England cover: panini-card-england.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-mexico" label: Mexico cover: panini-card-mexico.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-portugal" label: Portugal cover: panini-card-portugal.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-portugal-goalkeeper" label: Portugal Goalkeeper cover: panini-card-portugal-goalkeeper.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-spain" label: Spain cover: panini-card-spain.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image - value: "panini-card-usa" label: USA cover: panini-card-usa.mp4 inputImageCount: 1 inputImageNote: You need to upload 1 selfie image ## Integration Header Prepare ```bash # Sign up Wiro dashboard and create project export YOUR_API_KEY="{{useSelectedProjectAPIKey}}"; export YOUR_API_SECRET="XXXXXXXXX"; # unix time or any random integer value export NONCE=$(date +%s); # hmac-SHA256 (YOUR_API_SECRET+Nonce) with YOUR_API_KEY export SIGNATURE="$(echo -n "${YOUR_API_SECRET}${NONCE}" | openssl dgst -sha256 -hmac "${YOUR_API_KEY}")"; ``` ## Run Command - Make HTTP Post Request ```bash curl -X POST "https://api.wiro.ai/v1/Run/wiro/panini-card" -H "Content-Type: multipart/form-data" -H "x-api-key: ${YOUR_API_KEY}" -H "x-nonce: ${NONCE}" -H "x-signature: ${SIGNATURE}" -d '{ "inputImage": "panini-card-inputsample-2.jpg", "prompt": "jane doe;1.60;50;5.5.1955", "effectType": "panini-card-algeria", "callbackUrl": "You can provide a callback URL; Wiro will send a POST request to it when the task is completed." }'; ``` ## Run Command - Response ```json { "errors": [], "taskid": "2221", "socketaccesstoken": "eDcCm5yyUfIvMFspTwww49OUfgXkQt", "result": true } ``` ## Get Task Detail - Make HTTP Post Request with Task ID ```bash curl -X POST "https://api.wiro.ai/v1/Task/Detail" -H "Content-Type: multipart/form-data" -H "x-api-key: ${YOUR_API_KEY}" -H "x-nonce: ${NONCE}" -H "x-signature: ${SIGNATURE}" -d '{ "taskid": "2221" }'; ``` ## Get Task Detail - Make HTTP Post Request with Socket Access Token ```bash curl -X POST "https://api.wiro.ai/v1/Task/Detail" -H "Content-Type: multipart/form-data" -H "x-api-key: ${YOUR_API_KEY}" -H "x-nonce: ${NONCE}" -H "x-signature: ${SIGNATURE}" -d '{ "tasktoken": "eDcCm5yyUfIvMFspTwww49OUfgXkQt" }'; ``` ## Get Task Detail - Response ```json { "total": "1", "errors": [], "tasklist": [ { "id": "2221", "uuid": "15bce51f-442f-4f44-a71d-13c6374a62bd", "socketaccesstoken": "eDcCm5yyUfIvMFspTwww49OUfgXkQt", "parameters": {}, "debugoutput": "", "debugerror": "", "starttime": "1734513809", "endtime": "1734513813", "elapsedseconds": "6.0000", "status": "task_postprocess_end", "createtime": "1734513807", "canceltime": "0", "assigntime": "1734513807", "accepttime": "1734513807", "preprocessstarttime": "1734513807", "preprocessendtime": "1734513807", "postprocessstarttime": "1734513813", "postprocessendtime": "1734513814", "outputs": [ { "id": "6bc392c93856dfce3a7d1b4261e15af3", "name": "0.png", "contenttype": "image/png", "parentid": "6c1833f39da71e6175bf292b18779baf", "uuid": "15bce51f-442f-4f44-a71d-13c6374a62bd", "size": "202472", "addedtime": "1734513812", "modifiedtime": "1734513812", "accesskey": "dFKlMApaSgMeHKsJyaDeKrefcHahUK", "url": "https://cdn1.wiro.ai/6a6af820-c5050aee-40bd7b83-a2e186c6-7f61f7da-3894e49c-fc0eeb66-9b500fe2/0.png" } ], "size": "202472" } ], "result": true } ``` ## Kill Task - Make HTTP Post Request with Task ID ```bash curl -X POST "https://api.wiro.ai/v1/Task/Kill" -H "Content-Type: multipart/form-data" -H "x-api-key: ${YOUR_API_KEY}" -H "x-nonce: ${NONCE}" -H "x-signature: ${SIGNATURE}" -d '{ "taskid": "534574" }'; ``` ## Kill Task - Make HTTP Post Request with Socket Access Token ```bash curl -X POST "https://api.wiro.ai/v1/Task/Kill" -H "Content-Type: multipart/form-data" -H "x-api-key: ${YOUR_API_KEY}" -H "x-nonce: ${NONCE}" -H "x-signature: ${SIGNATURE}" -d '{ "socketaccesstoken": "ZpYote30on42O4jjHXNiKmrWAZqbRE" }'; ``` ## Kill Task - Response ```json { "errors": [], "tasklist": [ { "id": "534574", "uuid": "15bce51f-442f-4f44-a71d-13c6374a62bd", "name": "", "socketaccesstoken": "ZpYote30on42O4jjHXNiKmrWAZqbRE", "parameters": { "inputImage": "https://api.wiro.ai/v1/File/mCmUXgZLG1FNjjjwmbtPFr2LVJA112/inputImage-6060136.png" }, "debugoutput": "", "debugerror": "", "starttime": "1734513809", "endtime": "1734513813", "elapsedseconds": "6.0000", "status": "task_cancel", "cps": "0.000585000000", "totalcost": "0.003510000000", "guestid": null, "projectid": "699", "modelid": "598", "description": "", "basemodelid": "0", "runtype": "model", "modelfolderid": "", "modelfileid": "", "callbackurl": "", "marketplaceid": null, "createtime": "1734513807", "canceltime": "0", "assigntime": "1734513807", "accepttime": "1734513807", "preprocessstarttime": "1734513807", "preprocessendtime": "1734513807", "postprocessstarttime": "1734513813", "postprocessendtime": "1734513814", "pexit": "0", "categories": "["tool","image-to-image","quick-showcase","compare-landscape"]", "outputs": [ { "id": "6bc392c93856dfce3a7d1b4261e15af3", "name": "0.png", "contenttype": "image/png", "parentid": "6c1833f39da71e6175bf292b18779baf", "uuid": "15bce51f-442f-4f44-a71d-13c6374a62bd", "size": "202472", "addedtime": "1734513812", "modifiedtime": "1734513812", "accesskey": "dFKlMApaSgMeHKsJyaDeKrefcHahUK", "foldercount": "0", "filecount": "0", "ispublic": 0, "expiretime": null, "url": "https://cdn1.wiro.ai/6a6af820-c5050aee-40bd7b83-a2e186c6-7f61f7da-3894e49c-fc0eeb66-9b500fe2/0.png" } ], "size": "202472" } ], "result": true } ``` ## Cancel Task - Make HTTP Post Request (For tasks on queue) ```bash curl -X POST "https://api.wiro.ai/v1/Task/Cancel" -H "Content-Type: multipart/form-data" -H "x-api-key: ${YOUR_API_KEY}" -H "x-nonce: ${NONCE}" -H "x-signature: ${SIGNATURE}" -d '{ "taskid": "634574" }'; ``` ## Cancel Task - Response ```json { "errors": [], "tasklist": [ { "id": "634574", "uuid": "15bce51f-442f-4f44-a71d-13c6374a62bd", "name": "", "socketaccesstoken": "ZpYote30on42O4jjHXNiKmrWAZqbRE", "parameters": { "inputImage": "https://api.wiro.ai/v1/File/mCmUXgZLG1FNjjjwmbtPFr2LVJA112/inputImage-6060136.png" }, "debugoutput": "", "debugerror": "", "starttime": "1734513809", "endtime": "1734513813", "elapsedseconds": "6.0000", "status": "task_cancel", "cps": "0.000585000000", "totalcost": "0.003510000000", "guestid": null, "projectid": "699", "modelid": "598", "description": "", "basemodelid": "0", "runtype": "model", "modelfolderid": "", "modelfileid": "", "callbackurl": "", "marketplaceid": null, "createtime": "1734513807", "canceltime": "0", "assigntime": "1734513807", "accepttime": "1734513807", "preprocessstarttime": "1734513807", "preprocessendtime": "1734513807", "postprocessstarttime": "1734513813", "postprocessendtime": "1734513814", "pexit": "0", "categories": "["tool","image-to-image","quick-showcase","compare-landscape"]", "outputs": [ { "id": "6bc392c93856dfce3a7d1b4261e15af3", "name": "0.png", "contenttype": "image/png", "parentid": "6c1833f39da71e6175bf292b18779baf", "uuid": "15bce51f-442f-4f44-a71d-13c6374a62bd", "size": "202472", "addedtime": "1734513812", "modifiedtime": "1734513812", "accesskey": "dFKlMApaSgMeHKsJyaDeKrefcHahUK", "foldercount": "0", "filecount": "0", "ispublic": 0, "expiretime": null, "url": "https://cdn1.wiro.ai/6a6af820-c5050aee-40bd7b83-a2e186c6-7f61f7da-3894e49c-fc0eeb66-9b500fe2/0.png" } ], "size": "202472" } ], "result": true } ``` ## Task Status Information This section defines the possible task status values returned by the API when polling for task completion. ### Completed Task Statuses (Polling can stop) These indicate that the task has reached a terminal state — either success or failure. Once any of these is received, polling should stop. - task_postprocess_end : Task completed successfully and post-processing is done. - task_cancel : Task was cancelled by the user or system. ### Running Task Statuses (Continue polling) These statuses indicate that the task is still in progress. Polling should continue if one of these is returned. - task_queue : Task is waiting in the queue. - task_accept : Task has been accepted for processing. - task_assign : Task is being assigned to a worker. - task_preprocess_start : Preprocessing is starting. - task_preprocess_end : Preprocessing is complete. - task_start : Task execution has started. - task_output : Output is being generated.