generated: '2026-07-20' method: derived source: openapi/nevercode-openapi-original.json entity_count: 180 relationship_count: 142 entities: - name: AccessKeySchema field_count: 5 - name: AccountSchema field_count: 2 - name: ApiKeySchema field_count: 1 - name: AppPreviewApplicationSchema field_count: 3 - name: ApplyPromotionCodeSchema field_count: 1 - name: AuditLogConnectorSchema field_count: 4 - name: BuildActionSchema field_count: 8 - name: BuildConfigSchema field_count: 5 - name: CardDetailsSchema field_count: 4 - name: CardSchema field_count: 3 - name: ClassicPagination_api.routes.apps.schemas.TesterGroupSchema_ field_count: 4 - name: ClassicPagination_api.routes.apps.schemas.VariableGroupSchema_ field_count: 4 - name: ClassicPagination_api.routes.builds.schemas.BuildActionSchema_ field_count: 4 - name: ClassicPagination_api.routes.ota_deployment_releases.schemas.DeploymentReleaseSchema_ field_count: 4 - name: ClassicPagination_api.routes.ota_project_deployment_keys.schemas.DeploymentKeySchema_ field_count: 4 - name: ClassicPagination_api.routes.ota_team_access_keys.schemas.AccessKeySchema_ field_count: 4 - name: ClassicPagination_api.routes.ota_team_projects.schemas.ProjectSchema_ field_count: 4 - name: ClassicPagination_api.routes.team_apps.schemas.AppSchema_ field_count: 4 - name: ClassicPagination_api.routes.team_invitations.schemas.InvitationSchema_ field_count: 4 - name: ClassicPagination_api.routes.team_members.schemas.TeamMemberSchema_ field_count: 4 - name: ClassicPagination_api.routes.team_previews.schemas.AppPreviewSchema_ field_count: 4 - name: ClassicPagination_api.routes.team_variable_groups.schemas.VariableGroupSchema_ field_count: 4 - name: ClassicPagination_api.routes.tester_groups.schemas.TesterGroupContactSchema_ field_count: 4 - name: ClassicPagination_api.routes.user.schemas.AppSchema_ field_count: 4 - name: ClassicPagination_api.routes.user.schemas.NotificationSchema_ field_count: 4 - name: ClassicPagination_api.routes.user.schemas.TeamSchema_ field_count: 4 - name: ClassicPagination_api.routes.variable_groups.schemas.EnvironmentVariableSchema_ field_count: 4 - name: CreateAccessKeySchema field_count: 2 - name: CreateInvitationSchema field_count: 2 - name: CreateSubscriptionCardSchema field_count: 1 - name: CreateSubscriptionItemSchema field_count: 1 - name: CreateSubscriptionSchema field_count: 5 - name: CreateTesterGroup field_count: 1 - name: CreatedAccessKeySchema field_count: 6 - name: CursorPagination_bson.objectid.ObjectId_api.routes.dashboards.schemas.BuildSchema_ field_count: 3 - name: CursorPagination_bson.objectid.ObjectId_api.routes.team_builds.schemas.BuildSchema_ field_count: 3 - name: CursorPagination_str_api.routes.team_cards.schemas.CardSchema_ field_count: 3 - name: CursorPagination_str_api.routes.team_invoices.schemas.InvoiceSchema_ field_count: 3 - name: CursorPagination_str_api.routes.team_subscriptions.schemas.InvoiceSchema_ field_count: 3 - name: DashboardSchema field_count: 3 - name: DeploymentChannelSchema field_count: 2 - name: DeploymentKeySchema field_count: 2 - name: DeploymentReleaseSchema field_count: 5 - name: Discount field_count: 8 - name: EnvironmentVariableSchema field_count: 4 - name: ExtraSchema field_count: 1 - name: FeaturesSchema field_count: 1 - name: GenerateInvoicePreview field_count: 2 - name: InvitationSchema field_count: 6 - name: InviteRoleSpec field_count: 1 - name: Invoice field_count: 9 - name: InvoiceLineItem field_count: 4 - name: InvoiceLineItemSchema field_count: 7 - name: InvoicePreviewDiscountSchema field_count: 8 - name: InvoicePreviewLineItem field_count: 2 - name: InvoicePreviewSchema field_count: 14 - name: InvoicePreviewTaxSchema field_count: 5 - name: NewEnvironmentVariableSchema field_count: 2 - name: NoPagination_api.routes.apps.schemas.TesterGroupSchema_ field_count: 1 - name: NoPagination_api.routes.apps.schemas.VariableGroupSchema_ field_count: 1 - name: NoPagination_api.routes.builds.schemas.BuildSchema_ field_count: 1 - name: NoPagination_api.routes.builds.schemas.RemoteAccessSchema_ field_count: 1 - name: NoPagination_api.routes.builds.schemas.StartedAppPreviewSchema_ field_count: 1 - name: NoPagination_api.routes.dashboards.schemas.DashboardSchema_ field_count: 1 - name: NoPagination_api.routes.meta.schemas.MetaSchema_ field_count: 1 - name: NoPagination_api.routes.meta.schemas.ShorebirdSchema_ field_count: 1 - name: NoPagination_api.routes.ota.schemas.AccountSchema_ field_count: 1 - name: NoPagination_api.routes.ota_deployment_usage.schemas.UsageSchema_ field_count: 1 - name: NoPagination_api.routes.ota_team_access_keys.schemas.CreatedAccessKeySchema_ field_count: 1 - name: NoPagination_api.routes.ota_team_usage.schemas.UsageSchema_ field_count: 1 - name: NoPagination_api.routes.previews.schemas.AppPreviewSchema_ field_count: 1 - name: NoPagination_api.routes.previews.schemas.SharedAppPreviewSchema_ field_count: 1 - name: NoPagination_api.routes.shared_previews.schemas.SharedAppPreviewDetailsSchema_ field_count: 1 - name: NoPagination_api.routes.team.schemas.TeamSchema_ field_count: 1 - name: NoPagination_api.routes.team_audit_log_connector.schemas.AuditLogConnectorSchema_ field_count: 1 - name: NoPagination_api.routes.team_invitations.schemas.InvitationSchema_ field_count: 1 - name: NoPagination_api.routes.team_invitations.schemas.PublicInvitationSchema_ field_count: 1 - name: NoPagination_api.routes.team_invoice_preview.schemas.Invoice_ field_count: 1 - name: NoPagination_api.routes.team_subscriptions.schemas.InvoicePreviewSchema_ field_count: 1 - name: NoPagination_api.routes.team_subscriptions.schemas.SubscriptionDetailsSchema_ field_count: 1 - name: NoPagination_api.routes.team_variable_groups.schemas.VariableGroupSchema_ field_count: 1 - name: NoPagination_api.routes.tester_groups.schemas.TesterGroupSchema_ field_count: 1 - name: NoPagination_api.routes.user.schemas.ApiKeySchema_ field_count: 1 - name: NoPagination_api.routes.user.schemas.PreferencesSchema_ field_count: 1 - name: NoPagination_api.routes.user.schemas.UserSchema_ field_count: 1 - name: NoPagination_api.routes.user_team_permissions.schemas.TeamPermissionsSchema_ field_count: 1 - name: NoPagination_api.routes.variable_groups.schemas.EnvironmentVariableSchema_ field_count: 1 - name: NoPagination_api.routes.variable_groups.schemas.VariableGroupSchema_ field_count: 1 - name: NoPagination_list_api.routes.team_subscriptions.schemas.SubscriptionSchema_ field_count: 1 - name: NotificationSchema field_count: 5 - name: OwnerSchema field_count: 1 - name: PaymentMethodSchema field_count: 2 - name: PaymentRequiredSchema field_count: 3 - name: PinnedAccountSchema field_count: 2 - name: PreferencesSchema field_count: 2 - name: ProjectSchema field_count: 4 - name: ProjectUpdateSchema field_count: 6 - name: PublicInvitationSchema field_count: 6 - name: RemoteAccessSchema field_count: 2 - name: RemoteAccessSshSchema field_count: 1 - name: RemoteAccessVncSchema field_count: 4 - name: RepositorySchema field_count: 1 - name: SharedAppPreviewDetailsSchema field_count: 3 - name: SharedAppPreviewSchema field_count: 2 - name: ShorebirdSchema field_count: 2 - name: StartPreviewSchema field_count: 1 - name: StartedAppPreviewSchema field_count: 2 - name: SubscriptionDetailsSchema field_count: 12 - name: SubscriptionItemSchema field_count: 2 - name: SubscriptionSchema field_count: 5 - name: SummarySchema field_count: 2 - name: Tax field_count: 5 - name: TeamMemberSchema field_count: 6 - name: TeamPermissionsSchema field_count: 5 - name: TesterGroupContactSchema field_count: 5 - name: TrackUserSchema field_count: 2 - name: UpdateAuditLogConnector field_count: 3 - name: UpdateEnvironmentVariableSchema field_count: 3 - name: UpdateGroupSchema field_count: 2 - name: UpdateMembershipSchema field_count: 1 relationships: - from: AccountSchema to: Status kind: has_one via: status - from: BuildActionSchema to: BuildActionTypeSchema kind: has_one via: type - from: CardSchema to: OwnerSchema kind: has_one via: owner - from: CardSchema to: CardDetailsSchema kind: has_one via: card - from: ClassicPagination_api.routes.apps.schemas.TesterGroupSchema_ to: apps_schemas_TesterGroupSchema kind: has_many via: data - from: ClassicPagination_api.routes.apps.schemas.VariableGroupSchema_ to: apps_schemas_VariableGroupSchema kind: has_many via: data - from: ClassicPagination_api.routes.builds.schemas.BuildActionSchema_ to: BuildActionSchema kind: has_many via: data - from: ClassicPagination_api.routes.ota_deployment_releases.schemas.DeploymentReleaseSchema_ to: DeploymentReleaseSchema kind: has_many via: data - from: ClassicPagination_api.routes.ota_project_deployment_keys.schemas.DeploymentKeySchema_ to: DeploymentKeySchema kind: has_many via: data - from: ClassicPagination_api.routes.ota_team_access_keys.schemas.AccessKeySchema_ to: AccessKeySchema kind: has_many via: data - from: ClassicPagination_api.routes.ota_team_projects.schemas.ProjectSchema_ to: ProjectSchema kind: has_many via: data - from: ClassicPagination_api.routes.team_apps.schemas.AppSchema_ to: team_apps_schemas_AppSchema kind: has_many via: data - from: ClassicPagination_api.routes.team_invitations.schemas.InvitationSchema_ to: InvitationSchema kind: has_many via: data - from: ClassicPagination_api.routes.team_members.schemas.TeamMemberSchema_ to: TeamMemberSchema kind: has_many via: data - from: ClassicPagination_api.routes.team_previews.schemas.AppPreviewSchema_ to: team_previews_schemas_AppPreviewSchema kind: has_many via: data - from: ClassicPagination_api.routes.team_variable_groups.schemas.VariableGroupSchema_ to: team_variable_groups_schemas_VariableGroupSchema kind: has_many via: data - from: ClassicPagination_api.routes.tester_groups.schemas.TesterGroupContactSchema_ to: TesterGroupContactSchema kind: has_many via: data - from: ClassicPagination_api.routes.user.schemas.AppSchema_ to: user_schemas_AppSchema kind: has_many via: data - from: ClassicPagination_api.routes.user.schemas.NotificationSchema_ to: NotificationSchema kind: has_many via: data - from: ClassicPagination_api.routes.user.schemas.TeamSchema_ to: user_schemas_TeamSchema kind: has_many via: data - from: ClassicPagination_api.routes.variable_groups.schemas.EnvironmentVariableSchema_ to: EnvironmentVariableSchema kind: has_many via: data - from: CreateInvitationSchema to: InviteRoleSpec kind: has_many via: roles - from: CreateSubscriptionItemSchema to: ProductSlug kind: has_one via: product_slug - from: CreateSubscriptionSchema to: CreateSubscriptionProductCategory kind: has_one via: category - from: CreateSubscriptionSchema to: CreateSubscriptionPricingModel kind: has_one via: pricing_model - from: CreateSubscriptionSchema to: BillingInterval kind: has_one via: interval - from: CreateSubscriptionSchema to: CreateSubscriptionItemSchema kind: has_many via: items - from: CreateSubscriptionSchema to: CreateSubscriptionCardSchema kind: has_one via: card - from: CursorPagination_bson.objectid.ObjectId_api.routes.dashboards.schemas.BuildSchema_ to: dashboards_schemas_BuildSchema kind: has_many via: data - from: CursorPagination_bson.objectid.ObjectId_api.routes.team_builds.schemas.BuildSchema_ to: team_builds_schemas_BuildSchema kind: has_many via: data - from: CursorPagination_str_api.routes.team_cards.schemas.CardSchema_ to: CardSchema kind: has_many via: data - from: CursorPagination_str_api.routes.team_invoices.schemas.InvoiceSchema_ to: team_invoices_schemas_InvoiceSchema kind: has_many via: data - from: CursorPagination_str_api.routes.team_subscriptions.schemas.InvoiceSchema_ to: team_subscriptions_schemas_InvoiceSchema kind: has_many via: data - from: DeploymentReleaseSchema to: DeploymentReleaseStatus kind: has_one via: status - from: DeploymentReleaseSchema to: ota_deployment_releases_schemas_MetricSchema kind: has_many via: summary - from: Discount to: team_invoice_preview_schemas_DiscountDuration kind: has_one via: duration - from: GenerateInvoicePreview to: InvoicePreviewLineItem kind: has_many via: line_items - from: InvitationSchema to: InviteRoleSpec kind: has_many via: roles - from: InvitationSchema to: InvitationStatus kind: has_one via: status - from: InviteRoleSpec to: InvitableRole kind: has_one via: role - from: Invoice to: InvoiceLineItem kind: has_many via: line_items - from: Invoice to: Discount kind: has_many via: discounts - from: Invoice to: Tax kind: has_many via: taxes - from: InvoicePreviewDiscountSchema to: team_subscriptions_schemas_DiscountDuration kind: has_one via: duration - from: InvoicePreviewSchema to: InvoiceLineItemSchema kind: has_many via: line_items - from: InvoicePreviewSchema to: InvoicePreviewTaxSchema kind: has_many via: taxes - from: InvoicePreviewSchema to: InvoicePreviewDiscountSchema kind: has_many via: discounts - from: NoPagination_api.routes.apps.schemas.TesterGroupSchema_ to: apps_schemas_TesterGroupSchema kind: has_one via: data - from: NoPagination_api.routes.apps.schemas.VariableGroupSchema_ to: apps_schemas_VariableGroupSchema kind: has_one via: data - from: NoPagination_api.routes.builds.schemas.BuildSchema_ to: builds_schemas_BuildSchema kind: has_one via: data - from: NoPagination_api.routes.builds.schemas.RemoteAccessSchema_ to: RemoteAccessSchema kind: has_one via: data - from: NoPagination_api.routes.builds.schemas.StartedAppPreviewSchema_ to: StartedAppPreviewSchema kind: has_one via: data - from: NoPagination_api.routes.dashboards.schemas.DashboardSchema_ to: DashboardSchema kind: has_one via: data - from: NoPagination_api.routes.meta.schemas.MetaSchema_ to: meta_schemas_MetaSchema kind: has_one via: data - from: NoPagination_api.routes.meta.schemas.ShorebirdSchema_ to: ShorebirdSchema kind: has_one via: data - from: NoPagination_api.routes.ota.schemas.AccountSchema_ to: AccountSchema kind: has_one via: data - from: NoPagination_api.routes.ota_deployment_usage.schemas.UsageSchema_ to: ota_deployment_usage_schemas_UsageSchema kind: has_one via: data - from: NoPagination_api.routes.ota_team_access_keys.schemas.CreatedAccessKeySchema_ to: CreatedAccessKeySchema kind: has_one via: data - from: NoPagination_api.routes.ota_team_usage.schemas.UsageSchema_ to: ota_team_usage_schemas_UsageSchema kind: has_one via: data - from: NoPagination_api.routes.previews.schemas.AppPreviewSchema_ to: previews_schemas_AppPreviewSchema kind: has_one via: data - from: NoPagination_api.routes.previews.schemas.SharedAppPreviewSchema_ to: SharedAppPreviewSchema kind: has_one via: data - from: NoPagination_api.routes.shared_previews.schemas.SharedAppPreviewDetailsSchema_ to: SharedAppPreviewDetailsSchema kind: has_one via: data - from: NoPagination_api.routes.team.schemas.TeamSchema_ to: team_schemas_TeamSchema kind: has_one via: data - from: NoPagination_api.routes.team_audit_log_connector.schemas.AuditLogConnectorSchema_ to: AuditLogConnectorSchema kind: has_one via: data - from: NoPagination_api.routes.team_invitations.schemas.InvitationSchema_ to: InvitationSchema kind: has_one via: data - from: NoPagination_api.routes.team_invitations.schemas.PublicInvitationSchema_ to: PublicInvitationSchema kind: has_one via: data - from: NoPagination_api.routes.team_invoice_preview.schemas.Invoice_ to: Invoice kind: has_one via: data - from: NoPagination_api.routes.team_subscriptions.schemas.InvoicePreviewSchema_ to: InvoicePreviewSchema kind: has_one via: data - from: NoPagination_api.routes.team_subscriptions.schemas.SubscriptionDetailsSchema_ to: SubscriptionDetailsSchema kind: has_one via: data - from: NoPagination_api.routes.team_variable_groups.schemas.VariableGroupSchema_ to: team_variable_groups_schemas_VariableGroupSchema kind: has_one via: data - from: NoPagination_api.routes.tester_groups.schemas.TesterGroupSchema_ to: tester_groups_schemas_TesterGroupSchema kind: has_one via: data - from: NoPagination_api.routes.user.schemas.ApiKeySchema_ to: ApiKeySchema kind: has_one via: data - from: NoPagination_api.routes.user.schemas.PreferencesSchema_ to: PreferencesSchema kind: has_one via: data - from: NoPagination_api.routes.user.schemas.UserSchema_ to: UserSchema kind: has_one via: data - from: NoPagination_api.routes.user_team_permissions.schemas.TeamPermissionsSchema_ to: TeamPermissionsSchema kind: has_one via: data - from: NoPagination_api.routes.variable_groups.schemas.EnvironmentVariableSchema_ to: EnvironmentVariableSchema kind: has_one via: data - from: NoPagination_api.routes.variable_groups.schemas.VariableGroupSchema_ to: variable_groups_schemas_VariableGroupSchema kind: has_one via: data - from: NoPagination_list_api.routes.team_subscriptions.schemas.SubscriptionSchema_ to: SubscriptionSchema kind: has_many via: data - from: NotificationSchema to: NotificationCategory kind: has_one via: category - from: PaymentMethodSchema to: PaymentMethodType kind: has_one via: type - from: PaymentRequiredSchema to: ExtraSchema kind: has_one via: extra - from: PinnedAccountSchema to: PinnedAccountView kind: has_one via: view - from: PreferencesSchema to: PinnedAccountSchema kind: has_many via: pinned_accounts - from: PreferencesSchema to: Theme kind: has_one via: theme - from: ProjectSchema to: DeploymentChannelSchema kind: has_many via: deployment_channels - from: ProjectUpdateSchema to: DeploymentChannelSchema kind: has_one via: deployment_channel - from: ProjectUpdateSchema to: DeploymentReleaseStatus kind: has_one via: status - from: ProjectUpdateSchema to: ota_team_projects_schemas_MetricSchema kind: has_many via: summary - from: PublicInvitationSchema to: InviteRoleSpec kind: has_many via: roles - from: RemoteAccessSchema to: RemoteAccessSshSchema kind: has_one via: ssh - from: RemoteAccessSchema to: RemoteAccessVncSchema kind: has_one via: vnc - from: SubscriptionDetailsSchema to: PricingModel kind: has_one via: pricing_model - from: SubscriptionDetailsSchema to: SubscriptionStatus kind: has_one via: status - from: SubscriptionDetailsSchema to: ProductCategory kind: has_one via: category - from: SubscriptionSchema to: PricingModel kind: has_one via: pricing_model - from: SubscriptionSchema to: SubscriptionStatus kind: has_one via: status - from: SubscriptionSchema to: ProductCategory kind: has_one via: category - from: TeamMemberSchema to: TeamMemberRole kind: has_one via: role - from: TeamPermissionsSchema to: TeamPermission kind: has_many via: team - from: TeamPermissionsSchema to: AppPermission kind: has_many via: default_app_permissions - from: TesterGroupContactSchema to: ContactStatus kind: has_one via: status - from: TrackUserSchema to: ClientEvent kind: has_one via: event - from: UpdateMembershipSchema to: Role kind: has_one via: role - from: ValidationErrorResponseSchema to: ValidationErrorExtraSchema kind: has_one via: extra - from: builds_schemas_ArtifactSchema to: ArtifactType kind: has_one via: type - from: builds_schemas_BuildSchema to: builds_schemas_WorkflowSchema kind: has_one via: workflow - from: builds_schemas_BuildSchema to: BuildStatus kind: has_one via: status - from: builds_schemas_BuildSchema to: builds_schemas_ArtifactSchema kind: has_many via: artifacts - from: builds_schemas_BuildSchema to: builds_schemas_ReleaseNoteSchema kind: has_many via: release_notes - from: builds_schemas_BuildSchema to: BuildConfigSchema kind: has_one via: config - from: builds_schemas_WorkflowSchema to: builds_schemas_WorkflowSource kind: has_one via: source - from: dashboards_schemas_ArtifactSchema to: ArtifactType kind: has_one via: type - from: dashboards_schemas_BuildSchema to: dashboards_schemas_AppSchema kind: has_one via: app - from: dashboards_schemas_BuildSchema to: dashboards_schemas_WorkflowSchema kind: has_one via: workflow - from: dashboards_schemas_BuildSchema to: BuildStatus kind: has_one via: status - from: dashboards_schemas_BuildSchema to: dashboards_schemas_ArtifactSchema kind: has_many via: artifacts - from: dashboards_schemas_BuildSchema to: dashboards_schemas_ReleaseNoteSchema kind: has_many via: release_notes - from: ota_deployment_usage_schemas_SeriesSchema to: ota_deployment_usage_schemas_ValueSchema kind: has_many via: values - from: ota_deployment_usage_schemas_UsageSchema to: ota_deployment_usage_schemas_SeriesSchema kind: has_many via: series - from: ota_deployment_usage_schemas_UsageSchema to: ota_deployment_usage_schemas_MetaSchema kind: has_one via: meta - from: ota_team_usage_schemas_SeriesSchema to: ota_team_usage_schemas_ValueSchema kind: has_many via: values - from: ota_team_usage_schemas_UsageSchema to: ota_team_usage_schemas_SeriesSchema kind: has_many via: series - from: ota_team_usage_schemas_UsageSchema to: SummarySchema kind: has_many via: summary - from: ota_team_usage_schemas_UsageSchema to: ota_team_usage_schemas_MetaSchema kind: has_one via: meta - from: previews_schemas_AppPreviewSchema to: previews_schemas_AppSchema kind: has_one via: app - from: previews_schemas_AppPreviewSchema to: previews_schemas_BuildSchema kind: has_one via: build - from: previews_schemas_AppPreviewSchema to: previews_schemas_ArtifactSchema kind: has_one via: artifact - from: previews_schemas_BuildSchema to: previews_schemas_ReleaseNoteSchema kind: has_many via: release_notes - from: team_apps_schemas_AppSchema to: RepositorySchema kind: has_one via: repository - from: team_apps_schemas_AppSchema to: AppSettingsSrouce kind: has_one via: settings_source - from: team_builds_schemas_ArtifactSchema to: ArtifactType kind: has_one via: type - from: team_builds_schemas_BuildSchema to: team_builds_schemas_WorkflowSchema kind: has_one via: workflow - from: team_builds_schemas_BuildSchema to: BuildStatus kind: has_one via: status - from: team_builds_schemas_BuildSchema to: team_builds_schemas_ArtifactSchema kind: has_many via: artifacts - from: team_builds_schemas_BuildSchema to: team_builds_schemas_ReleaseNoteSchema kind: has_many via: release_notes - from: team_builds_schemas_WorkflowSchema to: team_builds_schemas_WorkflowSource kind: has_one via: source - from: team_previews_schemas_AppPreviewSchema to: AppPreviewApplicationSchema kind: has_one via: app - from: team_previews_schemas_AppPreviewSchema to: team_previews_schemas_BuildSchema kind: has_one via: build - from: team_previews_schemas_AppPreviewSchema to: team_previews_schemas_ArtifactSchema kind: has_one via: artifact - from: team_previews_schemas_BuildSchema to: team_previews_schemas_ReleaseNoteSchema kind: has_many via: release_notes - from: team_variable_groups_schemas_CreateVariableGroup to: team_variable_groups_schemas_AdvancedSecuritySchema kind: has_one via: advanced_security - from: variable_groups_schemas_BulkImportSchema to: NewEnvironmentVariableSchema kind: has_many via: variables