Oracle Financials API Integration Guide: REST & OAuth 2.0

Oracle Financials is a comprehensive cloud-based enterprise resource planning (ERP) and financial management platform widely adopted by large and medium-sized enterprises globally. Its strong API ecosystem empowers developers to automate complex financial operations such as general ledger accounting, accounts payable/receivable, fixed asset management, procurement, and regulatory reporting, facilitating seamless integrations with other enterprise systems.

The Oracle Financials API offers an enterprise-grade, secure, and scalable framework optimized for developers building custom integrations and applications.

In this guide, you'll learn how to integrate with the Oracle Financials API, from setup and authentication to real-world use cases and best practices. Whether you're new to enterprise APIs or building complex financial integrations, this guide will help you implement Oracle Financials API integration the right way.

What is Oracle Financials and Why It Matters

Oracle Financials Cloud (part of Oracle Fusion Applications) is a cloud-based financial management software designed to manage enterprise financial operations like general ledger, accounts payable, accounts receivable, fixed assets, expenses, and financial reporting, all in one unified platform.

What Oracle Financials Does

Function Description
General Ledger Centralized accounting with multi-company, multi-currency, and intercompany support.
Accounts Payable Streamline invoice processing, supplier payments, and 1099 reporting.
Accounts Receivable Manage customer invoicing, collections, and cash application.
Fixed Assets Track asset lifecycle, depreciation, and capital planning.
Expense Management Process employee expenses with policy enforcement and audit trails.
Cash Management Bank reconciliation, cash positioning, and forecasting.
Procurement End-to-end procurement from requisition to payment.
Financial Reporting Generate real-time financial statements and regulatory reports.

Why Oracle Financials Matters to Organizations

Oracle Financials has become essential for enterprise financial management by combining global compliance capabilities, real-time analytics, and extensive automation into a single cloud-based solution. It helps organizations eliminate manual work, ensure regulatory compliance, and make data-driven financial decisions with confidence.

1. Enterprise Automation

Oracle Financials automates complex financial workflows such as intercompany reconciliations, period-end closing, invoice matching, and asset depreciation. This not only saves valuable time for finance teams but also reduces manual errors, ensuring accurate and efficient accounting operations.

2. Global Compliance

With built-in support for local regulatory requirements across 200+ countries, Oracle Financials maintains accurate and compliant financial data. This ensures that multinational organizations meet statutory reporting requirements while minimizing compliance risks.

3. Financial Visibility

With unified financial data and embedded analytics, Oracle Financials provides real-time insights into an organization's financial health. Finance leaders can easily track performance metrics, cash flow, and profitability across business units, empowering them to make data-driven decisions with confidence.

4. Seamless Integration

Oracle Financials integrates effortlessly with other Oracle Cloud applications (SCM, HCM, CX) and hundreds of third-party applications through standardized APIs. This ecosystem connectivity eliminates data silos, allowing enterprises to run all key operations through a single, connected platform.

5. Scalability and Flexibility

Whether it's a growing mid-market company or a global enterprise, Oracle Financials scales effortlessly with organizational needs. Its multi-entity support, role-based security, and API-driven extensibility make it adaptable to growing financial complexity without sacrificing performance or compliance.

Important Terminology for Oracle Financials API

Before integrating with the Oracle Financials API, it's important to understand a few key terms that define how authentication, data access, and communication work within the Oracle ecosystem.

  • Instance/Tenant: Each Oracle Cloud "instance" represents a separate company account with its own financial data and settings. API connections are always made to a specific instance URL.

  • Client ID & Client Secret: These are unique credentials generated when you register your application in Oracle Cloud Console. They authenticate your application during the OAuth 2.0 process.

  • OAuth 2.0: The secure authorization framework used by Oracle's REST APIs. It allows your application to access user data safely without needing their password directly.

  • Access Token: A short-lived JWT token that must be included in API request headers to authenticate calls to Oracle endpoints. Access tokens typically expire after 3600 seconds.

  • Refresh Token: A long-lived token used to obtain a new access token without requiring re-authentication. It helps maintain continuous integration sessions securely.

  • Roles & Privileges: Define the specific permissions your app requires, for example, GL_JOURNAL_ENTRY_IMPORT_DUTY for managing journal entries, or AP_INVOICE_IMPORT_DUTY for processing invoices.

  • Rate Limits: Oracle enforces limits on how many API calls an app can make per minute or per day. This helps ensure performance stability across the platform. Check the Oracle Cloud API Rate Limits documentation for details.

  • Business Objects: The core data entities in Oracle Financials (e.g., Invoices, Suppliers, Journals) exposed through REST API endpoints.

