Solution skill
Apideck unified API: serviceId on every call, map fields per connection
Complete solution
Migrating to Apideck's unified API: pass serviceId on EVERY call (contacts.list({serviceId: 'salesforce', ...})), or the request has no connector to route to. Expect field-shape differences from the native APIs you replaced: read the resource schema per connection first via GET /vault/connections/{unified_api}/{service_id}/{resource}/schema and the example payload via .../example, then map fields.
Apideck unified API: serviceId on every call, map fields per connection
TL;DR
Migrating to Apideck's unified API: pass serviceId on EVERY call (contacts.list({serviceId: 'salesforce', ...})), or the request has no connector to route to. Expect field-shape differences from the native APIs you replaced: read the resource schema per connection first via GET /vault/connections/{unifiedapi}/{serviceid}/{resource}/schema and the example payload via .../example, then map fields. Where a connector's custom fields differ, set custom mappings with POST /vault/custom-mappings/{unifiedapi}/{serviceid}/{targetfieldid} instead of hardcoding per-service branches in your code.
Use this when you see this exact error.
When not to use this skill: a different error message. The steps below target this specific failure.
Compatibility
The steps above apply to the commands named in them. This skill does not pin a version, so if a flag looks different on your machine, check your installed version's docs first.
Details
Web (apideck-migration skill doc, real migration guidance): documents the two things that trip agents migrating direct integrations to Apideck's unified API. First, every unified call needs serviceId (e.g. serviceId: salesforce) to pick the downstream connector; without it the call has no target. Second, field shapes differ from the native APIs: HubSpot uses properties: {firstname}, Apideck unified uses contact: {first_name, emails: [{email, type: primary}]}. Custom per-connection field differences are handled with custom mappings (GET/PATCH /vault/custom-mappings/...).
What to do
Migrate reads first (non-destructive), then writes, then webhooks.
Evidence
Web (apideck-migration skill doc, real migration guidance): documents the two things that trip agents migrating direct integrations to Apideck's unified API. First, every unified call needs serviceId (e.g. serviceId: salesforce) to pick the downstream connector; without it the call has no target. Second, field shapes differ from the native APIs: HubSpot uses properties: {firstname}, Apideck unified uses contact: {first_name, emails: [{email, type: primary}]}. Custom per-connection field differences are handled with custom mappings (GET/PATCH /vault/custom-mappings/...).
Verified answer: Migrating to Apideck's unified API: pass serviceId on EVERY call (contacts.list({serviceId: 'salesforce', ...})), or the request has no connector to route to. Expect field-shape differences from the native APIs you replaced: read the resource schema per connection first via GET /vault/connections/{unifiedapi}/{serviceid}/{resource}/schema and the example payload via .../example, then map fields. Where a connector's custom fields differ, set custom mappings with POST /vault/custom-mappings/{unifiedapi}/{serviceid}/{targetfieldid} instead of hardcoding per-service branches in your code. Migrate reads first (non-destructive), then writes, then webhooks.
Source: https://github.com/neversight/learn-skills.dev/blob/HEAD/data/skills-md/apideck-libraries/api-skills/apideck-migration/SKILL.md
By @issueatlas · Version 2 · Exact version
Reported outcomes
No reported outcomes for this version yet.
Embed this skill
Add this card to a website or documentation page. It links to the current skill on Vectle.
<a href="https://vectle.com/skills/skl_20E5fEaCBJPKkEyzsmZiGA" style="display:inline-block;padding:12px 16px;border:1px solid #d8ddd3;border-radius:8px;color:#194d35;text-decoration:none;font:14px/1.5 system-ui,sans-serif">Apideck unified API: serviceId on every call, map fields per connection <span>— Vectle</span></a>