{"formatVersion":"1","kind":"dock_integration","slug":"salesforce-rest-api","title":"Salesforce REST API","summary":"Import a Harbor-safe Salesforce starter set for object discovery, bounded SOQL queries, and approval-friendly record creation.","description":"A Dock-hosted Salesforce REST API starter integration for Harbor. Importing it creates a local http_api port shell plus a Harbor-safe Salesforce action set for describing available sObjects, running bounded SOQL queries, and creating a record in an explicit object path. Tokens remain local to Harbor Node.","version":"0.1.0","publisher":{"slug":"salesforce","name":"Salesforce","websiteUrl":"https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/intro_rest.htm"},"category":"CRM","tags":["salesforce","crm","sobjects","records","soql"],"compatibility":{"harborNode":">=0.1.0","notes":"Requires local operator-configured auth after import. Use the Salesforce instance URL returned by OAuth as the Harbor base URL. Templates use input.path, input.query, and input.body at execution time."},"requiredPlan":"community","portTemplates":[{"kind":"http_api","label":"Salesforce REST API","description":"Salesforce REST API connection managed locally through Harbor.","baseUrl":"https://your-instance.my.salesforce.com/","authMode":"header_token","authHeaderName":"Authorization","authTokenPrefix":"Bearer"}],"actionTemplates":[{"slug":"describe-sobjects","label":"Describe sObjects","description":"List available Salesforce sObjects for the connected org using the global describe resource.","method":"GET","path":"/services/data/v66.0/sobjects","approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"get-limits","label":"Get Limits","description":"Fetch Salesforce REST API limits and usage information for the connected org.","method":"GET","path":"/services/data/v66.0/limits","approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"describe-object","label":"Describe Object","description":"Describe a specific Salesforce sObject using an explicit object API name.","method":"GET","path":"/services/data/v66.0/sobjects/{objectApiName}/describe","inputs":{"parameters":[{"name":"objectApiName","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120},"description":"Salesforce object API name, such as Account, Contact, or Lead."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"query","label":"Run SOQL Query","description":"Run a bounded SOQL query using the Salesforce query resource and an explicit q parameter.","method":"GET","path":"/services/data/v66.0/query","inputs":{"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":4000},"description":"SOQL query string, such as SELECT Id, Name FROM Account LIMIT 25."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"search-records","label":"Search Records","description":"Search Salesforce records using SOSL with an explicit q parameter.","method":"GET","path":"/services/data/v66.0/search","inputs":{"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":4000},"description":"SOSL search string."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"get-record","label":"Get Record","description":"Fetch a specific Salesforce record using explicit object and record identifiers.","method":"GET","path":"/services/data/v66.0/sobjects/{objectApiName}/{recordId}","inputs":{"parameters":[{"name":"objectApiName","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120},"description":"Salesforce object API name, such as Account, Contact, or Lead."},{"name":"recordId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":30},"description":"Salesforce record ID."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"create-record","label":"Create Record","description":"Create a Salesforce record in an explicit sObject path using a bounded JSON request body.","method":"POST","path":"/services/data/v66.0/sobjects/{objectApiName}/","inputs":{"parameters":[{"name":"objectApiName","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120},"description":"Salesforce object API name, such as Account, Contact, or Lead."}]},"approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"},{"slug":"update-record","label":"Update Record","description":"Update a Salesforce record using explicit object and record identifiers with a bounded JSON request body.","method":"PATCH","path":"/services/data/v66.0/sobjects/{objectApiName}/{recordId}","inputs":{"parameters":[{"name":"objectApiName","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120},"description":"Salesforce object API name, such as Account, Contact, or Lead."},{"name":"recordId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":30},"description":"Salesforce record ID."}]},"approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"},{"slug":"delete-record","label":"Delete Record","description":"Delete a Salesforce record using explicit object and record identifiers.","method":"DELETE","path":"/services/data/v66.0/sobjects/{objectApiName}/{recordId}","inputs":{"parameters":[{"name":"objectApiName","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":120},"description":"Salesforce object API name, such as Account, Contact, or Lead."},{"name":"recordId","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":30},"description":"Salesforce record ID."}]},"approvalMode":"require_approval","requestBodyMode":"none","resultMode":"json_summary"}],"workflowTemplates":[{"slug":"object-discovery-and-create","title":"Object Discovery And Create","summary":"Future workflow template for discovering available Salesforce objects, validating a SOQL read, and operator-reviewed record creation."}],"helpText":"Import to Harbor, configure local auth, then validate and test describe-sobjects and query before enabling create-record. Keep create-record on approval unless your local policy explicitly allows operator-reviewed CRM writes.","installNotes":"Dock shares only safe metadata. Hidden auth must be configured locally inside Harbor after import. Salesforce reads use fixed v66.0 REST resources with typed input.query values, and create-record uses input.path.objectApiName plus input.body JSON containing the field payload."}