Oracle Financials API Integration Use Cases

The Oracle Financials API enables enterprises and developers to connect accounting workflows with other systems, from procurement and HR to e-commerce and analytics platforms. These integrations eliminate manual work, improve data accuracy, and create real-time financial visibility across the enterprise.

Below are some of the most impactful Oracle Financials integration scenarios and how they can transform your business processes.

1. Automated Invoice Processing and Matching

Enterprises that receive thousands of invoices from suppliers often need to automate invoice processing and three-way matching. By integrating your procurement systems with the Oracle Financials API, invoices can be automatically created, matched to purchase orders, and routed for approval without manual entry.

How It Works:

  • When an invoice is received via email or supplier portal, your application sends a request to the Oracle Invoices API to create a new invoice.

  • The system automatically matches invoices to purchase orders and receipts using Oracle's matching APIs.

  • When approvals are completed, payments are processed automatically through the Payments endpoint.

  • Webhook-style notifications can be configured to alert your system when invoice status changes.

2. Real-Time Financial Consolidation and Reporting

Multinational corporations need to consolidate financial data from multiple subsidiaries for reporting. With the Oracle Financials API, financial data such as journal entries, balances, and transactions can be synchronized in real time for consolidated reporting.

How It Works:

  • Subsidiary systems post journal entries to Oracle General Ledger via the Journals API.

  • Oracle performs automatic currency conversion and intercompany eliminations.

  • Consolidated financial statements are generated using the Financial Reporting API.

  • BI tools like Oracle Analytics or Tableau pull consolidated data for executive dashboards.

3. Employee Expense Management Integration

Companies using corporate card programs or travel management systems need seamless expense reconciliation. Integrating these systems with the Oracle Financials API allows for automatic expense reporting and reimbursement.

How It Works:

  • Corporate card feeds post transactions to the Credit Card Transactions API.

  • Employees submit expenses through mobile apps that integrate with the Expense Reports API.

  • The system enforces company policies and automatically matches receipts.

  • Approved expenses flow to Accounts Payable for reimbursement via the Payments API.

4. Fixed Assets Lifecycle Management

Organizations with significant capital assets need to track depreciation, maintenance, and disposal. Integrating IoT systems and maintenance platforms with Oracle Fixed Assets provides complete asset tracking.

How It Works:

  • IoT sensors post usage data to calculate depreciation via the Assets API.

  • Maintenance systems update asset condition and repair history.

  • Procurement systems trigger asset creation when capital items are received.

  • Disposal systems update asset status and calculate gains/losses.

5. Customer Billing and Collections Synchronization

Billing systems and collection agencies need real-time access to accounts receivable data. A two-way integration between these systems ensures that customer data, billing details, and payment history are always up to date.

How It Works:

  • Billing systems create invoices via the Receivables Invoices API.

  • Payment gateways update payment status through the Receipts API.

  • Collection agencies access aging reports via the Customer Balances API.

  • CRM systems display real-time customer financial status.

6. Procurement-to-Pay Automation (Bonus Use Case)

Enterprises can create seamless procurement-to-pay processes by integrating Oracle Financials with procurement systems.

How It Works:

  • Requisitions from procurement systems create purchase orders via the Purchase Orders API.

  • Goods receipt in warehouse systems triggers three-way matching.

  • Supplier portals submit invoices directly to the Invoices API.

  • Payment status updates flow back to suppliers through supplier portals.

Oracle Financials API Architecture and Design Principles

RESTful API: The API follows RESTful conventions with predictable, resource-oriented URLs and uses HTTP verbs (GET, POST, PUT, PATCH, DELETE) to manipulate data.

JSON Payloads: Request and response bodies are structured in JSON, providing language-agnostic compatibility.

API Versioning: The API version number (e.g., 11.13.18.05) is specified in endpoint URLs, enabling backward compatibility and a smooth transition to newer API versions.

