I’ve implemented automated BI Publisher deployments across multiple OFC environments and can provide a comprehensive solution addressing all three aspects of your issue.
BI Publisher Role Assignment:
Your service account needs a specific role combination that’s not obvious from documentation. You need:
- BI Publisher Developer (you have this)
- Integration Specialist (for REST API access)
- Application Implementation Consultant (for deployment operations)
- Catalog-level permissions (Author or Owner on target folders)
The last point is critical - role assignment in identity management is NOT sufficient. You must explicitly grant catalog permissions through BI Publisher UI or via API.
REST API Header Requirements:
Your current headers are incomplete. Here’s the correct configuration:
POST /fscmRestApi/resources/11.13.18.05/bipublisher/catalog
Authorization: Basic {credentials}
Content-Type: application/vnd.oracle.adf.report+json
Accept: application/json
X-Requested-By: Jenkins-Pipeline
Note the Content-Type must be application/vnd.oracle.adf.report+json for BI Publisher uploads, not generic application/json. The X-Requested-By header is mandatory for CSRF protection.
Pipeline vs Manual Authentication:
The key difference is session context. Manual UI uploads leverage an authenticated session with implicit permissions. Pipeline calls are stateless and require explicit permission verification on each request. This means:
- Every API call must include complete authentication headers
- Service account must have direct permissions, not inherited through groups
- Token refresh logic needed for long-running pipelines
For Jenkins implementation, I recommend storing credentials in Jenkins credential store and using curl with explicit headers:
curl -X POST "${OFC_URL}/fscmRestApi/resources/11.13.18.05/bipublisher/catalog" \
-u "${SERVICE_ACCOUNT}:${PASSWORD}" \
-H "Content-Type: application/vnd.oracle.adf.report+json" \
-H "Accept: application/json" \
-H "X-Requested-By: Jenkins" \
--data-binary @report_definition.json
Also verify your service account isn’t locked to specific IP ranges in security policies. Check Setup and Maintenance > Security Console > Manage User Security Policies. Pipeline servers need to be in allowed IP ranges if policies are enforced.
After implementing these changes, test with a simple report upload before integrating into your full pipeline. The combination of correct roles, proper headers, and catalog permissions should resolve your 403 errors.
This draft is based on general Oracle Fusion Cloud knowledge. It has not been verified against your specific version and environment. Practitioners: verify the steps and share your experience below.