{"id":"4a484881-9950-4ce2-a861-927e2f69804f","slug":"clawhub-chrischall-kiaaccess-curl","name":"kiaaccess-curl","description":"Query and command a Kia vehicle directly with curl against the Kia Owners API (api.owners.kia.com), without running the MCP server. Use when the user wants a one-off read of their Kia's status, location, or EV charge state, or to lock/unlock/start climate from the shell — \"check my Kia\", \"is the car locked\", \"what's the EV9 charge\", \"lock the car from the terminal\". Requires KIA_USERNAME/KIA_PASSWORD and a one-time SMS/email MFA bootstrap.","canonicalUrl":"https://www.xpersona.co/agent/clawhub-chrischall-kiaaccess-curl","sourceUrl":"https://clawhub.ai/chrischall/kiaaccess-curl","homepage":"https://clawhub.ai/chrischall/skills/kiaaccess-curl","source":"CLAWHUB","vendor":{"slug":"clawhub","label":"Clawhub","url":"https://clawhub.ai/chrischall/skills/kiaaccess-curl"},"protocols":["OPENCLEW"],"capabilities":[],"trustScore":null,"trustConfidence":"unknown","artifactCount":0,"benchmarkCount":0,"lastRelease":"2.0.0","freshnessAt":"2026-10-10T02:51:24.472Z","freshnessLabel":"Oct 10, 2026","securityReviewed":true,"openapiReady":false,"stats":[{"label":"Trust score","value":"Unknown"},{"label":"Compatibility","value":"OpenClaw"},{"label":"Freshness","value":"Oct 10, 2026"},{"label":"Vendor","value":"Clawhub"},{"label":"Artifacts","value":"0"},{"label":"Benchmarks","value":"0"},{"label":"Last release","value":"2.0.0"}],"factsPreview":[{"factKey":"vendor","category":"vendor","label":"Vendor","value":"Clawhub","href":"https://clawhub.ai/chrischall/skills/kiaaccess-curl","sourceUrl":"https://clawhub.ai/chrischall/skills/kiaaccess-curl","sourceType":"profile","confidence":"medium","observedAt":"2026-10-10T02:51:24.503Z","isPublic":true},{"factKey":"protocols","category":"compatibility","label":"Protocol compatibility","value":"OpenClaw","href":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-kiaaccess-curl/contract","sourceUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-kiaaccess-curl/contract","sourceType":"contract","confidence":"medium","observedAt":"2026-10-10T02:51:24.503Z","isPublic":true},{"factKey":"traction","category":"adoption","label":"Adoption signal","value":"1.8K downloads","href":"https://clawhub.ai/chrischall/kiaaccess-curl","sourceUrl":"https://clawhub.ai/chrischall/kiaaccess-curl","sourceType":"profile","confidence":"medium","observedAt":"2026-10-10T02:51:24.503Z","isPublic":true},{"factKey":"latest_release","category":"release","label":"Latest release","value":"2.0.0","href":"https://clawhub.ai/chrischall/kiaaccess-curl","sourceUrl":"https://clawhub.ai/chrischall/kiaaccess-curl","sourceType":"release","confidence":"medium","observedAt":"2026-10-09T23:24:03.714Z","isPublic":true},{"factKey":"handshake_status","category":"security","label":"Handshake status","value":"UNKNOWN","href":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-kiaaccess-curl/trust","sourceUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-kiaaccess-curl/trust","sourceType":"trust","confidence":"medium","observedAt":null,"isPublic":true}],"highlights":["1.8K downloads","Trust evidence available"],"agentCard":{"name":"kiaaccess-curl","description":"Query and command a Kia vehicle directly with curl against the Kia Owners API (api.owners.kia.com), without running the MCP server. Use when the user wants a one-off read of their Kia's status, location, or EV charge state, or to lock/unlock/start climate from the shell — \"check my Kia\", \"is the car locked\", \"what's the EV9 charge\", \"lock the car from the terminal\". Requires KIA_USERNAME/KIA_PASSWORD and a one-time SMS/email MFA bootstrap.","source":"CLAWHUB","sourceId":"clawhub:s17cjx1a349nz5apaqp02vgz4h85728z:kiaaccess-curl","homepage":"https://clawhub.ai/chrischall/skills/kiaaccess-curl","repository":"https://clawhub.ai/chrischall/kiaaccess-curl","documentation":"https://www.xpersona.co/agent/clawhub-chrischall-kiaaccess-curl","protocols":["OPENCLEW"],"examples":[{"kind":"example","language":"bash","snippet":"export KIA_USERNAME='you@example.com'\nexport KIA_PASSWORD='…'\nexport KIA_DEVICE=$(uuidgen)        # keep this stable across runs"},{"kind":"example","language":"bash","snippet":"KIA_BASE='https://api.owners.kia.com/apigw/v1'\n: \"${KIA_DEVICE:?export KIA_DEVICE=\\$(uuidgen) first}\"\n\n# Session file for THIS skill. Deliberately NOT ~/.kiaaccess-mcp/session.json —\n# that path belongs to the MCP server, whose store is keyed by accountId with a\n# different schema (src/session.ts). Writing this skill's flat\n# {rmtoken, deviceId} there corrupts the server's session and forces it back\n# through MFA.\nKIA_SESSION=\"${KIA_CURL_SESSION:-$HOME/.kiaaccess-mcp/curl-session.json}\"\n\n# Builds the header list into the KIA_HDRS array. Extra headers passed as args.\nkia_headers() {\n  local z sign off h\n  z=$(date +%z)                       # e.g. -0800, +0530\n  sign=${z:0:1}\n  # `10#` forces base 10. Without it, bash reads a leading-zero offset such as\n  # `08`/`09` as OCTAL and dies with \"value too great for base\" — so this breaks\n  # in US Pacific winter, Alaska, Japan, Korea and China. zsh does not have the\n  # problem, which is a good way to ship it broken without noticing.\n  off=$(( 10#${z:1:2} ))\n  [ \"$sign\" = \"-\" ] && off=$(( 0 - off ))\n\n  KIA_HDRS=()\n  for h in \\\n    \"content-type: application/json;charset=utf-8\" \\\n    \"accept: application/json\" \\\n    \"accept-language: en-US,en;q=0.9\" \\\n    \"accept-charset: utf-8\" \\\n    \"apptype: L\" \"appversion: 7.22.0\" \"clientid: SPACL716-APL\" \\\n    \"clientuuid: ${KIA_DEVICE}\" \"deviceid: ${KIA_DEVICE}\" \\\n    \"from: SPA\" \"host: api.owners.kia.com\" \"language: 0\" \\\n    \"offset: ${off}\" \"ostype: iOS\" \"osversion: 15.8.5\" \"phonebrand: iPhone\" \\\n    \"secretkey: sydnat-9kykci-Kuhtep-h5nK\" \"to: APIGW\" \"tokentype: A\" \\\n    \"date: $(LC_ALL=C date -u '+%a, %d %b %Y %H:%M:%S GMT')\" \\\n    \"user-agent: KIAPrimo_iOS/37 CFNetwork/1335.0.3.4 Darwin/21.6.0\" \\\n    \"$@\"\n  do\n    KIA_HDRS+=(-H \"$h\")\n  done\n}\n\n# curl wrapper: kia_curl <method> <path> [body] [-- extra-header ...]\nkia_curl() {\n  local method=\"$1\" path=\"$2\" body=\"${3:-}\"\n  shift 2; [ $# -gt 0 ] && shift          # drop the body arg when present\n  [ \"${1:-}\" = \"--\" ] && shift\n  kia_h"}]}}