Rate Limiting: Oracle enforces tier-based rate limits to maintain service quality. Handling 429 Too Many Requests responses with retry logic is essential.

Error Reporting: HTTP status codes indicate general success or failure. Detailed error information and validation messages are provided in JSON response bodies.

Multi-Tenant Support: Integrations can connect to multiple Oracle instances (tenants), each requiring separate authentication and handling distinct data scopes.

Business Object Model: Uses the Fusion Applications Core (FA Core) data model providing consistent patterns across all Oracle Cloud applications.

Explore complete architectural details in the official Oracle Financials API Overview.

Secure Authentication with OAuth 2.0

Oracle Financials API uses industry-standard OAuth 2.0 authorization to authenticate apps and users securely:

App Registration: Developers create applications in Oracle Cloud Console to receive Client ID and Client Secret credentials.

Authorization Flows: Supports multiple OAuth 2.0 grant types including Client Credentials (for server-to-server) and Authorization Code (for user context).

Token Exchange: Applications exchange credentials for short-lived access tokens and longer-lived refresh tokens.

Role Management: Apps require specific roles and privileges like GL_JOURNAL_ENTRY_IMPORT_DUTY or AP_INVOICE_IMPORT_DUTY to obtain least-privilege access.

Token Management: Access tokens expire in 3600 seconds and require leveraging refresh tokens to maintain sessions without user intervention.

Security Best Practices: Secure client secrets and tokens; always use HTTPS, store secrets server-side, and avoid exposing credentials in client code.

Deep dive and implementation examples are available in the Oracle OAuth 2.0 guide.

Oracle Financials API Documentation Overview

The Oracle Financials API suite allows developers to connect accounting, procurement, assets, and other financial data to third-party applications securely using RESTful APIs and OAuth 2.0.

All Oracle Financials APIs return responses in JSON format and are designed to help businesses automate workflows, maintain data accuracy, and integrate seamlessly with other enterprise systems like CRM, HR systems, and supply chain platforms.

Oracle Financials API Categories and Functions

Here is your content converted into a clean table:

API Name Purpose / Key Use Cases Documentation Link
General Ledger API Core API for managing journals, ledgers, calendars, and balances. Ideal for accounting automation and financial consolidation. GL API Docs
Accounts Payable API Manage invoices, payments, suppliers, and holds. Used for invoice processing and supplier management automation. AP API Docs
Accounts Receivable API Handle customers, invoices, receipts, and adjustments. Essential for billing and collections integration. AR API Docs
Assets API Used for managing fixed assets, including creation, depreciation tracking, transfers, and disposals. FA API Docs
Expenses API Process expense reports, receipts, advances, and audits. Useful for employee expense management integration. Expenses API Docs
Cash Management API Manage bank accounts, statements, and reconciliations. Enables bank integration and cash positioning. CM API Docs
Procurement API Handle purchase orders, requisitions, and receipts. Essential for P2P automation. Procurement API Docs
Financial Reporting API Provides financial reports, balances, and inquiries. Ideal for BI dashboards and analytics. Reporting API Docs

Endpoint Structure

Each Oracle Financials API has a predictable REST-based structure that follows standard HTTP conventions (GET, POST, PUT, PATCH, DELETE).

Base URL:

https://{your-domain}.oraclecloud.com/fscmRestApi/resources/11.13.18.05/

Example Endpoints:

Get all suppliers: GET

https://{domain}.oraclecloud.com/fscmRestApi/resources/11.13.18.05/suppliers

Create a new invoice: POST

https://{domain}.oraclecloud.com/fscmRestApi/resources/11.13.18.05/invoices

Fetch journal entries: GET

https://{domain}.oraclecloud.com/fscmRestApi/resources/11.13.18.05/journalEntries

Each endpoint corresponds to a specific business object (e.g., invoices, suppliers, journals), and responses are returned in JSON format with consistent data structures.

Authenticating to Oracle Financials API

Before you can start making API requests, you must first obtain your Oracle Client ID and Client Secret. These credentials allow you to exchange them for an Access Token, which you'll include in your API requests to verify your identity and permissions.

Follow the steps below to generate your credentials:

Step 1: To start, visit the Oracle Cloud Console. If you don't already have an Oracle Cloud account, you'll need to sign up first.

