Here’s the complete solution for 403 Forbidden errors with custom REST endpoints accessing inventory attributes across organizations:
Custom Role Privilege Inheritance:
First, your custom role must inherit from a base role that includes ‘Inventory Manager’ duties. Direct privilege assignment isn’t sufficient - the inheritance chain matters for REST API authentication. Go to Security Console > Roles, edit your custom role, and ensure it inherits from ‘Supply Chain Inventory Manager’ or equivalent base role. Then add these specific privileges:
- Manage Item Attributes (SCM_MANAGE_ITEM_ATTRIBUTES_PRIV)
- Access Custom Objects via REST (CUSTOM_REST_ACCESS_PRIV)
REST Resource Security Policies:
In Security Console > REST Services, create a new resource pattern:
Resource Pattern: /fscmRestApi/resources/custom/inventoryAttributes/*
HTTP Methods: GET, POST, PUT
Roles: [Your Custom Role Name]
The wildcard is essential for covering all attribute operations. Map this explicitly to your integration service account’s role.
Security Console Configuration:
The missing piece is usually the cross-organization data security setup. Navigate to Security Console > Data Security Policies > Inventory Organizations. Your service account needs a data access set that includes ALL target inventory organizations. Create a new data access set:
- Name: Integration Service Inventory Access
- Type: Inventory Organization
- Organizations: Select all orgs your integration touches
- Assign this data access set to your custom role
Application Composer Object Security:
For your custom object in Application Composer, verify:
- Object-level security is enabled (Edit Object > Security tab)
- REST API Access checkbox is checked
- The custom object’s security policy allows updates from roles with inventory privileges
Testing the Fix:
After applying these changes, the authentication flow works as follows:
- REST call authenticates with service account credentials
- Security Console validates the resource pattern matches and role has access
- Role’s privilege inheritance chain is checked for inventory management rights
- Data access set is evaluated to confirm org-level permissions
- Application Composer object security validates the update operation
If you still see 403 errors after this configuration, enable REST API debugging in the service account’s user preferences and check the diagnostic logs. They’ll show exactly which security layer is rejecting the request. In 95% of cases, it’s the missing data access set for cross-org operations.
One final note: after changing Security Console policies, there’s sometimes a 5-10 minute cache delay. Force a cache refresh by logging out the service account and back in, or wait for the automatic refresh cycle.