{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Configuring Fees","siteUrl":"https://docs.peachfinance.com","description":"API and product documentation for Peach Finance, a lending-as-a-service platform.","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"configuring-fees","__idx":0},"children":["Configuring Fees"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This guide walks you through real-world scenarios for managing fees in the Peach platform. Using practical examples, you'll learn how to handle common fee management tasks through typical loan servicing situations."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"overview","__idx":1},"children":["Overview"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Peach supports several types of fees that serve different purposes in the loan lifecycle:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Origination Fees"]},": One-time fees charged at loan creation with three charging options:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added to first payment"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Amortized equally across payments"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Charged separately at origination"]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Dynamic Fees"]},": Situational charges like:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Late fees"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["NSF (Non-Sufficient Funds) fees"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Loan modification fees"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Service fees"]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Each fee type has specific configuration options for when and how it's charged. Let's explore common scenarios you'll encounter when managing these fees."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"prerequisites","__idx":2},"children":["Prerequisites"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Before starting, make sure you have:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Peach account with API access"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["API credentials from the Peach Portal"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["REST client (like Postman)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Understanding of your loan type's fee configuration"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"authentication","__idx":3},"children":["Authentication"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Include your API key in all requests:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"http","header":{"controls":{"copy":{}}},"source":"X-API-KEY: YOUR_API_KEY\n","lang":"http"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"common-scenarios","__idx":4},"children":["Common Scenarios"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"scenario-1-updating-an-origination-fee-post-loan-creation","__idx":5},"children":["Scenario 1: Updating an Origination Fee Post-Loan Creation"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Let's say you need to adjust an origination fee from $100 to $75 after discovering a processing error."]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["First, check the current fee:"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"http","header":{"controls":{"copy":{}}},"source":"GET /people/{personId}/loans/{loanId}/fees\n","lang":"http"},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{"start":2},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Update the origination fee:"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"http","header":{"controls":{"copy":{}}},"source":"PUT /people/{personId}/loans/{loanId}/fees/origination\nContent-Type: application/json\n\n{\n  \"feeAmount\": 75.00,\n  \"caseId\": \"CS-ADJ1-0001\"  // Track the adjustment reason\n}\n","lang":"http"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The system will:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Update the fee amount"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Automatically replay the loan from activation"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Recalculate payment allocations"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Adjust statements if necessary"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"charging-a-modification-fee","__idx":6},"children":["Charging a Modification Fee"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When a borrower requests to defer a due date, you may need to assess a modification fee. Here's how to verify the fee configuration and charge it through the API."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"step-1-verify-fee-configuration","__idx":7},"children":["Step 1: Verify Fee Configuration"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["First, check the available fee types for your loan:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"http","header":{"controls":{"copy":{}}},"source":"GET /loan-types/{loanTypeId}/fee-types\nAuthorization: Bearer YOUR_API_KEY\n","lang":"http"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Look for the modification fee configuration in the response. This will tell you:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The fee amount (if fixed)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Any constraints or limits on the fee"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Whether it can be applied to specific draws (for lines of credit)"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"step-2-charge-the-fee","__idx":8},"children":["Step 2: Charge the Fee"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["After verifying the configuration, charge the modification fee:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"http","header":{"controls":{"copy":{}}},"source":"POST /people/{personId}/loans/{loanId}/fees\nContent-Type: application/json\nAuthorization: Bearer YOUR_API_KEY\n\n{\n  \"apiName\": \"modificationFee\",\n  \"externalId\": \"MOD-FEE-2024-001\",  // Your system's identifier for tracking\n  \"feeAmount\": 35.00,                 // Amount configured for due date changes\n  \"description\": \"Fee for deferring January payment\"  // Optional context\n}\n","lang":"http"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"scenario-3-managing-multiple-nsf-fees","__idx":9},"children":["Scenario 3: Managing Multiple NSF Fees"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When handling multiple returned payments, you might need to assess NSF fees while respecting frequency limits and caps."]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["First, check annual fee totals to verify cap compliance:"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"http","header":{"controls":{"copy":{}}},"source":"GET /people/{personId}/loans/{loanId}/fees?type=nsfFee\n","lang":"http"},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{"start":2},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Charge the NSF fee:"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"http","header":{"controls":{"copy":{}}},"source":"POST /people/{personId}/loans/{loanId}/fees\nContent-Type: application/json\n\n{\n  \"apiName\": \"nsfFee\",\n  \"externalId\": \"NSF-2024-002\",\n  \"feeAmount\": 35.00,\n  \"customDisplayName\": \"Returned Payment Fee\",\n  \"chargeDate\": \"2024-12-09\"\n}\n","lang":"http"},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{"start":3},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["If you later need to cancel one of these fees:"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"http","header":{"controls":{"copy":{}}},"source":"POST /people/{personId}/loans/{loanId}/fees/{loanFeeId}/cancel\nContent-Type: application/json\n\n{\n  \"caseId\": \"NSF-REVERSAL-001\"\n}\n","lang":"http"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"scenario-4-loan-modification-fee-with-state-specific-amount","__idx":10},"children":["Scenario 4: Loan Modification Fee with State-Specific Amount"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When processing a loan modification, you might need to charge a fee that varies by state."]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Charge the modification fee:"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"http","header":{"controls":{"copy":{}}},"source":"POST /people/{personId}/loans/{loanId}/fees\nContent-Type: application/json\n\n{\n  \"apiName\": \"modificationFee\",\n  \"externalId\": \"MOD-2024-001\",\n  \"feeAmount\": 50.00,\n  \"chargeDate\": \"2024-12-10\",\n  \"caseId\": \"MODIFICATION-001\",  // Link to modification case\n  \"customDisplayName\": \"Payment Schedule Modification Fee\"\n}\n","lang":"http"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The system will automatically:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Validate the fee amount against state regulations"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Apply any applicable caps"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Link the fee to the modification case"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"fee-amount-logic","__idx":11},"children":["Fee Amount Logic"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Peach supports various ways to calculate fee amounts:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Fixed Amount"]}]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"feeAmount\": 25.00\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{"start":2},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Percentage of Principal"]}]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"type\": \"percentageOfPrincipal\",\n  \"percentage\": 0.05  // 5% of outstanding principal\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{"start":3},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Percentage with Cap"]}]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"type\": \"percentageOfOverdueBalanceInPeriodCapped\",\n  \"percentage\": 0.10,\n  \"maxAmount\": 50.00\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"best-practices","__idx":12},"children":["Best Practices"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Fee Tracking"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Use consistent ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["externalId"]}," naming conventions"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Link fees to cases when applicable"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Document fee changes with clear reasons"]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Compliance"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Verify state-specific limits before charging"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Track annual and lifetime fee totals"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Consider borrower notification requirements"]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Error Handling"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Handle loan lock scenarios gracefully"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Validate fee eligibility before charging"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Implement proper retry logic"]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Fee Management"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Cancel fees before processing if changes needed"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Track fee history for audit purposes"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Monitor fee caps and limits"]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"error-handling","__idx":13},"children":["Error Handling"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Common responses:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"// Loan locked\n{\n  \"status\": 423,\n  \"message\": \"Loan is locked for updates. Please retry in a few minutes.\"\n}\n\n// Fee cap exceeded\n{\n  \"status\": 412,\n  \"message\": \"Fee amount exceeds annual cap for state CA\"\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Handle errors by:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Implementing retry logic for locked loans"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Checking caps before charging fees"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Validating fee eligibility upfront"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"next-steps","__idx":14},"children":["Next steps"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/loan-lifecycle/fees/about-fees"},"children":["About Fees"]}]}," — Conceptual overview of how fees work in Peach."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/loan-lifecycle"},"children":["Loan Lifecycle overview"]}]}," — Index of the full loan lifecycle from origination through closeout."]}]}]},"headings":[{"value":"Configuring Fees","id":"configuring-fees","depth":1},{"value":"Overview","id":"overview","depth":2},{"value":"Prerequisites","id":"prerequisites","depth":2},{"value":"Authentication","id":"authentication","depth":2},{"value":"Common Scenarios","id":"common-scenarios","depth":2},{"value":"Scenario 1: Updating an Origination Fee Post-Loan Creation","id":"scenario-1-updating-an-origination-fee-post-loan-creation","depth":3},{"value":"Charging a Modification Fee","id":"charging-a-modification-fee","depth":1},{"value":"Step 1: Verify Fee Configuration","id":"step-1-verify-fee-configuration","depth":2},{"value":"Step 2: Charge the Fee","id":"step-2-charge-the-fee","depth":2},{"value":"Scenario 3: Managing Multiple NSF Fees","id":"scenario-3-managing-multiple-nsf-fees","depth":3},{"value":"Scenario 4: Loan Modification Fee with State-Specific Amount","id":"scenario-4-loan-modification-fee-with-state-specific-amount","depth":3},{"value":"Fee Amount Logic","id":"fee-amount-logic","depth":2},{"value":"Best Practices","id":"best-practices","depth":2},{"value":"Error Handling","id":"error-handling","depth":2},{"value":"Next steps","id":"next-steps","depth":2}],"frontmatter":{"seo":{"title":"Configuring Fees"}},"lastModified":"2026-05-01T14:33:55.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/loan-lifecycle/fees/configuring-fees","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}