Once logged in, navigate to Identity & Security → Domains → {Your Domain}. Click "Add Application" to begin the setup process. This will allow you to register your application and connect it to Oracle's API environment.

Step 2: Next, you'll be prompted to provide essential details about your app. Carefully fill out each field as follows:

  • Application Name: Enter a recognizable name for your integration (e.g., "Invoice Automation Tool").

  • Application Type: Choose "Confidential Application" for server-side integrations.

  • Authorization: Select the appropriate OAuth grant type (typically "Client Credentials" for server-to-server).

  • Redirect URI: Enter the callback URL where users are redirected after authentication (for Authorization Code flow).

  • Assigned Roles: Select the necessary roles for your integration (e.g., GL_JOURNAL_ENTRY_IMPORT_DUTY, AP_INVOICE_IMPORT_DUTY).

Once all fields are completed, review the configuration and click "Save."

Step 3: After creating the application, Oracle will generate two important credentials for you:

  • Client ID: A public identifier for your app.

  • Client Secret: A confidential key that acts like your app's password.
Note: Copy and securely store both credentials immediately. Oracle will not display the Client Secret again.

Step 4: With your Client ID and Client Secret ready, the next step is to exchange them for an Access Token.

You can do this by making a POST request to Oracle's OAuth 2.0 token endpoint:

https://{identity-domain}.identity.oraclecloud.com/oauth2/v1/token

Example request:

curl -X POST https://idcs-xxx.identity.oraclecloud.com/oauth2/v1/token \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials&scope=urn:opc:resource:consumer::all" \
  -u "<client_id>:<client_secret>"

Once your request is successful, Oracle will return an Access Token (and sometimes a Refresh Token) in the response body.

Step 5: Once you receive your access token, include it in the Authorization header of your API requests to authenticate successfully.

Example:

curl -X GET https://{domain}.oraclecloud.com/fscmRestApi/resources/11.13.18.05/invoices \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json"

For detailed instructions on formatting the request and understanding the response, refer to Oracle's OAuth 2.0 Token API documentation.

Step-by-Step: Building an Oracle Financials Cloud API Integration

Integrating with the Oracle Fusion Cloud Financials REST API provides powerful access to enterprise financial data and operations. This comprehensive, beginner-friendly guide (updated December 2025) covers setup to production, based on the latest Oracle documentation at REST API for Oracle Fusion Cloud Financials.

Note: Access requires an active Oracle Fusion Cloud Financials subscription. Server-to-server integrations commonly use OAuth 2.0 Client Credentials grant.

Step 1: Accessing Your Oracle Cloud Instance and Base URL

Gather your instance details first.

1. Log in to your Oracle Cloud Console (My Services dashboard).

2. Note your Financials REST base URL from your welcome email or service overview: typically

https://{your-pod}.fa.{data-center}.oraclecloud.com (e.g., https://yourcompany.fa.us2.oraclecloud.com).

3. The full REST path is: {base-url}/fscmRestApi/resources/{version}/ (current version often 11.13.18.05 or latest, e.g., /fscmRestApi/resources/11.13.18.05/).

For quick starts, see Get Started with REST APIs.

Step 2: Registering a Confidential Application for OAuth

Register an app in Identity Cloud Service (IDCS) or IAM to obtain credentials.

Steps (detailed in Retrieving Bearer Token Using IDCS OAuth):

1. Sign in to Oracle Cloud Console as an administrator.

2. Navigate to Identity & Security > Domains > Your Identity Domain.

3. Go to Applications > Add Application > Select Confidential Application.

4. Provide:

  • Name: e.g., "Financials Integration App".

  • Description.

  • Grant Type: Client Credentials (for server-to-server).

  • Scopes: Add required resources (e.g., Financials offline_access or specific URIs).

5. Assign necessary roles/privileges (e.g., for invoices: AP_ACCOUNTS_PAYABLE_INVOICES_DUTY).

6. Save, generate Client ID and Client Secret (store securely; secret shown once).

For role details, see Security Reference.

✅ You have Client ID and Secret.

Step 3: Obtaining an Access Token (OAuth 2.0 Client Credentials)

Exchange credentials for a Bearer token.

1. Identify your IDCS token endpoint: https://{identity-domain}.identity.oraclecloud.com/oauth2/v1/token.

