Asset retirement via REST API returns 403 Forbidden error in production environment

Our asset retirement automation returns 403 Forbidden errors in production but works perfectly in our test environment. We’re using the same service account credentials in both environments:


POST /fscmRestApi/resources/11.13.18.05/fixedAssets/{assetId}/action/retire
{
  "retirementDate": "2025-01-14",
  "retirementTypeCode": "FULL"
}

The service account has ‘Asset Manager’ role assigned and can successfully query asset data via GET requests. We’ve verified role and privilege assignment through the Security Console, but the REST API privilege requirements for asset retirement aren’t clearly documented. What specific privileges are needed for the retire action?

Let me provide a complete solution covering all three focus areas:

Role and Privilege Assignment: Asset retirement via REST API requires a specific combination of function and data security privileges:

Function Security Requirements:

  1. Core Privilege: ‘Manage Fixed Assets via Web Services’ (Privilege Code: FND_MANAGE_FIXED_ASSETS_WS)

    • This is separate from UI privileges
    • Must be explicitly granted, not inherited from Asset Manager role in standard config
  2. Action-Specific Privilege: ‘Retire Fixed Assets’ (Privilege Code: FA_RETIRE_ASSETS_PRIV)

    • Required for the retire action endpoint
    • Different from transfer or adjustment privileges
  3. Supporting Privileges:

    • ‘View Fixed Assets’ (for GET operations)
    • ‘Maintain Asset Retirement’ (for transaction validation)

To verify privilege assignment:


Navigation: Setup and Maintenance > Security Console > Users
Select service account > View Effective Privileges
Filter by 'Fixed Assets' and verify all above privileges show as 'Granted'

Security Console Checks: Perform systematic security audit:

  1. Role Analysis:

    • Navigate to: Security Console > Roles
    • Search for service account’s assigned roles
    • Expand each role > View Role Hierarchy
    • Verify ‘Asset Manager’ includes required duty roles:
      • Fixed Assets Management Duty
      • Fixed Assets Web Services Duty (often missing)
  2. Data Security Policies:

    • Check: Security Console > Data Security Policies
    • Filter by ‘Fixed Assets’ object
    • Verify service account has access to:
      • All asset books in scope (or specific books being retired)
      • Asset categories for assets being processed
      • Operating units where assets reside
  3. Environment Comparison: Run this analysis in both test and production:

    
    Reports > Analytics > Security Analytics
    Report: 'User Security Comparison'
    Parameters: Service Account, Test vs Production
    

    Look for discrepancies in:

    • Duty role assignments
    • Data access sets
    • Asset book security grants
  4. Common Production-Specific Issues:

    • Production often has stricter data security (book-level access)
    • Custom roles may have different compositions
    • IP-based access restrictions in production firewall
    • OAuth token scope limitations (if using OAuth)

REST API Privilege Requirements: Detailed privilege matrix for asset retirement API:

Operation Required Privilege Privilege Code Notes
GET /fixedAssets View Fixed Assets FA_VIEW_ASSETS_PRIV Basic read access
POST /retire Retire Fixed Assets FA_RETIRE_ASSETS_PRIV Action-specific
POST /retire Manage via Web Services FND_MANAGE_FIXED_ASSETS_WS API access gate
POST /retire Maintain Transactions FA_MAINTAIN_TRANSACTIONS Transaction posting

Undocumented Requirements:

  1. Service accounts need ‘HZ_ROLE_GRANT’ profile option set to ‘Y’
  2. REST API calls validate against both function and data security
  3. Asset retirement requires open accounting period for retirement date
  4. Book-level security must include ‘Retirement’ transaction type

Troubleshooting Steps:

  1. Test Privilege Grant: Temporarily grant ‘Asset Manager Application Administrator’ role to service account

    If this works, systematically remove privileges to identify minimum required set

  2. Enable Security Logging:

    
    Navigate: Setup and Maintenance > Manage Administrator Profile Values
    Profile: FND_SECURITY_DEBUG
    Set to: TRUE for service account
    

    Retry API call and review security logs for denial reasons

  3. Verify OAuth Scope (if applicable): If using OAuth, ensure token scope includes:

    
    scope: urn:opc:resource:fa:assets:retire
    
  4. Check Audit Trail:

    
    Navigate: Tools > Audit Reports
    Report: Security Access Audit
    Filter: Service Account, Last 24 hours, Failed Actions
    

Solution for Your Scenario: Based on your description, the most likely cause is missing data security for asset books in production. Grant the service account access to production asset books:


Navigate: Setup and Maintenance > Define Asset Book Security
Add Grant:
  User: [service_account]
  Asset Book: [Production Books]
  Transaction Types: All (including Retirement)

After granting, wait 10-15 minutes for security cache refresh, then retry the API call.


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.

403 typically means missing function security privileges, not data security. Check if your service account has the ‘Retire Fixed Assets’ privilege specifically. Having the Asset Manager role doesn’t automatically grant all functional privileges - you need explicit privilege assignment for REST API actions.

Confirmed this resolves the 403 error—explicitly granting FND_MANAGE_FIXED_ASSETS_WS alongside FA_RETIRE_ASSETS_PRIV to our integration role fixed Oracle Fusion Fixed Assets REST API retirement calls immediately.

We had this exact issue. The problem is that REST API actions require different privileges than UI actions. Even though the user can retire assets through the UI, the API requires the ‘Manage Fixed Assets via Web Services’ privilege. Check if that’s granted to your service account in production.

Thanks Mark. I checked and ‘Manage Fixed Assets via Web Services’ is granted in both environments. Still getting 403 in production. Could there be additional data security policies blocking access to specific asset categories or books?

Yes, data security can cause 403 even with correct function privileges. Check the asset book assignments for your service account. If the asset belongs to a book that isn’t in the user’s data access set, retirement will be blocked. This is often overlooked when comparing test vs production environments.

Don’t forget to check duty role inheritance. Sometimes custom roles in production have different duty role compositions than test. Run a privilege analysis report comparing the service account’s effective privileges across both environments. There might be subtle differences in role hierarchies.

Another thing to verify: check if there are any IP whitelisting or network security policies in production that might be blocking your API client. 403 can also be triggered by web application firewall rules if the request pattern looks suspicious.