From b2c
Develops custom SCAPI REST endpoints for Salesforce B2C Commerce including api.json routes, OAS 3.0 schema.yaml, cartridge structure, JavaScript implementations, and OAuth scopes.
npx claudepluginhub salesforcecommercecloud/b2c-developer-tooling --plugin b2cThis skill uses the workspace's default tool permissions.
This skill guides you through developing Custom APIs for Salesforce B2C Commerce. Custom APIs let you expose custom script code as REST endpoints under the SCAPI framework.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Checks Next.js compilation errors using a running Turbopack dev server after code edits. Fixes actionable issues before reporting complete. Replaces `next build`.
This skill guides you through developing Custom APIs for Salesforce B2C Commerce. Custom APIs let you expose custom script code as REST endpoints under the SCAPI framework.
Tip: If
b2cCLI is not installed globally, usenpx @salesforce/b2c-cliinstead (e.g.,npx @salesforce/b2c-cli code deploy).
A Custom API URL has this structure:
https://{shortCode}.api.commercecloud.salesforce.com/custom/{apiName}/{apiVersion}/organizations/{organizationId}/{endpointPath}
Three components are required to create a Custom API:
api.json file binding endpoints to implementations/my-cartridge
/cartridge
package.json
/rest-apis
/my-api-name # API name (lowercase alphanumeric and hyphens only)
api.json # Mapping file
schema.yaml # OAS 3.0 contract
script.js # Implementation
Important: API directory names can only contain alphanumeric lowercase characters and hyphens.
Minimal example:
openapi: 3.0.0
info:
version: 1.0.0
title: My Custom API
components:
securitySchemes:
ShopperToken:
type: oauth2
flows:
clientCredentials:
tokenUrl: https://{shortCode}.api.commercecloud.salesforce.com/shopper/auth/v1/organizations/{organizationId}/oauth2/token
scopes:
c_my_scope: My custom scope
parameters:
siteId:
name: siteId
in: query
required: true
schema:
type: string
minLength: 1
paths:
/my-endpoint:
get:
operationId: getMyData
parameters:
- $ref: '#/components/parameters/siteId'
responses:
'200':
description: Success
security:
- ShopperToken: ['c_my_scope']
Key requirements:
ShopperToken for Shopper APIs (requires siteId), AmOAuth2 for Admin APIsc_, max 25 charsc_ prefixSee Contract Reference for full schema examples and Shopper vs Admin API differences.
var RESTResponseMgr = require('dw/system/RESTResponseMgr');
exports.getMyData = function() {
var myParam = request.getHttpParameterMap().get('c_my_param').getStringValue();
var result = { data: 'my data', param: myParam };
RESTResponseMgr.createSuccess(result).render();
};
exports.getMyData.public = true; // Required
Key requirements:
.public = trueRESTResponseMgr.createSuccess() for responsesRESTResponseMgr.createError() for error responses (RFC 9457 format)See Implementation Reference for caching, remote includes, and external service calls.
{
"endpoints": [
{
"endpoint": "getMyData",
"schema": "schema.yaml",
"implementation": "script"
}
]
}
Important: Implementation name must NOT include file extension.
rest-apis/{api-name}/ structure# Deploy and activate to register endpoints
b2c code deploy ./my-cartridge --reload
# Check registration status
b2c scapi custom status --tenant-id zzpq_013
# Show failed registrations with error reasons
b2c scapi custom status --tenant-id zzpq_013 --status not_registered --columns apiName,endpointPath,errorReason
b2c slas client create --default-scopes --scopes "c_my_scope"
siteId in all requestssiteId from requestsSee Testing Reference for curl examples and authentication setup.
| Error | Cause | Solution |
|---|---|---|
| 400 Bad Request | Invalid/unknown params | Define all params in schema |
| 401 Unauthorized | Invalid token | Check token validity |
| 403 Forbidden | Missing scope | Verify scope in token |
| 404 Not Found | Not registered | Check b2c scapi custom status |
| 500 Internal Error | Script error | Check b2c logs get --level ERROR |
| 503 Service Unavailable | Circuit breaker open | Fix errors, wait for reset |
b2c logs get or filter Log Center with CustomApiRegistryb2c-cli:b2c-code - Deploying cartridges and activating code versionsb2c-cli:b2c-scapi-custom - Checking Custom API registration statusb2c-cli:b2c-slas - Creating SLAS clients for testing Shopper APIsb2c:b2c-webservices - Service configuration for external calls