POST request (example with cURL):

curl -X POST https://idcs-your-guid.identity.oraclecloud.com/oauth2/v1/token \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -u "{CLIENT_ID}:{CLIENT_SECRET}" \
  -d "grant_type=client_credentials&scope=urn:opc:resource:consumer::all"

Response: { "access_token": "JWT_TOKEN", "token_type": "Bearer", "expires_in": 3600 } (token ~1 hour).

For full examples, see Authentication Guide.

Token Management: Refresh before expiry (no refresh token in Client Credentials; re-request).

Step 4: Understanding the API Architecture (RESTful)

Oracle Financials uses standard REST with JSON payloads.

Key Features:

  • Base: https://{pod}.fa.{dc}.oraclecloud.com/fscmRestApi/resources/{version}/

  • Methods: GET (read), POST (create), PATCH (update), DELETE.

  • Pagination: limit, offset, totalResults.

  • Filtering: q parameter, fields, expand.

Full endpoints: All REST Endpoints.

Tools: cURL, Postman, or Oracle's examples.

Step 5: Building Your Integration (with Examples)

All requests include:

Authorization: Bearer {ACCESS_TOKEN}
Content-Type: application/json

Use Case 1: Fetching Payables Invoices (GET)

GET https://{base}/fscmRestApi/resources/11.13.18.05/invoices?limit=10

See Invoices GET Example.

Use Case 2: Creating a Payables Invoice (POST)

POST https://{base}/fscmRestApi/resources/11.13.18.05/invoices
Body: { "BusinessUnit": "Your BU", "Supplier": "Supplier Name", "InvoiceNumber": "INV-001", ... }

See Create Invoice Example.

Step 6: Testing Your Integration

  1. Use a test or sandbox environment (request via Oracle support).

  2. Start with read operations.

  3. Test token flow, error handling, pagination.

  4. Tools: cURL from docs examples or Postman collections.

Step 7: Moving to Production

  1. Switch to production instance URL and credentials.

  2. Implement retry logic for rate limits (vary by tier; monitor 429 responses).

  3. Secure secrets (use vaults).

  4. Monitor logs and performance.

  5. No native webhooks, use Oracle Integration Cloud for events or efficient polling.

How Knit Simplifies the Oracle Financials Integration

Integrating with the Oracle Financials API opens up powerful automation and financial data capabilities. However, building a direct integration requires handling complex OAuth 2.0 authentication, rate limits, data normalization, and ongoing API maintenance.

Knit simplifies all of this by acting as a unified integration platform that connects your application to Oracle Financials and dozens of other ERP, accounting, HR, and payroll systems through a single, standardized API. With Knit, you no longer need to write, test, and maintain separate integrations for each platform. Instead, you can connect once and access multiple systems seamlessly.

One Unified API for Oracle Financials and Other ERP Platforms

Traditionally, integrating directly with Oracle Financials requires managing multiple endpoints such as Invoices, Suppliers, Journals, and Payments. Each endpoint has its own schema, authentication flow, and pagination rules.

Knit replaces all of this complexity with a single Unified Accounting API that automatically handles the underlying differences between ERP systems like Oracle Financials, SAP S/4HANA, Microsoft Dynamics 365, and NetSuite.

With one integration to Knit, your app can instantly connect to multiple ERP systems without writing additional code for each provider. Knit automatically maps and transforms the data, so your developers can focus on building product features instead of managing API variations.

Simplified Authentication and Secure Data Access

Implementing OAuth 2.0 for Oracle Financials requires multiple steps, including handling client credentials, token management, and role assignments. Knit makes this simple through its prebuilt Oracle Financials connector, which manages the entire authentication process automatically.

When a customer connects their Oracle Financials instance through Knit, the platform securely handles authentication, token exchange, and ongoing token refreshes. Your application then receives a unified access token from Knit's API, allowing you to retrieve Oracle Financials data without dealing with the complexities of OAuth directly.

All sensitive credentials are encrypted and securely stored by Knit using enterprise-grade security and SOC 2-compliant infrastructure. This approach not only saves development time but also ensures your app stays compliant with modern data protection standards.

Automatic Data Normalization and Field Mapping

