# getWorkflow

The `getWorkflow` method is the standard way of getting a whole workflow with instances of all associated modules.

**Import**: imported as follows

```typescript
import { getWorkflow } from '@inverter-network/sdk'
```

**Parameters**: an object with the following properties

{% code overflow="wrap" %}

```ts
{
    // the public client / provider to make RPC calls
    publicClient: PublicClient
    // the wallet client to sign and submit transactions
    walletClient?: WalletClient
    // the address of a deployed orchestrator proxy contract
    orchestratorAddress: 0x${string}
    // includes a specification of the modules used by the workflow. That is which Authorizer, Funding Manager, Payment Processor and optional logic modules are used.
    requestedModules?: MixedRequestedModules
    // name of the issuance token - strongly types the return
    issuanceTokenType?: WorkflowIssuanceToken
    // name of the funding token - strongly types the return
    fundingTokenType?: WorkflowToken
}
```

{% endcode %}

*Note*: passing a requestedModules will ensure typesafety and type completion.

**Returns**: on object with the following properties

```ts
// each ModuleName corresponds to the name of a module (e.g. FM_DepositVault_v1) 
// and each Module is a module instance as described in the previous section
{
    orchestrator: GetModuleReturnType
    fundingManager: GetModuleReturnType
    authorizer: GetModuleReturnType
    paymentProcessor: GetModuleReturnType
    optionalModule: {
        [name: ModuleName]: GetModuleReturnType
    }
    fundingToken: {
        address: `0x${string}`
        module: GetModuleReturnType
        decimals: number
        symbol: string
    }
    // issuance token is conditional based on modules which use issuance logic
    issuanceToken: {
        address: `0x${string}`
        module: GetModuleReturnType
        decimals: number
        symbol: string
    }
}
```
