# Define Sources

Let's take a look at what sources we may use and create the configuration, credentials, and refreshes we need to use.

* Do we want to put connection strings in the <mark style="color:green;">**appsettings.json**</mark> and read them?
  * Create the json sections and keys
  * Optionally, <mark style="color:red;">**encrypt them**</mark>
* Do we want to implement a property loader?
  * See [Property Loaders](/perigee-and-beyond/extending-loaders.md)
* Do we communicate with anything on the web?
  * See [Restsharp Authenticators](/core-modules/credential-management/restsharp-authenticator.md) and [Credential Management](/core-modules/credential-management.md).&#x20;
  * Read all about the [HTTP(S) communication and extensions](/core-modules/integration-utilities/http-s-restsharp.md) here.
* Do we need to define additional services to dependency inject?
  * See the [Core Module: Application](/core-modules/perigeeapplication.md).
* Do we have any important information we need to keep in synchronized state like pull dates, offsets or delta keys?
  * Define a [Watermark ](/core-modules/integration-utilities/watermarking.md)for all basic data types
  * Or define a custom [FileSync ](/core-modules/file-system-storage/filesync-+-cache.md)to track a rich data object
  * Look at the [Limiter ](/core-modules/integration-utilities/limiter.md)for resource restricted calls.
* Do you need to have things run on a timer?
  * Check out the [CRON thread](/core-modules/event-sources/scheduled-logic/cron-thread.md).
  * Have a [scheduler ](/core-modules/event-sources/scheduled-logic/scheduler.md)pick up items from a remote source, like a database.
  * Have a network of [Sync Agent's](/core-modules/event-sources/scheduled-logic/sync-agent.md) communicating and performing refresh tasks.&#x20;
* Do you need to coordinate a list of steps and NEVER have a failure cause the process to break?
  * Create a [Transaction Coordinator](/core-modules/integration-utilities/transaction-coordinator.md).
* Talk with third parties:
  * [Salesforce](/core-modules/event-sources/watchers/salesforce.md)
  * [Microsoft Graph](/core-modules/third-party/microsoft-graph.md)
  * [DataVerse](/examples-and-demos/graph-delegated-authorization-+-dataverse.md#for-dataverse)
  * [SmartSheets](/core-modules/third-party/smartsheets.md)
  * [Azure Service Bus](/examples-and-demos/azure-service-bus.md)
* Do you have any instances of:
  * Testing [Network Connectivity](/core-modules/utility-classes/network-utility.md)?
  * [Sorting dependencies](/core-modules/utility-classes/topological-sorting.md)?
  * [Working in Parallel](/core-modules/perigee-in-parallel.md)?&#x20;
  * Sending [notifications](/core-modules/alert-managers.md)?
  * Run logic through a [behavior tree](/core-modules/utility-classes/behavior-trees.md)?
  * Sort and [query hierarchical data](/core-modules/utility-classes/nested-sets.md)?


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.perigee.software/architecting-your-app/define-sources.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