Every ERP system structures its data differently; for example, how Oracle Financials represents invoices, payments, or journal entries may differ from SAP or Microsoft Dynamics. Knit eliminates these inconsistencies by normalizing all data into a consistent schema across platforms.

Through the Knit Unified Data Model, your application can read and write data using a single, predictable format, regardless of which ERP software the customer uses. Once your integration works with Knit's schema, it automatically works with any supported ERP platform, including Oracle Financials, without requiring additional mapping or transformation logic.

Real-Time Sync with Efficient Polling

Polling Oracle Financials' API frequently to detect changes can quickly hit its API rate limits. Knit avoids this by offering optimized synchronization strategies that balance timeliness with API efficiency.

For example, if a new invoice is created or updated in Oracle Financials, Knit can detect this change through intelligent polling and instantly push an update to your system. This ensures that your platform always reflects the latest financial data without constant polling or delay.

Knit's synchronization engine allows you to configure sync frequency and change detection strategies. This keeps your application synchronized while reducing unnecessary API calls, improving performance and reliability.

Faster Integration and Time to Market

Building and maintaining a direct Oracle Financials integration can take months for enterprise-grade implementations. Knit's plug-and-play integration model significantly shortens this timeline. Using Knit's SDKs, sandbox testing environments, and detailed developer documentation, you can build, test, and launch a complete Oracle Financials integration in weeks instead of months.

This means your team can focus on core product functionality instead of spending time maintaining authentication logic, handling pagination, or debugging API errors. Knit continuously monitors API changes across platforms and automatically updates its connectors, ensuring your integration never breaks when Oracle updates its endpoints.

Oracle Financials API FAQs

If you still have questions about using or integrating with the Oracle Financials API, we've answered some of the most common ones below to help you get started smoothly.

Q. What are the most commonly used Oracle Financials API endpoints?

A. Oracle Financials provides a wide range of REST API endpoints across its financial modules. The most frequently used include:

  • Invoices API for creating, updating, and retrieving invoices

  • Suppliers API for managing supplier records

  • Journals API for accessing and modifying journal entries

  • Payments API for processing and tracking payments

For the complete list of parameters and modules, refer to Oracle’s official Financials REST API documentation.

Q. Which programming languages can I use with the Oracle Financials API?

A. The REST APIs are fully language-agnostic. You can use any programming language that supports HTTP requests and JSON handling. Common choices include:

  • Java

  • Python

  • Node.js

  • C#

  • PHP

While Oracle does not offer dedicated SDKs for Financials, OCI SDKs can still help with authentication and cloud resource interactions.

Q. Is the Oracle Financials API free to use?

A. The API is included as part of an Oracle Financials Cloud subscription. There is no additional cost for using the API, but production usage requires an active paid subscription. Developers can use sandbox or test environments before going live. For details on licensing, consult your Oracle account representative.

Q. What API rate limits does Oracle Financials enforce?

A. Oracle enforces rate limits to maintain system stability. Limits vary depending on your subscription tier, the type of request (read vs. write), and the time window. Typical ranges include:

  • Read operations: 100 - 1000 requests/minute

  • Write operations: 50 - 500 requests/minute

Exact limits depend on your contract and configuration.

Q. How can I avoid hitting Oracle’s rate limits?

A. Design an efficient integration by fetching only updated data, using pagination, caching responses, and distributing requests instead of sending them in spikes. Batch operations and Oracle’s bulk data features are also recommended when handling large volumes.

Q. Does Oracle Financials provide webhooks for real-time updates?

A. Oracle Financials does not offer traditional webhooks, but provides alternatives for real-time or near real-time data sync, such as:

  • Business Events (via Oracle Integration Cloud)

  • APIs that support filtering by last update date

  • Oracle Integration Cloud event-driven flows

  • Scheduled extracts for regular data updates

For many use cases, optimized polling with change detection is recommended.

Q. Can I test the Oracle Financials API before going live?

A. Yes. Oracle offers sandbox environments, test tenants, demo instances, and limited access through the Oracle Cloud Free Tier. These allow you to safely test and refine your integration before deploying it to production.

Q. Where can I find support or community discussions for the Oracle Financials API?

A. If you encounter issues or have technical questions while building your integration, you can get help from several official and community sources:

#1 in Ease of Integrations

Trusted by businesses to streamline and simplify integrations seamlessly with GetKnit.