# Types

> Every TypeScript type, helper function and constant that @nodaro/sdk exports, grouped by resource, with the page that documents each one.

Source: https://nodaro.ai/docs/developers/sdk/types

**`@nodaro/sdk`** exports a TypeScript type for every method's input and output, plus a few helper functions and constants. Import types with `import type`, so they add nothing to your bundle:

```ts

const { data }: { data: Workflow } = await client.workflows.get(id)
```

Types follow the wire format of the API. A `Job` uses snake_case fields, such as `output_data` and `created_at`, because the API sends them that way. A `Workflow` and a `WorkflowExecution` use camelCase. `Object`, the object type, shares its name with the JavaScript global, so import it under another name when you need both: `import type { Object as NodaroObject } from "@nodaro/sdk"`.

## Client, auth and errors

| Export | Kind | Documented in |
| --- | --- | --- |
| `createClient`, `NodaroClient` | Function, class | [Client](https://nodaro.ai/docs/developers/sdk/client) |
| `ClientOptions`, `UserIdentity`, `MeOrganizations` | Types | [Client](https://nodaro.ai/docs/developers/sdk/client) |
| `Auth`, `StaticTokenAuth`, `CallbackAuth`, `supabaseAuth` | Type, classes, function | [Authentication](https://nodaro.ai/docs/developers/sdk/auth) |
| `createSharedSupabaseClient` | Function, from `@nodaro/sdk/supabase` | [Authentication](https://nodaro.ai/docs/developers/sdk/auth#createsharedsupabaseclientoptions) |
| `NodaroError`, `UnauthorizedError`, `ForbiddenError`, `NotFoundError`, `RateLimitedError`, `InsufficientCreditsError`, `StorageExceededError`, `WorkflowConflictError`, `JobBlockedError`, `JobFailedError`, `JobTimeoutError`, `JobAbortedError`, `JobHeldError`, `StudioOpError`, `StudioPreviewUnavailable`, `StudioPreviewAppliedError` | Classes | [Errors](https://nodaro.ai/docs/developers/sdk/errors) |
| `WorkflowConflictCode`, `throwFromResponse` | Type, function | [Errors](https://nodaro.ai/docs/developers/sdk/errors) |

## Workflows, runs and nodes

| Export | Documented in |
| --- | --- |
| `Workflow`, `ListWorkflowsParams`, `CreateWorkflowInput`, `UpdateWorkflowInput`, `RunWorkflowParams`, `RunWorkflowResult` | [Workflows and projects](https://nodaro.ai/docs/developers/sdk/workflows) |
| `Project`, `CreateProjectInput`, `UpdateProjectInput` | [Workflows and projects](https://nodaro.ai/docs/developers/sdk/workflows) |
| `GenericNode`, `GenericEdge`, `WorkflowExport`, `WorkflowExportCharacter`, `WorkflowExportObject`, `WorkflowExportLocation` | [Workflows and projects](https://nodaro.ai/docs/developers/sdk/workflows) |
| `Job`, `JobStatus`, `JobStatusResult`, `JobErrorHint`, `SafetyBlockHint`, `PolicyBlockHint`, `CreditStatus`, `CancelJobResult`, `DeleteJobResult`, `ListJobsParams`, `ListJobsPage` | [Jobs and executions](https://nodaro.ai/docs/developers/sdk/jobs-and-executions) |
| `WorkflowExecution`, `WorkflowExecutionSummary`, `NodeExecutionState`, `NodeExecutionStatus`, `ExecutionStatus`, `ExecutionTriggerType`, `ListExecutionsForWorkflowParams`, `ListExecutionsPage`, `CancelExecutionParams` | [Jobs and executions](https://nodaro.ai/docs/developers/sdk/jobs-and-executions) |
| `StopVideoProResult`, `ContinueVideoProResult` | [Jobs and executions](https://nodaro.ai/docs/developers/sdk/jobs-and-executions#clientvideopro) |
| `NodeDescriptor`, `NodeCategory`, `OutputType`, `NodeInputField`, `NodeInputSchema` | [Run nodes](https://nodaro.ai/docs/developers/sdk/nodes) |
| `RunNodeResult`, `RunNodeAdjustment`, `NodeJobOutput`, `RunAndWaitOptions`, `RunManyResult` | [Run nodes](https://nodaro.ai/docs/developers/sdk/nodes) |
| `GenerateImageParams`, `GenerateVideoParams`, `TextToVideoParams`, `StructuredReferenceParams`, `ConnectedReference`, `DescribedReference` | [Run nodes](https://nodaro.ai/docs/developers/sdk/nodes#typed-parameters) |
| `PromptAffixFields` | The node-data fields for [pre and post text](https://nodaro.ai/docs/concepts/prompt-pre-post-text): `promptPrefix` and `promptSuffix` |
| `PublishedApp`, `PublishedAppDetail`, `ListAppsParams`, `ListAppsResult`, `AppRunResult`, `RunAppOptions`, `AppRun`, `ListAppRunsParams`, `DeleteAppRunResult` | [Apps and templates](https://nodaro.ai/docs/developers/sdk/apps-and-templates) |
| `Template`, `TemplateBrowseCard`, `TemplateSort`, `BrowseTemplatesParams`, `BrowseTemplatesResult`, `CloneTemplateParams`, `CloneTemplateResult` | [Apps and templates](https://nodaro.ai/docs/developers/sdk/apps-and-templates) |
| `TutorialCategory`, `TutorialVideoItem`, `TutorialFlowItem` | [Apps and templates](https://nodaro.ai/docs/developers/sdk/apps-and-templates#clienttutorials) |
| `LlmStructuredInput`, `LlmStructuredResult`, `LlmStructuredJobInput`, `LlmStructuredJobOutput` | [LLM and Reduce](https://nodaro.ai/docs/developers/sdk/llm-and-reduce) |
| `ReduceStrategyId`, `ReduceMeta`, `ReduceInput`, `ReduceResult` | [LLM and Reduce](https://nodaro.ai/docs/developers/sdk/llm-and-reduce) |

## Media, voices and editing

| Export | Documented in |
| --- | --- |
| `UploadResult`, `LibraryAsset`, `ListLibraryParams`, `ListLibraryResult` | [Media and uploads](https://nodaro.ai/docs/developers/sdk/media-and-uploads) |
| `VideoMetadata`, `DownloadVideoProgress`, `MediaProcessInput`, `MediaProcessResult`, `OverlayPlacement` | [Media and uploads](https://nodaro.ai/docs/developers/sdk/media-and-uploads) |
| `AddCaptionsInput`, `CaptionLookInput`, `CaptionSegmentInput`, `CaptionEntry` | [Media and uploads](https://nodaro.ai/docs/developers/sdk/media-and-uploads#mediaaddcaptionsinput) |
| `Voice`, `SharedVoice`, `VoiceClone`, `VoiceLibraryParams`, `VoiceLibraryResponse` | [Voices and audio](https://nodaro.ai/docs/developers/sdk/voices-and-audio) |
| `VoiceChangerProInput`, `VoiceChangerProVoice`, `VcpAnalyzeInput`, `VcpAnalysis`, `VcpAnalysisSpeaker`, `VcpExportInput`, `VcpExportTrack` | [Voices and audio](https://nodaro.ai/docs/developers/sdk/voices-and-audio#voicesrecastinput) |
| `VoiceDesignInput`, `VoiceRemixInput`, `DubbingInput`, `AudioFxPreset` | [Voices and audio](https://nodaro.ai/docs/developers/sdk/voices-and-audio) |
| `TranscribeWord`, `TranscribeJobOutput`, `TranscribeProvider`, `TranscribeLane` | [Voices and audio](https://nodaro.ai/docs/developers/sdk/voices-and-audio#audiotranscribeinput) |
| `EditJobResult`, `SilenceDetectInput`, `SilenceRanges`, `AudioSyncInput`, `AudioSyncSource`, `AudioSyncOffset`, `AudioSyncResult`, `ApplyEdlInput`, `EditPlanInput`, `EditPlanSource`, `EditPlanMode`, `EditPlanTier`, `Edl`, `EdlClipSet`, `ChapterSet`, `Transcript` | [Editing](https://nodaro.ai/docs/developers/sdk/editing) |
| `GenerateScene3DParams`, `EditScene3DParams`, `RenderScene3DParams`, `Scene3DJobOutput`, `Scene3DCapabilities`, `Scene3DAuthoringEngine`, `RetainedScene3DEditParams`, `RetainedScene3DEditResult`, `Scene3DDelivery`, `Scene3DDeliveryAsset`, `Scene3DDeliveryAssetKind` | [3D scenes](https://nodaro.ai/docs/developers/sdk/scenes-3d) |

## Assets

| Export | Documented in |
| --- | --- |
| `Character`, `CharacterDetail`, `CharacterUsage`, `ReferencePhoto`, `ReferencePhotoKind`, `UpsertCharacterInput`, `UpsertCharacterResult`, `ListCharactersParams`, `ListCharactersResult`, `DuplicateCharacterInput`, `GenerateCharacterInput`, `GenerateCharacterResult`, `GenerateAssetInput`, `GenerateMotionInput`, `ApprovePortraitResult`, `RecaptionResult`, `CharacterAspectRatio`, `EntityStyle` | [Characters](https://nodaro.ai/docs/developers/sdk/characters) |
| `Location`, `LocationDetail`, `LocationReferencePhoto`, `LocationReferencePhotoKind`, `CreateLocationInput`, `UpdateLocationInput`, `UpdateLocationResult`, `ListLocationsParams`, `GenerateLocationInput`, `GenerateLocationResult`, `GenerateLocationAssetInput`, `GenerateSurroundContinuationInput`, `ApproveMainImageResult`, `RecaptionLocationResult`, `LocationAssetType`, `LocationAttachColumn`, `SurroundDirection` | [Locations](https://nodaro.ai/docs/developers/sdk/locations) |
| `Object`, `ObjectDetail`, `ObjectCategory`, `ObjectReferencePhoto`, `ObjectReferencePhotoKind`, `CreateObjectInput`, `UpdateObjectInput`, `UpdateObjectResult`, `UpsertObjectInput`, `UpsertObjectResult`, `ListObjectsParams`, `GenerateObjectInput`, `GenerateObjectResult`, `GenerateObjectAssetInput`, `GenerateObjectAssetResult`, `GenerateObjectMotionInput`, `GenerateObjectMotionResult`, `ApproveObjectMainImageResult`, `RecaptionObjectResult`, `ObjectAssetType`, `ObjectAttachColumn`, `ObjectAspectRatio` | [Objects and creatures](https://nodaro.ai/docs/developers/sdk/objects-and-creatures) |
| `Creature`, `CreatureDetail`, `CreatureReferencePhoto`, `CreatureReferencePhotoKind`, `CreateCreatureInput`, `UpdateCreatureInput`, `UpdateCreatureResult`, `UpsertCreatureInput`, `UpsertCreatureResult`, `ListCreaturesParams`, `GenerateCreatureInput`, `GenerateCreatureResult`, `GenerateCreatureAssetInput`, `GenerateCreatureAssetResult`, `GenerateCreatureMotionInput`, `GenerateCreatureMotionResult`, `ApproveCreatureMainImageResult`, `RecaptionCreatureResult`, `CreatureAssetType`, `CreatureAttachColumn`, `CreatureAspectRatio` | [Objects and creatures](https://nodaro.ai/docs/developers/sdk/objects-and-creatures#clientcreatures) |
| `CommunityCard`, `CommunityEntityType`, `CommunitySort`, `CommunityReportReason`, `BrowseCommunityParams`, `BrowseCommunityResult`, `CloneListingResult`, `FavoriteListingResult`, `ReportListingResult` | [Community library](https://nodaro.ai/docs/developers/sdk/community) |

## Productions

| Export | Documented in |
| --- | --- |
| `StudioProduction`, `StudioProductionDetail`, `StudioSkillResponse`, `StudioValidatePlanResponse`, `StudioPlanIssue`, `StudioListProductionsResponse`, `ListStudioProductionsOptions`, `GetProductionOptions`, `StudioExportPlanOptions`, `StudioExportPlanResponse`, `StudioExportStep` | [Studio productions](https://nodaro.ai/docs/developers/sdk/studio) |
| `StudioCreateProductionRequest`, `StudioProductionResponse`, `StudioImportSummary`, `StudioClientRequestId`, `StudioOpsRequest`, `StudioOpsResponse`, `StudioOpsReceipt`, `StudioOpsImpact`, `StudioOpClass`, `StudioOpsDryRunReceipt`, `StudioOpsDryRunResponse`, `StudioReconcileResponse` | [Studio productions](https://nodaro.ai/docs/developers/sdk/studio#productionsopsproductionid-input) |
| `StudioGenerateRequest`, `StudioGenerateOptions`, `StudioGenerateResult`, `StudioGenerateEstimate`, `StudioGenerateResponse`, `StudioVideoLane`, `StudioDescribeRequest`, `StudioFrameRequest`, `StudioVoiceRequest`, `StudioRevoiceRequest`, `StudioMusicRequest`, `StudioMediaResponse`, `StudioJobStartedResponse`, `StudioCloneRequest` | [Studio productions](https://nodaro.ai/docs/developers/sdk/studio#generate-stills-and-clips) |
| `StudioProductionCapabilities`, `StudioKeyframeRecord`, `StudioProductionRecord`, `StudioProductionReply`, `StudioEditInput`, `StudioKeyframeGenerationInput`, `StudioKeyframeAcceptanceInput`, `StudioShotGenerationInput`, `StudioGenerationReply`, `StudioDocumentJson` | [Studio productions](https://nodaro.ai/docs/developers/sdk/studio#clientstudio-planned-frames) |
| `Shot`, `ShotMode`, `ShotEntityRef`, `CreateShotInput`, `UpdateShotInput` | [Studio productions](https://nodaro.ai/docs/developers/sdk/studio#clientshots) |
| `CreateRecastInput`, `EstimateRecastInput`, `RecastEstimate`, `RecastRunSnapshot`, `ResolveRecastGateInput`, `RecastScriptValidation`, `RecastScriptValidationError`, `RecastScriptImportResult` | [Recast](https://nodaro.ai/docs/developers/sdk/recast) |
| `RecastAudioManifestV1`, `RecastAudioLayerName`, `RecastAudioMix`, `RecastAudioMixControl`, `RecastAudioSectionReplacement`, `RecastRescoreReplacement`, `RecastRescoreOperation`, `EstimateRecastRescoreInput`, `RecastRescoreRequestV2`, `RecastRescoreQuote`, `RecastRescoreResponse` | [Recast](https://nodaro.ai/docs/developers/sdk/recast#change-the-music-mix) |
| `PipelineStageName`, `BranchPipelineInput`, `BranchPipelineResult`, `ChatTurn`, `ChatStageResult`, `ApplyChatProposalResult` | [Pipelines](https://nodaro.ai/docs/developers/sdk/pipelines) |
| `CopilotThread`, `CopilotThreadWorkflow`, `CopilotSurface`, `CopilotRunMode`, `CopilotModelTier`, `CopilotMessage`, `CopilotMessagePart`, `CreateCopilotThreadInput`, `CopilotStreamOptions`, `CopilotStreamFrame` and the frame data types | [Copilot](https://nodaro.ai/docs/developers/sdk/copilot) |

## Account and catalogs

| Export | Documented in |
| --- | --- |
| `ModelSummary`, `ModelsListResult`, `ListModelsOptions`, `UserBalance`, `ModelCostsResult` | [Models and credits](https://nodaro.ai/docs/developers/sdk/models-and-credits) |
| `PickerCatalog`, `PickerCatalogSummary`, `PickerOption`, `PickerDimension`, `PickerCatalogSection`, `GetPickerCatalogOptions` | [Pickers, presets and prompts](https://nodaro.ai/docs/developers/sdk/pickers-and-prompts) |
| `CatalogsListResponse`, `ProjectedCatalog`, `ProjectedCatalogOption`, `ProjectedCatalogDimension`, `ProjectedCatalogSection` | [Pickers, presets and prompts](https://nodaro.ai/docs/developers/sdk/pickers-and-prompts#clientcatalogs) |
| `NodePreset`, `NodePresetGroup`, `FactoryPresetsResult` | [Pickers, presets and prompts](https://nodaro.ai/docs/developers/sdk/pickers-and-prompts#clientpresets) |
| `AnalyzeInput`, `AnalyzeResult`, `GenerateInput`, `EnhanceInput`, `PromptResult`, `WizardQuestion`, `WizardOption`, `WizardSelection`, `RecommendedModel`, `WizardNodeContext` | [Pickers, presets and prompts](https://nodaro.ai/docs/developers/sdk/pickers-and-prompts#clientprompthelper) |
| `OrganizationView`, `OrganizationSummary`, `OrgMemberView`, `OrgKind`, `OrgRole`, `OrgStatus`, `OrgSettings`, `OrgAuditEntry`, `OrgPage`, `OrgErrorCode`, `MemberStatus`, `CreateOrgInput`, `InviteInput`, `ListInvitationsOptions` | [Organizations and workspaces](https://nodaro.ai/docs/developers/sdk/organizations) |
| `InvitationView`, `InvitationDelivery`, `InvitationPreview`, `InvitationState`, `JoinCodeView` | [Organizations and workspaces](https://nodaro.ai/docs/developers/sdk/organizations) |
| `WorkspaceView`, `WorkspaceSummary`, `WorkspaceMemberView`, `WorkspaceRole`, `WorkspaceSettings`, `CreateWorkspaceInput` | [Organizations and workspaces](https://nodaro.ai/docs/developers/sdk/organizations#clientworkspaces) |
| `UsageQuery`, `UsageGroupBy`, `UsageReport`, `UsageReportRow`, `UsageReportTotals`, `UsageVarianceRow`, `UsageLogEntry` | [Organizations and workspaces](https://nodaro.ai/docs/developers/sdk/organizations#organization-usage) |
| `DeveloperApp`, `DeveloperAppScope`, `DeveloperAppStatus`, `DeveloperAppKind`, `CreateDeveloperAppInput`, `UpdateDeveloperAppInput`, `CreateDeveloperAppResult`, `RotateSecretResult` | [OAuth and developer apps](https://nodaro.ai/docs/developers/sdk/developer-apps) |
| `ExchangeCodeInput`, `AccessTokenResponse`, `OAuthAppInfo` | [OAuth and developer apps](https://nodaro.ai/docs/developers/sdk/developer-apps#clientoauth) |

## Helper functions and constants

These are values, not types, so import them without `type`.

| Export | What it is |
| --- | --- |
| `nodeStateMayCarryOutput(status)`, `OUTPUT_BEARING_NODE_STATUSES` | Whether a node state can carry `output`: `completed` and `failed`. See [Jobs and executions](https://nodaro.ai/docs/developers/sdk/jobs-and-executions#executionsgetid). |
| `isStudioGenerateEstimate(result)` | Tells a generation quote from a started run. See [Studio productions](https://nodaro.ai/docs/developers/sdk/studio#generate-stills-and-clips). |
| `unwrapEditPlanOutput(outputData)` | Reads an edit plan job's output as an EDL, a list of EDLs or chapters. See [Editing](https://nodaro.ai/docs/developers/sdk/editing#editeditplaninput). |
| `throwFromResponse(status, body)` | Throws the error class that matches an API answer. See [Errors](https://nodaro.ai/docs/developers/sdk/errors#throwfromresponsestatus-body). |
| `PROMPT_PREFIX_KEY`, `PROMPT_SUFFIX_KEY` | The node-data keys of pre and post text. |
| `WORKSPACE_HEADER` | The name of the workspace header, `X-Nodaro-Workspace`. |
| `USAGE_GROUP_BYS` | The groupings a usage report accepts. |
| `LOCATION_ASSET_TYPES`, `LOCATION_ATTACH_COLUMNS`, `SURROUND_DIRECTIONS` | The allowed location variant types, collections and surround directions. |
| `OBJECT_ASSET_TYPES`, `OBJECT_ATTACH_COLUMNS`, `OBJECT_ASPECT_OPTIONS`, `OBJECT_ASPECT_DEFAULTS` | The allowed object variant types, collections and aspect ratios. |
| `CREATURE_ASSET_TYPES`, `CREATURE_ATTACH_COLUMNS`, `CREATURE_ASPECT_OPTIONS`, `CREATURE_ASPECT_DEFAULTS` | The same lists for creatures. |
| `CHARACTER_STYLES`, `CHARACTER_ASPECT_OPTIONS`, `CHARACTER_ASPECT_DEFAULTS` | The character styles and aspect ratios. |
| `SCENE3D_DELIVERY_ASSET_USAGE` | The allowed pairs of delivery file kind and usage. |

Every resource class, such as `WorkflowsResource` or `NodesResource`, is exported too, for advanced typing. You rarely need them: `createClient` builds every resource for you.

## Frequently asked questions

### How do I import a type from the Nodaro SDK?

Use import type with the type's name, for example import type { Workflow, Job } from @nodaro/sdk. Every type used in a public method is exported from the package.

### Why do some fields use snake_case and others camelCase?

Types follow the API's wire format. A Job uses snake_case, such as output_data and created_at, because the API sends it that way. A Workflow and a WorkflowExecution use camelCase.

### Do I need @nodaro/shared as well?

Usually not. The SDK re-exports the shared types its methods use, such as the organization and editing types. A few helpers, such as the 3D review helpers and toConnectedReference, are imported from @nodaro/shared directly.
