@nirvana-labs/nirvana-mcp 2.1.2 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -673,6 +673,222 @@ const EMBEDDED_METHODS: MethodEntry[] = [
673
673
  },
674
674
  },
675
675
  },
676
+ {
677
+ name: 'update',
678
+ endpoint: '/v1/organizations/{organization_id}/memberships/{membership_id}',
679
+ httpMethod: 'patch',
680
+ summary: 'Update Organization Membership',
681
+ description:
682
+ 'Change the role of a member of an organization. Owners may assign any role. Admins may assign admin, billing or member, and cannot change the role of an owner. The last owner cannot be demoted, and members cannot change their own role except for an owner stepping down while another owner remains.',
683
+ stainlessPath: '(resource) organizations.memberships > (method) update',
684
+ qualified: 'client.organizations.memberships.update',
685
+ params: [
686
+ 'organization_id: string;',
687
+ 'membership_id: string;',
688
+ "role: 'owner' | 'admin' | 'billing' | 'member';",
689
+ ],
690
+ response:
691
+ "{ id: string; created_at: string; organization_id: string; role: 'owner' | 'admin' | 'billing' | 'member'; updated_at: string; user_id: string; }",
692
+ markdown:
693
+ "## update\n\n`client.organizations.memberships.update(organization_id: string, membership_id: string, role: 'owner' | 'admin' | 'billing' | 'member'): { id: string; created_at: string; organization_id: string; role: 'owner' | 'admin' | 'billing' | 'member'; updated_at: string; user_id: string; }`\n\n**patch** `/v1/organizations/{organization_id}/memberships/{membership_id}`\n\nChange the role of a member of an organization. Owners may assign any role. Admins may assign admin, billing or member, and cannot change the role of an owner. The last owner cannot be demoted, and members cannot change their own role except for an owner stepping down while another owner remains.\n\n### Parameters\n\n- `organization_id: string`\n\n- `membership_id: string`\n\n- `role: 'owner' | 'admin' | 'billing' | 'member'`\n Role of the user in the organization.\n\n### Returns\n\n- `{ id: string; created_at: string; organization_id: string; role: 'owner' | 'admin' | 'billing' | 'member'; updated_at: string; user_id: string; }`\n Organization membership details.\n\n - `id: string`\n - `created_at: string`\n - `organization_id: string`\n - `role: 'owner' | 'admin' | 'billing' | 'member'`\n - `updated_at: string`\n - `user_id: string`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst organizationMembership = await client.organizations.memberships.update('membership_id', { organization_id: 'organization_id', role: 'owner' });\n\nconsole.log(organizationMembership);\n```",
694
+ perLanguage: {
695
+ typescript: {
696
+ method: 'client.organizations.memberships.update',
697
+ example:
698
+ "import NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs({\n apiKey: process.env['NIRVANA_LABS_API_KEY'], // This is the default and can be omitted\n});\n\nconst organizationMembership = await client.organizations.memberships.update('membership_id', {\n organization_id: 'organization_id',\n role: 'owner',\n});\n\nconsole.log(organizationMembership.id);",
699
+ },
700
+ http: {
701
+ example:
702
+ 'curl https://api.nirvanalabs.io/v1/organizations/$ORGANIZATION_ID/memberships/$MEMBERSHIP_ID \\\n -X PATCH \\\n -H \'Content-Type: application/json\' \\\n -H "Authorization: Bearer $NIRVANA_LABS_API_KEY" \\\n -d \'{\n "role": "owner"\n }\'',
703
+ },
704
+ go: {
705
+ method: 'client.Organizations.Memberships.Update',
706
+ example:
707
+ 'package main\n\nimport (\n\t"context"\n\t"fmt"\n\n\t"github.com/nirvana-labs/nirvana-go/v2"\n\t"github.com/nirvana-labs/nirvana-go/v2/option"\n\t"github.com/nirvana-labs/nirvana-go/v2/organizations"\n)\n\nfunc main() {\n\tclient := nirvana.NewClient(\n\t\toption.WithAPIKey("My API Key"),\n\t)\n\torganizationMembership, err := client.Organizations.Memberships.Update(\n\t\tcontext.TODO(),\n\t\t"organization_id",\n\t\t"membership_id",\n\t\torganizations.MembershipUpdateParams{\n\t\t\tRole: organizations.MembershipUpdateParamsRoleOwner,\n\t\t},\n\t)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf("%+v\\n", organizationMembership.ID)\n}\n',
708
+ },
709
+ cli: {
710
+ method: 'memberships update',
711
+ example:
712
+ "nirvana organizations:memberships update \\\n --api-key 'My API Key' \\\n --organization-id organization_id \\\n --membership-id membership_id \\\n --role owner",
713
+ },
714
+ },
715
+ },
716
+ {
717
+ name: 'delete',
718
+ endpoint: '/v1/organizations/{organization_id}/memberships/{membership_id}',
719
+ httpMethod: 'delete',
720
+ summary: 'Delete Organization Membership',
721
+ description:
722
+ 'Remove a member from an organization. Admins cannot remove an owner, and the last owner cannot be removed.',
723
+ stainlessPath: '(resource) organizations.memberships > (method) delete',
724
+ qualified: 'client.organizations.memberships.delete',
725
+ params: ['organization_id: string;', 'membership_id: string;'],
726
+ markdown:
727
+ "## delete\n\n`client.organizations.memberships.delete(organization_id: string, membership_id: string): void`\n\n**delete** `/v1/organizations/{organization_id}/memberships/{membership_id}`\n\nRemove a member from an organization. Admins cannot remove an owner, and the last owner cannot be removed.\n\n### Parameters\n\n- `organization_id: string`\n\n- `membership_id: string`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nawait client.organizations.memberships.delete('membership_id', { organization_id: 'organization_id' })\n```",
728
+ perLanguage: {
729
+ typescript: {
730
+ method: 'client.organizations.memberships.delete',
731
+ example:
732
+ "import NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs({\n apiKey: process.env['NIRVANA_LABS_API_KEY'], // This is the default and can be omitted\n});\n\nawait client.organizations.memberships.delete('membership_id', {\n organization_id: 'organization_id',\n});",
733
+ },
734
+ http: {
735
+ example:
736
+ 'curl https://api.nirvanalabs.io/v1/organizations/$ORGANIZATION_ID/memberships/$MEMBERSHIP_ID \\\n -X DELETE \\\n -H "Authorization: Bearer $NIRVANA_LABS_API_KEY"',
737
+ },
738
+ go: {
739
+ method: 'client.Organizations.Memberships.Delete',
740
+ example:
741
+ 'package main\n\nimport (\n\t"context"\n\n\t"github.com/nirvana-labs/nirvana-go/v2"\n\t"github.com/nirvana-labs/nirvana-go/v2/option"\n)\n\nfunc main() {\n\tclient := nirvana.NewClient(\n\t\toption.WithAPIKey("My API Key"),\n\t)\n\terr := client.Organizations.Memberships.Delete(\n\t\tcontext.TODO(),\n\t\t"organization_id",\n\t\t"membership_id",\n\t)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n}\n',
742
+ },
743
+ cli: {
744
+ method: 'memberships delete',
745
+ example:
746
+ "nirvana organizations:memberships delete \\\n --api-key 'My API Key' \\\n --organization-id organization_id \\\n --membership-id membership_id",
747
+ },
748
+ },
749
+ },
750
+ {
751
+ name: 'create',
752
+ endpoint: '/v1/organizations/{organization_id}/memberships/invitations',
753
+ httpMethod: 'post',
754
+ summary: 'Create Organization Invitation',
755
+ description:
756
+ 'Invite an email address to join an organization with a role. The membership is created when the invitee accepts. Owners may invite with any role; admins may invite with admin, billing or member.',
757
+ stainlessPath: '(resource) organizations.memberships.invitations > (method) create',
758
+ qualified: 'client.organizations.memberships.invitations.create',
759
+ params: ['organization_id: string;', 'email: string;', "role: 'owner' | 'admin' | 'billing' | 'member';"],
760
+ response:
761
+ "{ id: string; created_at: string; email: string; expires_at: string; inviter_user_id: string; organization_id: string; role: 'owner' | 'admin' | 'billing' | 'member'; }",
762
+ markdown:
763
+ "## create\n\n`client.organizations.memberships.invitations.create(organization_id: string, email: string, role: 'owner' | 'admin' | 'billing' | 'member'): { id: string; created_at: string; email: string; expires_at: string; inviter_user_id: string; organization_id: string; role: 'owner' | 'admin' | 'billing' | 'member'; }`\n\n**post** `/v1/organizations/{organization_id}/memberships/invitations`\n\nInvite an email address to join an organization with a role. The membership is created when the invitee accepts. Owners may invite with any role; admins may invite with admin, billing or member.\n\n### Parameters\n\n- `organization_id: string`\n\n- `email: string`\n Email address to invite. Inviting an address that already belongs to a member of the organization fails.\n\n- `role: 'owner' | 'admin' | 'billing' | 'member'`\n Role of the user in the organization.\n\n### Returns\n\n- `{ id: string; created_at: string; email: string; expires_at: string; inviter_user_id: string; organization_id: string; role: 'owner' | 'admin' | 'billing' | 'member'; }`\n Organization invitation details.\n\n - `id: string`\n - `created_at: string`\n - `email: string`\n - `expires_at: string`\n - `inviter_user_id: string`\n - `organization_id: string`\n - `role: 'owner' | 'admin' | 'billing' | 'member'`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst organizationInvitation = await client.organizations.memberships.invitations.create('organization_id', { email: 'jane@example.com', role: 'owner' });\n\nconsole.log(organizationInvitation);\n```",
764
+ perLanguage: {
765
+ typescript: {
766
+ method: 'client.organizations.memberships.invitations.create',
767
+ example:
768
+ "import NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs({\n apiKey: process.env['NIRVANA_LABS_API_KEY'], // This is the default and can be omitted\n});\n\nconst organizationInvitation = await client.organizations.memberships.invitations.create(\n 'organization_id',\n { email: 'jane@example.com', role: 'owner' },\n);\n\nconsole.log(organizationInvitation.id);",
769
+ },
770
+ http: {
771
+ example:
772
+ 'curl https://api.nirvanalabs.io/v1/organizations/$ORGANIZATION_ID/memberships/invitations \\\n -H \'Content-Type: application/json\' \\\n -H "Authorization: Bearer $NIRVANA_LABS_API_KEY" \\\n -d \'{\n "email": "jane@example.com",\n "role": "owner"\n }\'',
773
+ },
774
+ go: {
775
+ method: 'client.Organizations.Memberships.Invitations.New',
776
+ example:
777
+ 'package main\n\nimport (\n\t"context"\n\t"fmt"\n\n\t"github.com/nirvana-labs/nirvana-go/v2"\n\t"github.com/nirvana-labs/nirvana-go/v2/option"\n\t"github.com/nirvana-labs/nirvana-go/v2/organizations"\n)\n\nfunc main() {\n\tclient := nirvana.NewClient(\n\t\toption.WithAPIKey("My API Key"),\n\t)\n\torganizationInvitation, err := client.Organizations.Memberships.Invitations.New(\n\t\tcontext.TODO(),\n\t\t"organization_id",\n\t\torganizations.MembershipInvitationNewParams{\n\t\t\tEmail: "jane@example.com",\n\t\t\tRole: organizations.MembershipInvitationNewParamsRoleOwner,\n\t\t},\n\t)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf("%+v\\n", organizationInvitation.ID)\n}\n',
778
+ },
779
+ cli: {
780
+ method: 'invitations create',
781
+ example:
782
+ "nirvana organizations:memberships:invitations create \\\n --api-key 'My API Key' \\\n --organization-id organization_id \\\n --email jane@example.com \\\n --role owner",
783
+ },
784
+ },
785
+ },
786
+ {
787
+ name: 'list',
788
+ endpoint: '/v1/organizations/{organization_id}/memberships/invitations',
789
+ httpMethod: 'get',
790
+ summary: 'List Organization Invitations',
791
+ description:
792
+ 'List the invitations to an organization that are still pending: not yet accepted, revoked or expired. Only owners and admins may list invitations.',
793
+ stainlessPath: '(resource) organizations.memberships.invitations > (method) list',
794
+ qualified: 'client.organizations.memberships.invitations.list',
795
+ params: ['organization_id: string;'],
796
+ response:
797
+ "{ items: { id: string; created_at: string; email: string; expires_at: string; inviter_user_id: string; organization_id: string; role: 'owner' | 'admin' | 'billing' | 'member'; }[]; pagination: { next_cursor: string; previous_cursor: string; total_count: number; }; }",
798
+ markdown:
799
+ "## list\n\n`client.organizations.memberships.invitations.list(organization_id: string): { items: organization_invitation[]; pagination: pagination; }`\n\n**get** `/v1/organizations/{organization_id}/memberships/invitations`\n\nList the invitations to an organization that are still pending: not yet accepted, revoked or expired. Only owners and admins may list invitations.\n\n### Parameters\n\n- `organization_id: string`\n\n### Returns\n\n- `{ items: { id: string; created_at: string; email: string; expires_at: string; inviter_user_id: string; organization_id: string; role: 'owner' | 'admin' | 'billing' | 'member'; }[]; pagination: { next_cursor: string; previous_cursor: string; total_count: number; }; }`\n\n - `items: { id: string; created_at: string; email: string; expires_at: string; inviter_user_id: string; organization_id: string; role: 'owner' | 'admin' | 'billing' | 'member'; }[]`\n - `pagination: { next_cursor: string; previous_cursor: string; total_count: number; }`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst organizationInvitationList = await client.organizations.memberships.invitations.list('organization_id');\n\nconsole.log(organizationInvitationList);\n```",
800
+ perLanguage: {
801
+ typescript: {
802
+ method: 'client.organizations.memberships.invitations.list',
803
+ example:
804
+ "import NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs({\n apiKey: process.env['NIRVANA_LABS_API_KEY'], // This is the default and can be omitted\n});\n\nconst organizationInvitationList = await client.organizations.memberships.invitations.list(\n 'organization_id',\n);\n\nconsole.log(organizationInvitationList.items);",
805
+ },
806
+ http: {
807
+ example:
808
+ 'curl https://api.nirvanalabs.io/v1/organizations/$ORGANIZATION_ID/memberships/invitations \\\n -H "Authorization: Bearer $NIRVANA_LABS_API_KEY"',
809
+ },
810
+ go: {
811
+ method: 'client.Organizations.Memberships.Invitations.List',
812
+ example:
813
+ 'package main\n\nimport (\n\t"context"\n\t"fmt"\n\n\t"github.com/nirvana-labs/nirvana-go/v2"\n\t"github.com/nirvana-labs/nirvana-go/v2/option"\n)\n\nfunc main() {\n\tclient := nirvana.NewClient(\n\t\toption.WithAPIKey("My API Key"),\n\t)\n\torganizationInvitationList, err := client.Organizations.Memberships.Invitations.List(context.TODO(), "organization_id")\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf("%+v\\n", organizationInvitationList.Items)\n}\n',
814
+ },
815
+ cli: {
816
+ method: 'invitations list',
817
+ example:
818
+ "nirvana organizations:memberships:invitations list \\\n --api-key 'My API Key' \\\n --organization-id organization_id",
819
+ },
820
+ },
821
+ },
822
+ {
823
+ name: 'resend',
824
+ endpoint: '/v1/organizations/{organization_id}/memberships/invitations/{invitation_id}/resend',
825
+ httpMethod: 'post',
826
+ summary: 'Resend Organization Invitation',
827
+ description:
828
+ "Send a pending invitation's email again. Owners may resend any invitation; admins may resend invitations with the admin, billing or member role.",
829
+ stainlessPath: '(resource) organizations.memberships.invitations > (method) resend',
830
+ qualified: 'client.organizations.memberships.invitations.resend',
831
+ params: ['organization_id: string;', 'invitation_id: string;'],
832
+ response:
833
+ "{ id: string; created_at: string; email: string; expires_at: string; inviter_user_id: string; organization_id: string; role: 'owner' | 'admin' | 'billing' | 'member'; }",
834
+ markdown:
835
+ "## resend\n\n`client.organizations.memberships.invitations.resend(organization_id: string, invitation_id: string): { id: string; created_at: string; email: string; expires_at: string; inviter_user_id: string; organization_id: string; role: 'owner' | 'admin' | 'billing' | 'member'; }`\n\n**post** `/v1/organizations/{organization_id}/memberships/invitations/{invitation_id}/resend`\n\nSend a pending invitation's email again. Owners may resend any invitation; admins may resend invitations with the admin, billing or member role.\n\n### Parameters\n\n- `organization_id: string`\n\n- `invitation_id: string`\n\n### Returns\n\n- `{ id: string; created_at: string; email: string; expires_at: string; inviter_user_id: string; organization_id: string; role: 'owner' | 'admin' | 'billing' | 'member'; }`\n Organization invitation details.\n\n - `id: string`\n - `created_at: string`\n - `email: string`\n - `expires_at: string`\n - `inviter_user_id: string`\n - `organization_id: string`\n - `role: 'owner' | 'admin' | 'billing' | 'member'`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst organizationInvitation = await client.organizations.memberships.invitations.resend('invitation_id', { organization_id: 'organization_id' });\n\nconsole.log(organizationInvitation);\n```",
836
+ perLanguage: {
837
+ typescript: {
838
+ method: 'client.organizations.memberships.invitations.resend',
839
+ example:
840
+ "import NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs({\n apiKey: process.env['NIRVANA_LABS_API_KEY'], // This is the default and can be omitted\n});\n\nconst organizationInvitation = await client.organizations.memberships.invitations.resend(\n 'invitation_id',\n { organization_id: 'organization_id' },\n);\n\nconsole.log(organizationInvitation.id);",
841
+ },
842
+ http: {
843
+ example:
844
+ 'curl https://api.nirvanalabs.io/v1/organizations/$ORGANIZATION_ID/memberships/invitations/$INVITATION_ID/resend \\\n -X POST \\\n -H "Authorization: Bearer $NIRVANA_LABS_API_KEY"',
845
+ },
846
+ go: {
847
+ method: 'client.Organizations.Memberships.Invitations.Resend',
848
+ example:
849
+ 'package main\n\nimport (\n\t"context"\n\t"fmt"\n\n\t"github.com/nirvana-labs/nirvana-go/v2"\n\t"github.com/nirvana-labs/nirvana-go/v2/option"\n)\n\nfunc main() {\n\tclient := nirvana.NewClient(\n\t\toption.WithAPIKey("My API Key"),\n\t)\n\torganizationInvitation, err := client.Organizations.Memberships.Invitations.Resend(\n\t\tcontext.TODO(),\n\t\t"organization_id",\n\t\t"invitation_id",\n\t)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf("%+v\\n", organizationInvitation.ID)\n}\n',
850
+ },
851
+ cli: {
852
+ method: 'invitations resend',
853
+ example:
854
+ "nirvana organizations:memberships:invitations resend \\\n --api-key 'My API Key' \\\n --organization-id organization_id \\\n --invitation-id invitation_id",
855
+ },
856
+ },
857
+ },
858
+ {
859
+ name: 'delete',
860
+ endpoint: '/v1/organizations/{organization_id}/memberships/invitations/{invitation_id}',
861
+ httpMethod: 'delete',
862
+ summary: 'Revoke Organization Invitation',
863
+ description:
864
+ 'Revoke a pending invitation so it can no longer be accepted. Owners may revoke any invitation; admins may revoke invitations with the admin, billing or member role.',
865
+ stainlessPath: '(resource) organizations.memberships.invitations > (method) delete',
866
+ qualified: 'client.organizations.memberships.invitations.delete',
867
+ params: ['organization_id: string;', 'invitation_id: string;'],
868
+ markdown:
869
+ "## delete\n\n`client.organizations.memberships.invitations.delete(organization_id: string, invitation_id: string): void`\n\n**delete** `/v1/organizations/{organization_id}/memberships/invitations/{invitation_id}`\n\nRevoke a pending invitation so it can no longer be accepted. Owners may revoke any invitation; admins may revoke invitations with the admin, billing or member role.\n\n### Parameters\n\n- `organization_id: string`\n\n- `invitation_id: string`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nawait client.organizations.memberships.invitations.delete('invitation_id', { organization_id: 'organization_id' })\n```",
870
+ perLanguage: {
871
+ typescript: {
872
+ method: 'client.organizations.memberships.invitations.delete',
873
+ example:
874
+ "import NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs({\n apiKey: process.env['NIRVANA_LABS_API_KEY'], // This is the default and can be omitted\n});\n\nawait client.organizations.memberships.invitations.delete('invitation_id', {\n organization_id: 'organization_id',\n});",
875
+ },
876
+ http: {
877
+ example:
878
+ 'curl https://api.nirvanalabs.io/v1/organizations/$ORGANIZATION_ID/memberships/invitations/$INVITATION_ID \\\n -X DELETE \\\n -H "Authorization: Bearer $NIRVANA_LABS_API_KEY"',
879
+ },
880
+ go: {
881
+ method: 'client.Organizations.Memberships.Invitations.Delete',
882
+ example:
883
+ 'package main\n\nimport (\n\t"context"\n\n\t"github.com/nirvana-labs/nirvana-go/v2"\n\t"github.com/nirvana-labs/nirvana-go/v2/option"\n)\n\nfunc main() {\n\tclient := nirvana.NewClient(\n\t\toption.WithAPIKey("My API Key"),\n\t)\n\terr := client.Organizations.Memberships.Invitations.Delete(\n\t\tcontext.TODO(),\n\t\t"organization_id",\n\t\t"invitation_id",\n\t)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n}\n',
884
+ },
885
+ cli: {
886
+ method: 'invitations delete',
887
+ example:
888
+ "nirvana organizations:memberships:invitations delete \\\n --api-key 'My API Key' \\\n --organization-id organization_id \\\n --invitation-id invitation_id",
889
+ },
890
+ },
891
+ },
676
892
  {
677
893
  name: 'create',
678
894
  endpoint: '/v1/organizations/{organization_id}/address',
@@ -928,7 +1144,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [
928
1144
  response:
929
1145
  '{ daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }',
930
1146
  markdown:
931
- "## top_up\n\n`client.organizations.billing.topUp(organization_id: string, amount: string, Idempotency-Key: string): { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }`\n\n**post** `/v1/organizations/{organization_id}/billing/topup`\n\nCharge the card on file and credit the prepaid balance. An Idempotency-Key header is\nrequired. Reuse the same key when retrying, so a top-up that timed out isn't charged twice.\n\n### Parameters\n\n- `organization_id: string`\n\n- `amount: string`\n Amount to charge and credit, in USD. Must be greater than 0, at most two decimal places, and at most 10000.\n\n- `Idempotency-Key: string`\n\n### Returns\n\n- `{ daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }`\n Forward-looking billing summary for an organization. All costs are run-rate projections from the organization's current active usage (\"≈ $X/mo at current usage\").\n\n - `daily_cost: string`\n - `effective_balance: string`\n - `monthly_cost: string`\n - `recharge_threshold_days: string`\n - `estimated_next_charge_at?: string`\n - `runway_months?: string`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst organizationBillingSummary = await client.organizations.billing.topUp('organization_id', { amount: '50.00', 'Idempotency-Key': 'Idempotency-Key' });\n\nconsole.log(organizationBillingSummary);\n```",
1147
+ "## top_up\n\n`client.organizations.billing.topUp(organization_id: string, amount: string, Idempotency-Key: string): { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }`\n\n**post** `/v1/organizations/{organization_id}/billing/topup`\n\nCharge the card on file and credit the prepaid balance. An Idempotency-Key header is\nrequired. Reuse the same key when retrying, so a top-up that timed out isn't charged twice.\n\n### Parameters\n\n- `organization_id: string`\n\n- `amount: string`\n Amount to charge and credit, in USD. Must be at least 1.00, at most two decimal places, and at most 10000.\n\n- `Idempotency-Key: string`\n\n### Returns\n\n- `{ daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }`\n Forward-looking billing summary for an organization. All costs are run-rate projections from the organization's current active usage (\"≈ $X/mo at current usage\").\n\n - `daily_cost: string`\n - `effective_balance: string`\n - `monthly_cost: string`\n - `recharge_threshold_days: string`\n - `estimated_next_charge_at?: string`\n - `runway_months?: string`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst organizationBillingSummary = await client.organizations.billing.topUp('organization_id', { amount: '50.00', 'Idempotency-Key': 'Idempotency-Key' });\n\nconsole.log(organizationBillingSummary);\n```",
932
1148
  perLanguage: {
933
1149
  typescript: {
934
1150
  method: 'client.organizations.billing.topUp',
@@ -1109,9 +1325,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [
1109
1325
  qualified: 'client.quotas.get',
1110
1326
  params: ["region: 'us-sva-2';"],
1111
1327
  response:
1112
- "{ compute: { memory_gb: quota_dimension_detail; vcpu: quota_dimension_detail; }; networking: { public_ips: quota_dimension_detail; vpcs: quota_dimension_detail; }; nks: { clusters: quota_dimension_detail; node_pool_memory_gb: quota_dimension_detail; node_pool_vcpu: quota_dimension_detail; public_ips: quota_dimension_detail; }; region: 'us-sva-2'; storage: { abs: quota_dimension_detail; local_nvme: quota_dimension_detail; }; }",
1328
+ "{ compute: { memory_gb: quota_dimension_detail; vcpu: quota_dimension_detail; }; networking: { public_ips: quota_dimension_detail; vpcs: quota_dimension_detail; }; nks: { clusters: quota_dimension_detail; node_pool_memory_gb: quota_dimension_detail; node_pool_vcpu: quota_dimension_detail; public_ips: quota_dimension_detail; }; region: 'us-sva-2'; storage: { abs: quota_dimension_detail; local_nvme: quota_dimension_detail; longhorn: quota_dimension_detail; }; }",
1113
1329
  markdown:
1114
- "## get\n\n`client.quotas.get(region: 'us-sva-2'): { compute: quota_compute; networking: quota_networking; nks: quota_nks; region: region_name; storage: quota_storage; }`\n\n**get** `/v1/quotas/{region}`\n\nGet quota usage and limits for the current organization in a single region\n\n### Parameters\n\n- `region: 'us-sva-2'`\n\n### Returns\n\n- `{ compute: { memory_gb: quota_dimension_detail; vcpu: quota_dimension_detail; }; networking: { public_ips: quota_dimension_detail; vpcs: quota_dimension_detail; }; nks: { clusters: quota_dimension_detail; node_pool_memory_gb: quota_dimension_detail; node_pool_vcpu: quota_dimension_detail; public_ips: quota_dimension_detail; }; region: 'us-sva-2'; storage: { abs: quota_dimension_detail; local_nvme: quota_dimension_detail; }; }`\n Quota response.\n\n - `compute: { memory_gb: { limit: number; remaining: number; used: number; }; vcpu: { limit: number; remaining: number; used: number; }; }`\n - `networking: { public_ips: { limit: number; remaining: number; used: number; }; vpcs: { limit: number; remaining: number; used: number; }; }`\n - `nks: { clusters: { limit: number; remaining: number; used: number; }; node_pool_memory_gb: { limit: number; remaining: number; used: number; }; node_pool_vcpu: { limit: number; remaining: number; used: number; }; public_ips: { limit: number; remaining: number; used: number; }; }`\n - `region: 'us-sva-2'`\n - `storage: { abs: { limit: number; remaining: number; used: number; }; local_nvme: { limit: number; remaining: number; used: number; }; }`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst quota = await client.quotas.get('us-sva-2');\n\nconsole.log(quota);\n```",
1330
+ "## get\n\n`client.quotas.get(region: 'us-sva-2'): { compute: quota_compute; networking: quota_networking; nks: quota_nks; region: region_name; storage: quota_storage; }`\n\n**get** `/v1/quotas/{region}`\n\nGet quota usage and limits for the current organization in a single region\n\n### Parameters\n\n- `region: 'us-sva-2'`\n\n### Returns\n\n- `{ compute: { memory_gb: quota_dimension_detail; vcpu: quota_dimension_detail; }; networking: { public_ips: quota_dimension_detail; vpcs: quota_dimension_detail; }; nks: { clusters: quota_dimension_detail; node_pool_memory_gb: quota_dimension_detail; node_pool_vcpu: quota_dimension_detail; public_ips: quota_dimension_detail; }; region: 'us-sva-2'; storage: { abs: quota_dimension_detail; local_nvme: quota_dimension_detail; longhorn: quota_dimension_detail; }; }`\n Quota response.\n\n - `compute: { memory_gb: { limit: number; remaining: number; used: number; }; vcpu: { limit: number; remaining: number; used: number; }; }`\n - `networking: { public_ips: { limit: number; remaining: number; used: number; }; vpcs: { limit: number; remaining: number; used: number; }; }`\n - `nks: { clusters: { limit: number; remaining: number; used: number; }; node_pool_memory_gb: { limit: number; remaining: number; used: number; }; node_pool_vcpu: { limit: number; remaining: number; used: number; }; public_ips: { limit: number; remaining: number; used: number; }; }`\n - `region: 'us-sva-2'`\n - `storage: { abs: { limit: number; remaining: number; used: number; }; local_nvme: { limit: number; remaining: number; used: number; }; longhorn: { limit: number; remaining: number; used: number; }; }`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst quota = await client.quotas.get('us-sva-2');\n\nconsole.log(quota);\n```",
1115
1331
  perLanguage: {
1116
1332
  typescript: {
1117
1333
  method: 'client.quotas.get',
@@ -1143,9 +1359,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [
1143
1359
  qualified: 'client.quotas.list',
1144
1360
  params: ['cursor?: string;', 'limit?: number;', 'region?: string;', 'sort?: string;'],
1145
1361
  response:
1146
- "{ compute: { memory_gb: quota_dimension_detail; vcpu: quota_dimension_detail; }; networking: { public_ips: quota_dimension_detail; vpcs: quota_dimension_detail; }; nks: { clusters: quota_dimension_detail; node_pool_memory_gb: quota_dimension_detail; node_pool_vcpu: quota_dimension_detail; public_ips: quota_dimension_detail; }; region: 'us-sva-2'; storage: { abs: quota_dimension_detail; local_nvme: quota_dimension_detail; }; }",
1362
+ "{ compute: { memory_gb: quota_dimension_detail; vcpu: quota_dimension_detail; }; networking: { public_ips: quota_dimension_detail; vpcs: quota_dimension_detail; }; nks: { clusters: quota_dimension_detail; node_pool_memory_gb: quota_dimension_detail; node_pool_vcpu: quota_dimension_detail; public_ips: quota_dimension_detail; }; region: 'us-sva-2'; storage: { abs: quota_dimension_detail; local_nvme: quota_dimension_detail; longhorn: quota_dimension_detail; }; }",
1147
1363
  markdown:
1148
- "## list\n\n`client.quotas.list(cursor?: string, limit?: number, region?: string, sort?: string): { compute: quota_compute; networking: quota_networking; nks: quota_nks; region: region_name; storage: quota_storage; }`\n\n**get** `/v1/quotas`\n\nList quota usage and limits for the current organization across all regions\n\n### Parameters\n\n- `cursor?: string`\n Pagination cursor returned by a previous request. Only valid for the same filters and sort order.\n\n- `limit?: number`\n Maximum number of items to return\n\n- `region?: string`\n Filter by region\n\n- `sort?: string`\n Comma-separated sort terms in precedence order, each field:asc or field:desc. Fields: region\n\n### Returns\n\n- `{ compute: { memory_gb: quota_dimension_detail; vcpu: quota_dimension_detail; }; networking: { public_ips: quota_dimension_detail; vpcs: quota_dimension_detail; }; nks: { clusters: quota_dimension_detail; node_pool_memory_gb: quota_dimension_detail; node_pool_vcpu: quota_dimension_detail; public_ips: quota_dimension_detail; }; region: 'us-sva-2'; storage: { abs: quota_dimension_detail; local_nvme: quota_dimension_detail; }; }`\n Quota response.\n\n - `compute: { memory_gb: { limit: number; remaining: number; used: number; }; vcpu: { limit: number; remaining: number; used: number; }; }`\n - `networking: { public_ips: { limit: number; remaining: number; used: number; }; vpcs: { limit: number; remaining: number; used: number; }; }`\n - `nks: { clusters: { limit: number; remaining: number; used: number; }; node_pool_memory_gb: { limit: number; remaining: number; used: number; }; node_pool_vcpu: { limit: number; remaining: number; used: number; }; public_ips: { limit: number; remaining: number; used: number; }; }`\n - `region: 'us-sva-2'`\n - `storage: { abs: { limit: number; remaining: number; used: number; }; local_nvme: { limit: number; remaining: number; used: number; }; }`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\n// Automatically fetches more pages as needed.\nfor await (const quota of client.quotas.list()) {\n console.log(quota);\n}\n```",
1364
+ "## list\n\n`client.quotas.list(cursor?: string, limit?: number, region?: string, sort?: string): { compute: quota_compute; networking: quota_networking; nks: quota_nks; region: region_name; storage: quota_storage; }`\n\n**get** `/v1/quotas`\n\nList quota usage and limits for the current organization across all regions\n\n### Parameters\n\n- `cursor?: string`\n Pagination cursor returned by a previous request. Only valid for the same filters and sort order.\n\n- `limit?: number`\n Maximum number of items to return\n\n- `region?: string`\n Filter by region\n\n- `sort?: string`\n Comma-separated sort terms in precedence order, each field:asc or field:desc. Fields: region\n\n### Returns\n\n- `{ compute: { memory_gb: quota_dimension_detail; vcpu: quota_dimension_detail; }; networking: { public_ips: quota_dimension_detail; vpcs: quota_dimension_detail; }; nks: { clusters: quota_dimension_detail; node_pool_memory_gb: quota_dimension_detail; node_pool_vcpu: quota_dimension_detail; public_ips: quota_dimension_detail; }; region: 'us-sva-2'; storage: { abs: quota_dimension_detail; local_nvme: quota_dimension_detail; longhorn: quota_dimension_detail; }; }`\n Quota response.\n\n - `compute: { memory_gb: { limit: number; remaining: number; used: number; }; vcpu: { limit: number; remaining: number; used: number; }; }`\n - `networking: { public_ips: { limit: number; remaining: number; used: number; }; vpcs: { limit: number; remaining: number; used: number; }; }`\n - `nks: { clusters: { limit: number; remaining: number; used: number; }; node_pool_memory_gb: { limit: number; remaining: number; used: number; }; node_pool_vcpu: { limit: number; remaining: number; used: number; }; public_ips: { limit: number; remaining: number; used: number; }; }`\n - `region: 'us-sva-2'`\n - `storage: { abs: { limit: number; remaining: number; used: number; }; local_nvme: { limit: number; remaining: number; used: number; }; longhorn: { limit: number; remaining: number; used: number; }; }`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\n// Automatically fetches more pages as needed.\nfor await (const quota of client.quotas.list()) {\n console.log(quota);\n}\n```",
1149
1365
  perLanguage: {
1150
1366
  typescript: {
1151
1367
  method: 'client.quotas.list',
@@ -1510,9 +1726,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [
1510
1726
  qualified: 'client.regions.get',
1511
1727
  params: ['name: string;'],
1512
1728
  response:
1513
- "{ availability: 'live' | 'preview' | 'maintenance' | 'sunset'; compute: { vms: boolean; }; name: string; networking: { vpcs: boolean; }; nks: { autoscaling: boolean; clusters: boolean; }; storage: { abs: boolean; local_nvme: boolean; }; }",
1729
+ "{ availability: 'live' | 'preview' | 'maintenance' | 'sunset'; compute: { vms: boolean; }; name: string; networking: { vpcs: boolean; }; nks: { autoscaling: boolean; clusters: boolean; }; storage: { abs: boolean; local_nvme: boolean; longhorn: boolean; }; }",
1514
1730
  markdown:
1515
- "## get\n\n`client.regions.get(name: string): { availability: region_availability; compute: object; name: string; networking: object; nks: object; storage: object; }`\n\n**get** `/v1/regions/{name}`\n\nGet a region by name\n\n### Parameters\n\n- `name: string`\n\n### Returns\n\n- `{ availability: 'live' | 'preview' | 'maintenance' | 'sunset'; compute: { vms: boolean; }; name: string; networking: { vpcs: boolean; }; nks: { autoscaling: boolean; clusters: boolean; }; storage: { abs: boolean; local_nvme: boolean; }; }`\n Region response with product availability.\n\n - `availability: 'live' | 'preview' | 'maintenance' | 'sunset'`\n - `compute: { vms: boolean; }`\n - `name: string`\n - `networking: { vpcs: boolean; }`\n - `nks: { autoscaling: boolean; clusters: boolean; }`\n - `storage: { abs: boolean; local_nvme: boolean; }`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst region = await client.regions.get('us-sva-2');\n\nconsole.log(region);\n```",
1731
+ "## get\n\n`client.regions.get(name: string): { availability: region_availability; compute: object; name: string; networking: object; nks: object; storage: object; }`\n\n**get** `/v1/regions/{name}`\n\nGet a region by name\n\n### Parameters\n\n- `name: string`\n\n### Returns\n\n- `{ availability: 'live' | 'preview' | 'maintenance' | 'sunset'; compute: { vms: boolean; }; name: string; networking: { vpcs: boolean; }; nks: { autoscaling: boolean; clusters: boolean; }; storage: { abs: boolean; local_nvme: boolean; longhorn: boolean; }; }`\n Region response with product availability.\n\n - `availability: 'live' | 'preview' | 'maintenance' | 'sunset'`\n - `compute: { vms: boolean; }`\n - `name: string`\n - `networking: { vpcs: boolean; }`\n - `nks: { autoscaling: boolean; clusters: boolean; }`\n - `storage: { abs: boolean; local_nvme: boolean; longhorn: boolean; }`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst region = await client.regions.get('us-sva-2');\n\nconsole.log(region);\n```",
1516
1732
  perLanguage: {
1517
1733
  typescript: {
1518
1734
  method: 'client.regions.get',
@@ -1553,11 +1769,12 @@ const EMBEDDED_METHODS: MethodEntry[] = [
1553
1769
  'sort?: string;',
1554
1770
  'storage_abs?: boolean;',
1555
1771
  'storage_local_nvme?: boolean;',
1772
+ 'storage_longhorn?: boolean;',
1556
1773
  ],
1557
1774
  response:
1558
- "{ availability: 'live' | 'preview' | 'maintenance' | 'sunset'; compute: { vms: boolean; }; name: string; networking: { vpcs: boolean; }; nks: { autoscaling: boolean; clusters: boolean; }; storage: { abs: boolean; local_nvme: boolean; }; }",
1775
+ "{ availability: 'live' | 'preview' | 'maintenance' | 'sunset'; compute: { vms: boolean; }; name: string; networking: { vpcs: boolean; }; nks: { autoscaling: boolean; clusters: boolean; }; storage: { abs: boolean; local_nvme: boolean; longhorn: boolean; }; }",
1559
1776
  markdown:
1560
- "## list\n\n`client.regions.list(availability?: 'live' | 'preview' | 'maintenance' | 'sunset', compute_vms?: boolean, cursor?: string, limit?: number, networking_vpcs?: boolean, nks_autoscaling?: boolean, nks_clusters?: boolean, sort?: string, storage_abs?: boolean, storage_local_nvme?: boolean): { availability: region_availability; compute: object; name: string; networking: object; nks: object; storage: object; }`\n\n**get** `/v1/regions`\n\nList all regions\n\n### Parameters\n\n- `availability?: 'live' | 'preview' | 'maintenance' | 'sunset'`\n Filter by region availability\n\n- `compute_vms?: boolean`\n Only regions where Virtual Machines are available\n\n- `cursor?: string`\n Pagination cursor returned by a previous request. Only valid for the same filters and sort order.\n\n- `limit?: number`\n Maximum number of items to return\n\n- `networking_vpcs?: boolean`\n Only regions where VPCs are available\n\n- `nks_autoscaling?: boolean`\n Only regions where NKS node pool autoscaling is available\n\n- `nks_clusters?: boolean`\n Only regions where NKS clusters are available\n\n- `sort?: string`\n Comma-separated sort terms in precedence order, each field:asc or field:desc. Fields: longitude, name, availability\n\n- `storage_abs?: boolean`\n Only regions where Accelerated Block Storage is available\n\n- `storage_local_nvme?: boolean`\n Only regions where locally-attached NVMe storage is available\n\n### Returns\n\n- `{ availability: 'live' | 'preview' | 'maintenance' | 'sunset'; compute: { vms: boolean; }; name: string; networking: { vpcs: boolean; }; nks: { autoscaling: boolean; clusters: boolean; }; storage: { abs: boolean; local_nvme: boolean; }; }`\n Region response with product availability.\n\n - `availability: 'live' | 'preview' | 'maintenance' | 'sunset'`\n - `compute: { vms: boolean; }`\n - `name: string`\n - `networking: { vpcs: boolean; }`\n - `nks: { autoscaling: boolean; clusters: boolean; }`\n - `storage: { abs: boolean; local_nvme: boolean; }`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\n// Automatically fetches more pages as needed.\nfor await (const region of client.regions.list()) {\n console.log(region);\n}\n```",
1777
+ "## list\n\n`client.regions.list(availability?: 'live' | 'preview' | 'maintenance' | 'sunset', compute_vms?: boolean, cursor?: string, limit?: number, networking_vpcs?: boolean, nks_autoscaling?: boolean, nks_clusters?: boolean, sort?: string, storage_abs?: boolean, storage_local_nvme?: boolean, storage_longhorn?: boolean): { availability: region_availability; compute: object; name: string; networking: object; nks: object; storage: object; }`\n\n**get** `/v1/regions`\n\nList all regions\n\n### Parameters\n\n- `availability?: 'live' | 'preview' | 'maintenance' | 'sunset'`\n Filter by region availability\n\n- `compute_vms?: boolean`\n Only regions where Virtual Machines are available\n\n- `cursor?: string`\n Pagination cursor returned by a previous request. Only valid for the same filters and sort order.\n\n- `limit?: number`\n Maximum number of items to return\n\n- `networking_vpcs?: boolean`\n Only regions where VPCs are available\n\n- `nks_autoscaling?: boolean`\n Only regions where NKS node pool autoscaling is available\n\n- `nks_clusters?: boolean`\n Only regions where NKS clusters are available\n\n- `sort?: string`\n Comma-separated sort terms in precedence order, each field:asc or field:desc. Fields: longitude, name, availability\n\n- `storage_abs?: boolean`\n Only regions where Accelerated Block Storage is available\n\n- `storage_local_nvme?: boolean`\n Only regions where locally-attached NVMe storage is available\n\n- `storage_longhorn?: boolean`\n Only regions where Longhorn replicated block storage is available\n\n### Returns\n\n- `{ availability: 'live' | 'preview' | 'maintenance' | 'sunset'; compute: { vms: boolean; }; name: string; networking: { vpcs: boolean; }; nks: { autoscaling: boolean; clusters: boolean; }; storage: { abs: boolean; local_nvme: boolean; longhorn: boolean; }; }`\n Region response with product availability.\n\n - `availability: 'live' | 'preview' | 'maintenance' | 'sunset'`\n - `compute: { vms: boolean; }`\n - `name: string`\n - `networking: { vpcs: boolean; }`\n - `nks: { autoscaling: boolean; clusters: boolean; }`\n - `storage: { abs: boolean; local_nvme: boolean; longhorn: boolean; }`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\n// Automatically fetches more pages as needed.\nfor await (const region of client.regions.list()) {\n console.log(region);\n}\n```",
1561
1778
  perLanguage: {
1562
1779
  typescript: {
1563
1780
  method: 'client.regions.list',
@@ -1672,7 +1889,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [
1672
1889
  stainlessPath: '(resource) compute.vms > (method) create',
1673
1890
  qualified: 'client.compute.vms.create',
1674
1891
  params: [
1675
- "boot_volume: { size: number; type: 'nvme' | 'abs'; tags?: string[]; };",
1892
+ "boot_volume: { size: number; type: 'nvme' | 'abs' | 'longhorn'; tags?: string[]; };",
1676
1893
  'instance_type: string;',
1677
1894
  'name: string;',
1678
1895
  'os_image_name: string;',
@@ -1681,13 +1898,13 @@ const EMBEDDED_METHODS: MethodEntry[] = [
1681
1898
  "region: 'us-sva-2';",
1682
1899
  'ssh_key: { public_key: string; };',
1683
1900
  'subnet_id: string;',
1684
- "data_volumes?: { name: string; size: number; type: 'nvme' | 'abs'; tags?: string[]; }[];",
1901
+ "data_volumes?: { name: string; size: number; type: 'nvme' | 'abs' | 'longhorn'; tags?: string[]; }[];",
1685
1902
  'tags?: string[];',
1686
1903
  ],
1687
1904
  response:
1688
1905
  "{ id: string; created_at: string; details: { changes: operation_changes; }; kind: 'vm' | 'volume' | 'vpc' | 'firewall_rule' | 'nks_cluster' | 'nks_node_pool'; project_id: string; resource_id: string; status: 'pending' | 'running' | 'done' | 'failed' | 'unknown'; type: 'create' | 'update' | 'delete' | 'restart'; updated_at: string; }",
1689
1906
  markdown:
1690
- "## create\n\n`client.compute.vms.create(boot_volume: { size: number; type: 'nvme' | 'abs'; tags?: string[]; }, instance_type: string, name: string, os_image_name: string, project_id: string, public_ip_enabled: boolean, region: 'us-sva-2', ssh_key: { public_key: string; }, subnet_id: string, data_volumes?: { name: string; size: number; type: 'nvme' | 'abs'; tags?: string[]; }[], tags?: string[]): { id: string; created_at: string; details: operation_details; kind: operation_kind; project_id: string; resource_id: string; status: operation_status; type: operation_type; updated_at: string; }`\n\n**post** `/v1/compute/vms`\n\nCreate a VM\n\n### Parameters\n\n- `boot_volume: { size: number; type: 'nvme' | 'abs'; tags?: string[]; }`\n Boot volume for the VM.\n - `size: number`\n Size of the Volume in GB.\n - `type: 'nvme' | 'abs'`\n Type of the Volume.\n - `tags?: string[]`\n Tags to attach to the Volume.\n\n- `instance_type: string`\n Instance type name.\n\n- `name: string`\n Name of the VM.\n\n- `os_image_name: string`\n Name of the OS Image to use for the VM.\n\n- `project_id: string`\n Project ID to create the VM in.\n\n- `public_ip_enabled: boolean`\n Whether to enable public IP for the VM.\n\n- `region: 'us-sva-2'`\n Region the resource is in.\n\n- `ssh_key: { public_key: string; }`\n Public SSH key configuration for the VM.\n - `public_key: string`\n Public key to and use to access the VM.\n\n- `subnet_id: string`\n ID of the subnet to use for the VM.\n\n- `data_volumes?: { name: string; size: number; type: 'nvme' | 'abs'; tags?: string[]; }[]`\n Data volumes for the VM.\n\n- `tags?: string[]`\n Tags to attach to the VM.\n\n### Returns\n\n- `{ id: string; created_at: string; details: { changes: operation_changes; }; kind: 'vm' | 'volume' | 'vpc' | 'firewall_rule' | 'nks_cluster' | 'nks_node_pool'; project_id: string; resource_id: string; status: 'pending' | 'running' | 'done' | 'failed' | 'unknown'; type: 'create' | 'update' | 'delete' | 'restart'; updated_at: string; }`\n Operation details.\n\n - `id: string`\n - `created_at: string`\n - `details: { changes: object; }`\n - `kind: 'vm' | 'volume' | 'vpc' | 'firewall_rule' | 'nks_cluster' | 'nks_node_pool'`\n - `project_id: string`\n - `resource_id: string`\n - `status: 'pending' | 'running' | 'done' | 'failed' | 'unknown'`\n - `type: 'create' | 'update' | 'delete' | 'restart'`\n - `updated_at: string`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst operation = await client.compute.vms.create({\n boot_volume: { size: 100, type: 'abs' },\n instance_type: 'n1-standard-8',\n name: 'my-vm',\n os_image_name: 'ubuntu-noble-2026-05-18',\n project_id: '123e4567-e89b-12d3-a456-426614174000',\n public_ip_enabled: true,\n region: 'us-sva-2',\n ssh_key: { public_key: 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDBIASkmwNiLcdlW6927Zjt1Hf7Kw/PpEZ4Zm+wU9wn2' },\n subnet_id: '123e4567-e89b-12d3-a456-426614174000',\n});\n\nconsole.log(operation);\n```",
1907
+ "## create\n\n`client.compute.vms.create(boot_volume: { size: number; type: 'nvme' | 'abs' | 'longhorn'; tags?: string[]; }, instance_type: string, name: string, os_image_name: string, project_id: string, public_ip_enabled: boolean, region: 'us-sva-2', ssh_key: { public_key: string; }, subnet_id: string, data_volumes?: { name: string; size: number; type: 'nvme' | 'abs' | 'longhorn'; tags?: string[]; }[], tags?: string[]): { id: string; created_at: string; details: operation_details; kind: operation_kind; project_id: string; resource_id: string; status: operation_status; type: operation_type; updated_at: string; }`\n\n**post** `/v1/compute/vms`\n\nCreate a VM\n\n### Parameters\n\n- `boot_volume: { size: number; type: 'nvme' | 'abs' | 'longhorn'; tags?: string[]; }`\n Boot volume for the VM.\n - `size: number`\n Size of the Volume in GB.\n - `type: 'nvme' | 'abs' | 'longhorn'`\n Type of the Volume.\n - `tags?: string[]`\n Tags to attach to the Volume.\n\n- `instance_type: string`\n Instance type name.\n\n- `name: string`\n Name of the VM.\n\n- `os_image_name: string`\n Name of the OS Image to use for the VM.\n\n- `project_id: string`\n Project ID to create the VM in.\n\n- `public_ip_enabled: boolean`\n Whether to enable public IP for the VM.\n\n- `region: 'us-sva-2'`\n Region the resource is in.\n\n- `ssh_key: { public_key: string; }`\n Public SSH key configuration for the VM.\n - `public_key: string`\n Public key to and use to access the VM.\n\n- `subnet_id: string`\n ID of the subnet to use for the VM.\n\n- `data_volumes?: { name: string; size: number; type: 'nvme' | 'abs' | 'longhorn'; tags?: string[]; }[]`\n Data volumes for the VM.\n\n- `tags?: string[]`\n Tags to attach to the VM.\n\n### Returns\n\n- `{ id: string; created_at: string; details: { changes: operation_changes; }; kind: 'vm' | 'volume' | 'vpc' | 'firewall_rule' | 'nks_cluster' | 'nks_node_pool'; project_id: string; resource_id: string; status: 'pending' | 'running' | 'done' | 'failed' | 'unknown'; type: 'create' | 'update' | 'delete' | 'restart'; updated_at: string; }`\n Operation details.\n\n - `id: string`\n - `created_at: string`\n - `details: { changes: object; }`\n - `kind: 'vm' | 'volume' | 'vpc' | 'firewall_rule' | 'nks_cluster' | 'nks_node_pool'`\n - `project_id: string`\n - `resource_id: string`\n - `status: 'pending' | 'running' | 'done' | 'failed' | 'unknown'`\n - `type: 'create' | 'update' | 'delete' | 'restart'`\n - `updated_at: string`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst operation = await client.compute.vms.create({\n boot_volume: { size: 100, type: 'abs' },\n instance_type: 'n1-standard-8',\n name: 'my-vm',\n os_image_name: 'ubuntu-noble-2026-05-18',\n project_id: '123e4567-e89b-12d3-a456-426614174000',\n public_ip_enabled: true,\n region: 'us-sva-2',\n ssh_key: { public_key: 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDBIASkmwNiLcdlW6927Zjt1Hf7Kw/PpEZ4Zm+wU9wn2' },\n subnet_id: '123e4567-e89b-12d3-a456-426614174000',\n});\n\nconsole.log(operation);\n```",
1691
1908
  perLanguage: {
1692
1909
  typescript: {
1693
1910
  method: 'client.compute.vms.create',
@@ -1907,7 +2124,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [
1907
2124
  stainlessPath: '(resource) compute.vms.availability > (method) create',
1908
2125
  qualified: 'client.compute.vms.availability.create',
1909
2126
  params: [
1910
- "boot_volume: { size: number; type: 'nvme' | 'abs'; tags?: string[]; };",
2127
+ "boot_volume: { size: number; type: 'nvme' | 'abs' | 'longhorn'; tags?: string[]; };",
1911
2128
  'instance_type: string;',
1912
2129
  'name: string;',
1913
2130
  'os_image_name: string;',
@@ -1916,11 +2133,11 @@ const EMBEDDED_METHODS: MethodEntry[] = [
1916
2133
  "region: 'us-sva-2';",
1917
2134
  'ssh_key: { public_key: string; };',
1918
2135
  'subnet_id: string;',
1919
- "data_volumes?: { name: string; size: number; type: 'nvme' | 'abs'; tags?: string[]; }[];",
2136
+ "data_volumes?: { name: string; size: number; type: 'nvme' | 'abs' | 'longhorn'; tags?: string[]; }[];",
1920
2137
  'tags?: string[];',
1921
2138
  ],
1922
2139
  markdown:
1923
- "## create\n\n`client.compute.vms.availability.create(boot_volume: { size: number; type: 'nvme' | 'abs'; tags?: string[]; }, instance_type: string, name: string, os_image_name: string, project_id: string, public_ip_enabled: boolean, region: 'us-sva-2', ssh_key: { public_key: string; }, subnet_id: string, data_volumes?: { name: string; size: number; type: 'nvme' | 'abs'; tags?: string[]; }[], tags?: string[]): void`\n\n**post** `/v1/compute/vms/availability`\n\nCheck VM Create Availability\n\n### Parameters\n\n- `boot_volume: { size: number; type: 'nvme' | 'abs'; tags?: string[]; }`\n Boot volume for the VM.\n - `size: number`\n Size of the Volume in GB.\n - `type: 'nvme' | 'abs'`\n Type of the Volume.\n - `tags?: string[]`\n Tags to attach to the Volume.\n\n- `instance_type: string`\n Instance type name.\n\n- `name: string`\n Name of the VM.\n\n- `os_image_name: string`\n Name of the OS Image to use for the VM.\n\n- `project_id: string`\n Project ID to create the VM in.\n\n- `public_ip_enabled: boolean`\n Whether to enable public IP for the VM.\n\n- `region: 'us-sva-2'`\n Region the resource is in.\n\n- `ssh_key: { public_key: string; }`\n Public SSH key configuration for the VM.\n - `public_key: string`\n Public key to and use to access the VM.\n\n- `subnet_id: string`\n ID of the subnet to use for the VM.\n\n- `data_volumes?: { name: string; size: number; type: 'nvme' | 'abs'; tags?: string[]; }[]`\n Data volumes for the VM.\n\n- `tags?: string[]`\n Tags to attach to the VM.\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nawait client.compute.vms.availability.create({\n boot_volume: { size: 100, type: 'abs' },\n instance_type: 'n1-standard-8',\n name: 'my-vm',\n os_image_name: 'ubuntu-noble-2026-05-18',\n project_id: '123e4567-e89b-12d3-a456-426614174000',\n public_ip_enabled: true,\n region: 'us-sva-2',\n ssh_key: { public_key: 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDBIASkmwNiLcdlW6927Zjt1Hf7Kw/PpEZ4Zm+wU9wn2' },\n subnet_id: '123e4567-e89b-12d3-a456-426614174000',\n})\n```",
2140
+ "## create\n\n`client.compute.vms.availability.create(boot_volume: { size: number; type: 'nvme' | 'abs' | 'longhorn'; tags?: string[]; }, instance_type: string, name: string, os_image_name: string, project_id: string, public_ip_enabled: boolean, region: 'us-sva-2', ssh_key: { public_key: string; }, subnet_id: string, data_volumes?: { name: string; size: number; type: 'nvme' | 'abs' | 'longhorn'; tags?: string[]; }[], tags?: string[]): void`\n\n**post** `/v1/compute/vms/availability`\n\nCheck VM Create Availability\n\n### Parameters\n\n- `boot_volume: { size: number; type: 'nvme' | 'abs' | 'longhorn'; tags?: string[]; }`\n Boot volume for the VM.\n - `size: number`\n Size of the Volume in GB.\n - `type: 'nvme' | 'abs' | 'longhorn'`\n Type of the Volume.\n - `tags?: string[]`\n Tags to attach to the Volume.\n\n- `instance_type: string`\n Instance type name.\n\n- `name: string`\n Name of the VM.\n\n- `os_image_name: string`\n Name of the OS Image to use for the VM.\n\n- `project_id: string`\n Project ID to create the VM in.\n\n- `public_ip_enabled: boolean`\n Whether to enable public IP for the VM.\n\n- `region: 'us-sva-2'`\n Region the resource is in.\n\n- `ssh_key: { public_key: string; }`\n Public SSH key configuration for the VM.\n - `public_key: string`\n Public key to and use to access the VM.\n\n- `subnet_id: string`\n ID of the subnet to use for the VM.\n\n- `data_volumes?: { name: string; size: number; type: 'nvme' | 'abs' | 'longhorn'; tags?: string[]; }[]`\n Data volumes for the VM.\n\n- `tags?: string[]`\n Tags to attach to the VM.\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nawait client.compute.vms.availability.create({\n boot_volume: { size: 100, type: 'abs' },\n instance_type: 'n1-standard-8',\n name: 'my-vm',\n os_image_name: 'ubuntu-noble-2026-05-18',\n project_id: '123e4567-e89b-12d3-a456-426614174000',\n public_ip_enabled: true,\n region: 'us-sva-2',\n ssh_key: { public_key: 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDBIASkmwNiLcdlW6927Zjt1Hf7Kw/PpEZ4Zm+wU9wn2' },\n subnet_id: '123e4567-e89b-12d3-a456-426614174000',\n})\n```",
1924
2141
  perLanguage: {
1925
2142
  typescript: {
1926
2143
  method: 'client.compute.vms.availability.create',
@@ -1990,7 +2207,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [
1990
2207
  stainlessPath: '(resource) compute.vms.cost > (method) create',
1991
2208
  qualified: 'client.compute.vms.cost.create',
1992
2209
  params: [
1993
- "boot_volume: { size: number; type: 'nvme' | 'abs'; tags?: string[]; };",
2210
+ "boot_volume: { size: number; type: 'nvme' | 'abs' | 'longhorn'; tags?: string[]; };",
1994
2211
  'instance_type: string;',
1995
2212
  'name: string;',
1996
2213
  'os_image_name: string;',
@@ -1999,13 +2216,13 @@ const EMBEDDED_METHODS: MethodEntry[] = [
1999
2216
  "region: 'us-sva-2';",
2000
2217
  'ssh_key: { public_key: string; };',
2001
2218
  'subnet_id: string;',
2002
- "data_volumes?: { name: string; size: number; type: 'nvme' | 'abs'; tags?: string[]; }[];",
2219
+ "data_volumes?: { name: string; size: number; type: 'nvme' | 'abs' | 'longhorn'; tags?: string[]; }[];",
2003
2220
  'tags?: string[];',
2004
2221
  ],
2005
2222
  response:
2006
2223
  '{ currency: string; monthly_total: string; priced_at: string; usage_dimensions: { dimension: string; dimension_display_name: string; monthly_amount: string; quantity: number; unit_price: string; }[]; current_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }; updated_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }; }',
2007
2224
  markdown:
2008
- "## create\n\n`client.compute.vms.cost.create(boot_volume: { size: number; type: 'nvme' | 'abs'; tags?: string[]; }, instance_type: string, name: string, os_image_name: string, project_id: string, public_ip_enabled: boolean, region: 'us-sva-2', ssh_key: { public_key: string; }, subnet_id: string, data_volumes?: { name: string; size: number; type: 'nvme' | 'abs'; tags?: string[]; }[], tags?: string[]): { currency: string; monthly_total: string; priced_at: string; usage_dimensions: object[]; current_summary?: organization_billing_summary; updated_summary?: organization_billing_summary; }`\n\n**post** `/v1/compute/vms/cost`\n\nReturn a priced cost quote for the proposed VM.\n\n### Parameters\n\n- `boot_volume: { size: number; type: 'nvme' | 'abs'; tags?: string[]; }`\n Boot volume for the VM.\n - `size: number`\n Size of the Volume in GB.\n - `type: 'nvme' | 'abs'`\n Type of the Volume.\n - `tags?: string[]`\n Tags to attach to the Volume.\n\n- `instance_type: string`\n Instance type name.\n\n- `name: string`\n Name of the VM.\n\n- `os_image_name: string`\n Name of the OS Image to use for the VM.\n\n- `project_id: string`\n Project ID to create the VM in.\n\n- `public_ip_enabled: boolean`\n Whether to enable public IP for the VM.\n\n- `region: 'us-sva-2'`\n Region the resource is in.\n\n- `ssh_key: { public_key: string; }`\n Public SSH key configuration for the VM.\n - `public_key: string`\n Public key to and use to access the VM.\n\n- `subnet_id: string`\n ID of the subnet to use for the VM.\n\n- `data_volumes?: { name: string; size: number; type: 'nvme' | 'abs'; tags?: string[]; }[]`\n Data volumes for the VM.\n\n- `tags?: string[]`\n Tags to attach to the VM.\n\n### Returns\n\n- `{ currency: string; monthly_total: string; priced_at: string; usage_dimensions: { dimension: string; dimension_display_name: string; monthly_amount: string; quantity: number; unit_price: string; }[]; current_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }; updated_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }; }`\n Cost quote returned by POST /cost. current_summary and updated_summary hold the org billing summary now and with this resource; omitted when the caller cannot view billing.\n\n - `currency: string`\n - `monthly_total: string`\n - `priced_at: string`\n - `usage_dimensions: { dimension: string; dimension_display_name: string; monthly_amount: string; quantity: number; unit_price: string; }[]`\n - `current_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }`\n - `updated_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst costQuote = await client.compute.vms.cost.create({\n boot_volume: { size: 100, type: 'abs' },\n instance_type: 'n1-standard-8',\n name: 'my-vm',\n os_image_name: 'ubuntu-noble-2026-05-18',\n project_id: '123e4567-e89b-12d3-a456-426614174000',\n public_ip_enabled: true,\n region: 'us-sva-2',\n ssh_key: { public_key: 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDBIASkmwNiLcdlW6927Zjt1Hf7Kw/PpEZ4Zm+wU9wn2' },\n subnet_id: '123e4567-e89b-12d3-a456-426614174000',\n});\n\nconsole.log(costQuote);\n```",
2225
+ "## create\n\n`client.compute.vms.cost.create(boot_volume: { size: number; type: 'nvme' | 'abs' | 'longhorn'; tags?: string[]; }, instance_type: string, name: string, os_image_name: string, project_id: string, public_ip_enabled: boolean, region: 'us-sva-2', ssh_key: { public_key: string; }, subnet_id: string, data_volumes?: { name: string; size: number; type: 'nvme' | 'abs' | 'longhorn'; tags?: string[]; }[], tags?: string[]): { currency: string; monthly_total: string; priced_at: string; usage_dimensions: object[]; current_summary?: organization_billing_summary; updated_summary?: organization_billing_summary; }`\n\n**post** `/v1/compute/vms/cost`\n\nReturn a priced cost quote for the proposed VM.\n\n### Parameters\n\n- `boot_volume: { size: number; type: 'nvme' | 'abs' | 'longhorn'; tags?: string[]; }`\n Boot volume for the VM.\n - `size: number`\n Size of the Volume in GB.\n - `type: 'nvme' | 'abs' | 'longhorn'`\n Type of the Volume.\n - `tags?: string[]`\n Tags to attach to the Volume.\n\n- `instance_type: string`\n Instance type name.\n\n- `name: string`\n Name of the VM.\n\n- `os_image_name: string`\n Name of the OS Image to use for the VM.\n\n- `project_id: string`\n Project ID to create the VM in.\n\n- `public_ip_enabled: boolean`\n Whether to enable public IP for the VM.\n\n- `region: 'us-sva-2'`\n Region the resource is in.\n\n- `ssh_key: { public_key: string; }`\n Public SSH key configuration for the VM.\n - `public_key: string`\n Public key to and use to access the VM.\n\n- `subnet_id: string`\n ID of the subnet to use for the VM.\n\n- `data_volumes?: { name: string; size: number; type: 'nvme' | 'abs' | 'longhorn'; tags?: string[]; }[]`\n Data volumes for the VM.\n\n- `tags?: string[]`\n Tags to attach to the VM.\n\n### Returns\n\n- `{ currency: string; monthly_total: string; priced_at: string; usage_dimensions: { dimension: string; dimension_display_name: string; monthly_amount: string; quantity: number; unit_price: string; }[]; current_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }; updated_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }; }`\n Cost quote returned by POST /cost. current_summary and updated_summary hold the org billing summary now and with this resource; omitted when the caller cannot view billing.\n\n - `currency: string`\n - `monthly_total: string`\n - `priced_at: string`\n - `usage_dimensions: { dimension: string; dimension_display_name: string; monthly_amount: string; quantity: number; unit_price: string; }[]`\n - `current_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }`\n - `updated_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst costQuote = await client.compute.vms.cost.create({\n boot_volume: { size: 100, type: 'abs' },\n instance_type: 'n1-standard-8',\n name: 'my-vm',\n os_image_name: 'ubuntu-noble-2026-05-18',\n project_id: '123e4567-e89b-12d3-a456-426614174000',\n public_ip_enabled: true,\n region: 'us-sva-2',\n ssh_key: { public_key: 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDBIASkmwNiLcdlW6927Zjt1Hf7Kw/PpEZ4Zm+wU9wn2' },\n subnet_id: '123e4567-e89b-12d3-a456-426614174000',\n});\n\nconsole.log(costQuote);\n```",
2009
2226
  perLanguage: {
2010
2227
  typescript: {
2011
2228
  method: 'client.compute.vms.cost.create',
@@ -2086,12 +2303,12 @@ const EMBEDDED_METHODS: MethodEntry[] = [
2086
2303
  'sort?: string;',
2087
2304
  "status?: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'error';",
2088
2305
  'tags?: string[];',
2089
- "type?: 'nvme' | 'abs';",
2306
+ "type?: 'nvme' | 'abs' | 'longhorn';",
2090
2307
  ],
2091
2308
  response:
2092
- "{ id: string; created_at: string; kind: 'boot' | 'data'; name: string; project_id: string; region: 'us-sva-2'; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; tags: string[]; type: 'nvme' | 'abs'; updated_at: string; vm_id: string; vm_name: string; }",
2309
+ "{ id: string; created_at: string; kind: 'boot' | 'data'; name: string; project_id: string; region: 'us-sva-2'; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; tags: string[]; type: 'nvme' | 'abs' | 'longhorn'; updated_at: string; vm_id: string; vm_name: string; }",
2093
2310
  markdown:
2094
- "## list\n\n`client.compute.vms.volumes.list(vm_id: string, cursor?: string, kind?: 'boot' | 'data', limit?: number, name?: string, sort?: string, status?: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'error', tags?: string[], type?: 'nvme' | 'abs'): { id: string; created_at: string; kind: volume_kind; name: string; project_id: string; region: region_name; size: number; status: resource_status; tags: string[]; type: volume_type; updated_at: string; vm_id: string; vm_name: string; }`\n\n**get** `/v1/compute/vms/{vm_id}/volumes`\n\nList VM's Volumes\n\n### Parameters\n\n- `vm_id: string`\n\n- `cursor?: string`\n Pagination cursor returned by a previous request. Only valid for the same VM, filters and sort order.\n\n- `kind?: 'boot' | 'data'`\n Filter by Volume kind\n\n- `limit?: number`\n Maximum number of items to return\n\n- `name?: string`\n Filter by a case-insensitive substring of the Volume name\n\n- `sort?: string`\n Comma-separated sort terms in precedence order, each field:asc or field:desc. Fields: created_at, updated_at, name, status, size\n\n- `status?: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'error'`\n Filter by Volume status\n\n- `tags?: string[]`\n Filter by tags. Repeat the parameter to require several tags; a Volume must carry all of them.\n\n- `type?: 'nvme' | 'abs'`\n Filter by storage type\n\n### Returns\n\n- `{ id: string; created_at: string; kind: 'boot' | 'data'; name: string; project_id: string; region: 'us-sva-2'; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; tags: string[]; type: 'nvme' | 'abs'; updated_at: string; vm_id: string; vm_name: string; }`\n Volume details.\n\n - `id: string`\n - `created_at: string`\n - `kind: 'boot' | 'data'`\n - `name: string`\n - `project_id: string`\n - `region: 'us-sva-2'`\n - `size: number`\n - `status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'`\n - `tags: string[]`\n - `type: 'nvme' | 'abs'`\n - `updated_at: string`\n - `vm_id: string`\n - `vm_name: string`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\n// Automatically fetches more pages as needed.\nfor await (const volume of client.compute.vms.volumes.list('vm_id')) {\n console.log(volume);\n}\n```",
2311
+ "## list\n\n`client.compute.vms.volumes.list(vm_id: string, cursor?: string, kind?: 'boot' | 'data', limit?: number, name?: string, sort?: string, status?: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'error', tags?: string[], type?: 'nvme' | 'abs' | 'longhorn'): { id: string; created_at: string; kind: volume_kind; name: string; project_id: string; region: region_name; size: number; status: resource_status; tags: string[]; type: volume_type; updated_at: string; vm_id: string; vm_name: string; }`\n\n**get** `/v1/compute/vms/{vm_id}/volumes`\n\nList VM's Volumes\n\n### Parameters\n\n- `vm_id: string`\n\n- `cursor?: string`\n Pagination cursor returned by a previous request. Only valid for the same VM, filters and sort order.\n\n- `kind?: 'boot' | 'data'`\n Filter by Volume kind\n\n- `limit?: number`\n Maximum number of items to return\n\n- `name?: string`\n Filter by a case-insensitive substring of the Volume name\n\n- `sort?: string`\n Comma-separated sort terms in precedence order, each field:asc or field:desc. Fields: created_at, updated_at, name, status, size\n\n- `status?: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'error'`\n Filter by Volume status\n\n- `tags?: string[]`\n Filter by tags. Repeat the parameter to require several tags; a Volume must carry all of them.\n\n- `type?: 'nvme' | 'abs' | 'longhorn'`\n Filter by storage type\n\n### Returns\n\n- `{ id: string; created_at: string; kind: 'boot' | 'data'; name: string; project_id: string; region: 'us-sva-2'; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; tags: string[]; type: 'nvme' | 'abs' | 'longhorn'; updated_at: string; vm_id: string; vm_name: string; }`\n Volume details.\n\n - `id: string`\n - `created_at: string`\n - `kind: 'boot' | 'data'`\n - `name: string`\n - `project_id: string`\n - `region: 'us-sva-2'`\n - `size: number`\n - `status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'`\n - `tags: string[]`\n - `type: 'nvme' | 'abs' | 'longhorn'`\n - `updated_at: string`\n - `vm_id: string`\n - `vm_name: string`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\n// Automatically fetches more pages as needed.\nfor await (const volume of client.compute.vms.volumes.list('vm_id')) {\n console.log(volume);\n}\n```",
2095
2312
  perLanguage: {
2096
2313
  typescript: {
2097
2314
  method: 'client.compute.vms.volumes.list',
@@ -2241,14 +2458,14 @@ const EMBEDDED_METHODS: MethodEntry[] = [
2241
2458
  'project_id: string;',
2242
2459
  "region: 'us-sva-2';",
2243
2460
  'size: number;',
2244
- "type: 'nvme' | 'abs';",
2461
+ "type: 'nvme' | 'abs' | 'longhorn';",
2245
2462
  'tags?: string[];',
2246
2463
  'vm_id?: string;',
2247
2464
  ],
2248
2465
  response:
2249
2466
  "{ id: string; created_at: string; details: { changes: operation_changes; }; kind: 'vm' | 'volume' | 'vpc' | 'firewall_rule' | 'nks_cluster' | 'nks_node_pool'; project_id: string; resource_id: string; status: 'pending' | 'running' | 'done' | 'failed' | 'unknown'; type: 'create' | 'update' | 'delete' | 'restart'; updated_at: string; }",
2250
2467
  markdown:
2251
- "## create\n\n`client.compute.volumes.create(name: string, project_id: string, region: 'us-sva-2', size: number, type: 'nvme' | 'abs', tags?: string[], vm_id?: string): { id: string; created_at: string; details: operation_details; kind: operation_kind; project_id: string; resource_id: string; status: operation_status; type: operation_type; updated_at: string; }`\n\n**post** `/v1/compute/volumes`\n\nCreate a Volume. Only data volumes can be created.\n\n### Parameters\n\n- `name: string`\n Name of the Volume.\n\n- `project_id: string`\n Project ID the Volume belongs to.\n\n- `region: 'us-sva-2'`\n Region the resource is in.\n\n- `size: number`\n Size of the Volume in GB.\n\n- `type: 'nvme' | 'abs'`\n Type of the Volume.\n\n- `tags?: string[]`\n Tags to attach to the Volume.\n\n- `vm_id?: string`\n ID of the VM the Volume is attached to.\n\n### Returns\n\n- `{ id: string; created_at: string; details: { changes: operation_changes; }; kind: 'vm' | 'volume' | 'vpc' | 'firewall_rule' | 'nks_cluster' | 'nks_node_pool'; project_id: string; resource_id: string; status: 'pending' | 'running' | 'done' | 'failed' | 'unknown'; type: 'create' | 'update' | 'delete' | 'restart'; updated_at: string; }`\n Operation details.\n\n - `id: string`\n - `created_at: string`\n - `details: { changes: object; }`\n - `kind: 'vm' | 'volume' | 'vpc' | 'firewall_rule' | 'nks_cluster' | 'nks_node_pool'`\n - `project_id: string`\n - `resource_id: string`\n - `status: 'pending' | 'running' | 'done' | 'failed' | 'unknown'`\n - `type: 'create' | 'update' | 'delete' | 'restart'`\n - `updated_at: string`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst operation = await client.compute.volumes.create({\n name: 'my-data-volume',\n project_id: '123e4567-e89b-12d3-a456-426614174000',\n region: 'us-sva-2',\n size: 100,\n type: 'abs',\n});\n\nconsole.log(operation);\n```",
2468
+ "## create\n\n`client.compute.volumes.create(name: string, project_id: string, region: 'us-sva-2', size: number, type: 'nvme' | 'abs' | 'longhorn', tags?: string[], vm_id?: string): { id: string; created_at: string; details: operation_details; kind: operation_kind; project_id: string; resource_id: string; status: operation_status; type: operation_type; updated_at: string; }`\n\n**post** `/v1/compute/volumes`\n\nCreate a Volume. Only data volumes can be created.\n\n### Parameters\n\n- `name: string`\n Name of the Volume.\n\n- `project_id: string`\n Project ID the Volume belongs to.\n\n- `region: 'us-sva-2'`\n Region the resource is in.\n\n- `size: number`\n Size of the Volume in GB.\n\n- `type: 'nvme' | 'abs' | 'longhorn'`\n Type of the Volume.\n\n- `tags?: string[]`\n Tags to attach to the Volume.\n\n- `vm_id?: string`\n ID of the VM the Volume is attached to.\n\n### Returns\n\n- `{ id: string; created_at: string; details: { changes: operation_changes; }; kind: 'vm' | 'volume' | 'vpc' | 'firewall_rule' | 'nks_cluster' | 'nks_node_pool'; project_id: string; resource_id: string; status: 'pending' | 'running' | 'done' | 'failed' | 'unknown'; type: 'create' | 'update' | 'delete' | 'restart'; updated_at: string; }`\n Operation details.\n\n - `id: string`\n - `created_at: string`\n - `details: { changes: object; }`\n - `kind: 'vm' | 'volume' | 'vpc' | 'firewall_rule' | 'nks_cluster' | 'nks_node_pool'`\n - `project_id: string`\n - `resource_id: string`\n - `status: 'pending' | 'running' | 'done' | 'failed' | 'unknown'`\n - `type: 'create' | 'update' | 'delete' | 'restart'`\n - `updated_at: string`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst operation = await client.compute.volumes.create({\n name: 'my-data-volume',\n project_id: '123e4567-e89b-12d3-a456-426614174000',\n region: 'us-sva-2',\n size: 100,\n type: 'abs',\n});\n\nconsole.log(operation);\n```",
2252
2469
  perLanguage: {
2253
2470
  typescript: {
2254
2471
  method: 'client.compute.volumes.create',
@@ -2281,9 +2498,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [
2281
2498
  qualified: 'client.compute.volumes.get',
2282
2499
  params: ['volume_id: string;'],
2283
2500
  response:
2284
- "{ id: string; created_at: string; kind: 'boot' | 'data'; name: string; project_id: string; region: 'us-sva-2'; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; tags: string[]; type: 'nvme' | 'abs'; updated_at: string; vm_id: string; vm_name: string; }",
2501
+ "{ id: string; created_at: string; kind: 'boot' | 'data'; name: string; project_id: string; region: 'us-sva-2'; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; tags: string[]; type: 'nvme' | 'abs' | 'longhorn'; updated_at: string; vm_id: string; vm_name: string; }",
2285
2502
  markdown:
2286
- "## get\n\n`client.compute.volumes.get(volume_id: string): { id: string; created_at: string; kind: volume_kind; name: string; project_id: string; region: region_name; size: number; status: resource_status; tags: string[]; type: volume_type; updated_at: string; vm_id: string; vm_name: string; }`\n\n**get** `/v1/compute/volumes/{volume_id}`\n\nGet a Volume.\n\n### Parameters\n\n- `volume_id: string`\n\n### Returns\n\n- `{ id: string; created_at: string; kind: 'boot' | 'data'; name: string; project_id: string; region: 'us-sva-2'; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; tags: string[]; type: 'nvme' | 'abs'; updated_at: string; vm_id: string; vm_name: string; }`\n Volume details.\n\n - `id: string`\n - `created_at: string`\n - `kind: 'boot' | 'data'`\n - `name: string`\n - `project_id: string`\n - `region: 'us-sva-2'`\n - `size: number`\n - `status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'`\n - `tags: string[]`\n - `type: 'nvme' | 'abs'`\n - `updated_at: string`\n - `vm_id: string`\n - `vm_name: string`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst volume = await client.compute.volumes.get('volume_id');\n\nconsole.log(volume);\n```",
2503
+ "## get\n\n`client.compute.volumes.get(volume_id: string): { id: string; created_at: string; kind: volume_kind; name: string; project_id: string; region: region_name; size: number; status: resource_status; tags: string[]; type: volume_type; updated_at: string; vm_id: string; vm_name: string; }`\n\n**get** `/v1/compute/volumes/{volume_id}`\n\nGet a Volume.\n\n### Parameters\n\n- `volume_id: string`\n\n### Returns\n\n- `{ id: string; created_at: string; kind: 'boot' | 'data'; name: string; project_id: string; region: 'us-sva-2'; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; tags: string[]; type: 'nvme' | 'abs' | 'longhorn'; updated_at: string; vm_id: string; vm_name: string; }`\n Volume details.\n\n - `id: string`\n - `created_at: string`\n - `kind: 'boot' | 'data'`\n - `name: string`\n - `project_id: string`\n - `region: 'us-sva-2'`\n - `size: number`\n - `status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'`\n - `tags: string[]`\n - `type: 'nvme' | 'abs' | 'longhorn'`\n - `updated_at: string`\n - `vm_id: string`\n - `vm_name: string`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst volume = await client.compute.volumes.get('volume_id');\n\nconsole.log(volume);\n```",
2287
2504
  perLanguage: {
2288
2505
  typescript: {
2289
2506
  method: 'client.compute.volumes.get',
@@ -2317,7 +2534,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [
2317
2534
  response:
2318
2535
  "{ id: string; created_at: string; details: { changes: operation_changes; }; kind: 'vm' | 'volume' | 'vpc' | 'firewall_rule' | 'nks_cluster' | 'nks_node_pool'; project_id: string; resource_id: string; status: 'pending' | 'running' | 'done' | 'failed' | 'unknown'; type: 'create' | 'update' | 'delete' | 'restart'; updated_at: string; }",
2319
2536
  markdown:
2320
- "## update\n\n`client.compute.volumes.update(volume_id: string, name?: string, size?: number, tags?: string[]): { id: string; created_at: string; details: operation_details; kind: operation_kind; project_id: string; resource_id: string; status: operation_status; type: operation_type; updated_at: string; }`\n\n**patch** `/v1/compute/volumes/{volume_id}`\n\nUpdate a Volume. Boot or data volumes can be updated.\n\n### Parameters\n\n- `volume_id: string`\n\n- `name?: string`\n Name of the Volume.\n\n- `size?: number`\n Size of the Volume in GB.\n\n- `tags?: string[]`\n Tags to attach to the Volume.\n\n### Returns\n\n- `{ id: string; created_at: string; details: { changes: operation_changes; }; kind: 'vm' | 'volume' | 'vpc' | 'firewall_rule' | 'nks_cluster' | 'nks_node_pool'; project_id: string; resource_id: string; status: 'pending' | 'running' | 'done' | 'failed' | 'unknown'; type: 'create' | 'update' | 'delete' | 'restart'; updated_at: string; }`\n Operation details.\n\n - `id: string`\n - `created_at: string`\n - `details: { changes: object; }`\n - `kind: 'vm' | 'volume' | 'vpc' | 'firewall_rule' | 'nks_cluster' | 'nks_node_pool'`\n - `project_id: string`\n - `resource_id: string`\n - `status: 'pending' | 'running' | 'done' | 'failed' | 'unknown'`\n - `type: 'create' | 'update' | 'delete' | 'restart'`\n - `updated_at: string`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst operation = await client.compute.volumes.update('volume_id');\n\nconsole.log(operation);\n```",
2537
+ "## update\n\n`client.compute.volumes.update(volume_id: string, name?: string, size?: number, tags?: string[]): { id: string; created_at: string; details: operation_details; kind: operation_kind; project_id: string; resource_id: string; status: operation_status; type: operation_type; updated_at: string; }`\n\n**patch** `/v1/compute/volumes/{volume_id}`\n\nUpdate a Volume. Boot or data volumes can be updated.\n\n### Parameters\n\n- `volume_id: string`\n\n- `name?: string`\n Name of the Volume.\n\n- `size?: number`\n Size of the Volume in GB. Longhorn volumes cannot be resized.\n\n- `tags?: string[]`\n Tags to attach to the Volume.\n\n### Returns\n\n- `{ id: string; created_at: string; details: { changes: operation_changes; }; kind: 'vm' | 'volume' | 'vpc' | 'firewall_rule' | 'nks_cluster' | 'nks_node_pool'; project_id: string; resource_id: string; status: 'pending' | 'running' | 'done' | 'failed' | 'unknown'; type: 'create' | 'update' | 'delete' | 'restart'; updated_at: string; }`\n Operation details.\n\n - `id: string`\n - `created_at: string`\n - `details: { changes: object; }`\n - `kind: 'vm' | 'volume' | 'vpc' | 'firewall_rule' | 'nks_cluster' | 'nks_node_pool'`\n - `project_id: string`\n - `resource_id: string`\n - `status: 'pending' | 'running' | 'done' | 'failed' | 'unknown'`\n - `type: 'create' | 'update' | 'delete' | 'restart'`\n - `updated_at: string`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst operation = await client.compute.volumes.update('volume_id');\n\nconsole.log(operation);\n```",
2321
2538
  perLanguage: {
2322
2539
  typescript: {
2323
2540
  method: 'client.compute.volumes.update',
@@ -2392,13 +2609,13 @@ const EMBEDDED_METHODS: MethodEntry[] = [
2392
2609
  'sort?: string;',
2393
2610
  "status?: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'error';",
2394
2611
  'tags?: string[];',
2395
- "type?: 'nvme' | 'abs';",
2612
+ "type?: 'nvme' | 'abs' | 'longhorn';",
2396
2613
  'vm_id?: string;',
2397
2614
  ],
2398
2615
  response:
2399
- "{ id: string; created_at: string; kind: 'boot' | 'data'; name: string; project_id: string; region: 'us-sva-2'; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; tags: string[]; type: 'nvme' | 'abs'; updated_at: string; vm_id: string; vm_name: string; }",
2616
+ "{ id: string; created_at: string; kind: 'boot' | 'data'; name: string; project_id: string; region: 'us-sva-2'; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; tags: string[]; type: 'nvme' | 'abs' | 'longhorn'; updated_at: string; vm_id: string; vm_name: string; }",
2400
2617
  markdown:
2401
- "## list\n\n`client.compute.volumes.list(project_id: string, attached?: boolean, cursor?: string, kind?: 'boot' | 'data', limit?: number, name?: string, region?: string, sort?: string, status?: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'error', tags?: string[], type?: 'nvme' | 'abs', vm_id?: string): { id: string; created_at: string; kind: volume_kind; name: string; project_id: string; region: region_name; size: number; status: resource_status; tags: string[]; type: volume_type; updated_at: string; vm_id: string; vm_name: string; }`\n\n**get** `/v1/compute/volumes`\n\nList all volumes\n\n### Parameters\n\n- `project_id: string`\n Project ID of resources to request\n\n- `attached?: boolean`\n Filter by whether the Volume is attached to a VM. Combine with vm_id and both must hold.\n\n- `cursor?: string`\n Pagination cursor returned by a previous request. Only valid for the same filters and sort order.\n\n- `kind?: 'boot' | 'data'`\n Filter by Volume kind\n\n- `limit?: number`\n Maximum number of items to return\n\n- `name?: string`\n Filter by a case-insensitive substring of the Volume name\n\n- `region?: string`\n Filter by region\n\n- `sort?: string`\n Comma-separated sort terms in precedence order, each field:asc or field:desc. Fields: created_at, updated_at, name, status, size\n\n- `status?: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'error'`\n Filter by Volume status\n\n- `tags?: string[]`\n Filter by tags. Repeat the parameter to require several tags; a Volume must carry all of them.\n\n- `type?: 'nvme' | 'abs'`\n Filter by storage type\n\n- `vm_id?: string`\n Filter by the VM the Volume is attached to\n\n### Returns\n\n- `{ id: string; created_at: string; kind: 'boot' | 'data'; name: string; project_id: string; region: 'us-sva-2'; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; tags: string[]; type: 'nvme' | 'abs'; updated_at: string; vm_id: string; vm_name: string; }`\n Volume details.\n\n - `id: string`\n - `created_at: string`\n - `kind: 'boot' | 'data'`\n - `name: string`\n - `project_id: string`\n - `region: 'us-sva-2'`\n - `size: number`\n - `status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'`\n - `tags: string[]`\n - `type: 'nvme' | 'abs'`\n - `updated_at: string`\n - `vm_id: string`\n - `vm_name: string`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\n// Automatically fetches more pages as needed.\nfor await (const volume of client.compute.volumes.list({ project_id: 'project_id' })) {\n console.log(volume);\n}\n```",
2618
+ "## list\n\n`client.compute.volumes.list(project_id: string, attached?: boolean, cursor?: string, kind?: 'boot' | 'data', limit?: number, name?: string, region?: string, sort?: string, status?: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'error', tags?: string[], type?: 'nvme' | 'abs' | 'longhorn', vm_id?: string): { id: string; created_at: string; kind: volume_kind; name: string; project_id: string; region: region_name; size: number; status: resource_status; tags: string[]; type: volume_type; updated_at: string; vm_id: string; vm_name: string; }`\n\n**get** `/v1/compute/volumes`\n\nList all volumes\n\n### Parameters\n\n- `project_id: string`\n Project ID of resources to request\n\n- `attached?: boolean`\n Filter by whether the Volume is attached to a VM. Combine with vm_id and both must hold.\n\n- `cursor?: string`\n Pagination cursor returned by a previous request. Only valid for the same filters and sort order.\n\n- `kind?: 'boot' | 'data'`\n Filter by Volume kind\n\n- `limit?: number`\n Maximum number of items to return\n\n- `name?: string`\n Filter by a case-insensitive substring of the Volume name\n\n- `region?: string`\n Filter by region\n\n- `sort?: string`\n Comma-separated sort terms in precedence order, each field:asc or field:desc. Fields: created_at, updated_at, name, status, size\n\n- `status?: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'error'`\n Filter by Volume status\n\n- `tags?: string[]`\n Filter by tags. Repeat the parameter to require several tags; a Volume must carry all of them.\n\n- `type?: 'nvme' | 'abs' | 'longhorn'`\n Filter by storage type\n\n- `vm_id?: string`\n Filter by the VM the Volume is attached to\n\n### Returns\n\n- `{ id: string; created_at: string; kind: 'boot' | 'data'; name: string; project_id: string; region: 'us-sva-2'; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; tags: string[]; type: 'nvme' | 'abs' | 'longhorn'; updated_at: string; vm_id: string; vm_name: string; }`\n Volume details.\n\n - `id: string`\n - `created_at: string`\n - `kind: 'boot' | 'data'`\n - `name: string`\n - `project_id: string`\n - `region: 'us-sva-2'`\n - `size: number`\n - `status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'`\n - `tags: string[]`\n - `type: 'nvme' | 'abs' | 'longhorn'`\n - `updated_at: string`\n - `vm_id: string`\n - `vm_name: string`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\n// Automatically fetches more pages as needed.\nfor await (const volume of client.compute.volumes.list({ project_id: 'project_id' })) {\n console.log(volume);\n}\n```",
2402
2619
  perLanguage: {
2403
2620
  typescript: {
2404
2621
  method: 'client.compute.volumes.list',
@@ -2502,12 +2719,12 @@ const EMBEDDED_METHODS: MethodEntry[] = [
2502
2719
  'project_id: string;',
2503
2720
  "region: 'us-sva-2';",
2504
2721
  'size: number;',
2505
- "type: 'nvme' | 'abs';",
2722
+ "type: 'nvme' | 'abs' | 'longhorn';",
2506
2723
  'tags?: string[];',
2507
2724
  'vm_id?: string;',
2508
2725
  ],
2509
2726
  markdown:
2510
- "## create\n\n`client.compute.volumes.availability.create(name: string, project_id: string, region: 'us-sva-2', size: number, type: 'nvme' | 'abs', tags?: string[], vm_id?: string): void`\n\n**post** `/v1/compute/volumes/availability`\n\nCheck Volume Create Availability\n\n### Parameters\n\n- `name: string`\n Name of the Volume.\n\n- `project_id: string`\n Project ID the Volume belongs to.\n\n- `region: 'us-sva-2'`\n Region the resource is in.\n\n- `size: number`\n Size of the Volume in GB.\n\n- `type: 'nvme' | 'abs'`\n Type of the Volume.\n\n- `tags?: string[]`\n Tags to attach to the Volume.\n\n- `vm_id?: string`\n ID of the VM the Volume is attached to.\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nawait client.compute.volumes.availability.create({\n name: 'my-data-volume',\n project_id: '123e4567-e89b-12d3-a456-426614174000',\n region: 'us-sva-2',\n size: 100,\n type: 'abs',\n})\n```",
2727
+ "## create\n\n`client.compute.volumes.availability.create(name: string, project_id: string, region: 'us-sva-2', size: number, type: 'nvme' | 'abs' | 'longhorn', tags?: string[], vm_id?: string): void`\n\n**post** `/v1/compute/volumes/availability`\n\nCheck Volume Create Availability\n\n### Parameters\n\n- `name: string`\n Name of the Volume.\n\n- `project_id: string`\n Project ID the Volume belongs to.\n\n- `region: 'us-sva-2'`\n Region the resource is in.\n\n- `size: number`\n Size of the Volume in GB.\n\n- `type: 'nvme' | 'abs' | 'longhorn'`\n Type of the Volume.\n\n- `tags?: string[]`\n Tags to attach to the Volume.\n\n- `vm_id?: string`\n ID of the VM the Volume is attached to.\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nawait client.compute.volumes.availability.create({\n name: 'my-data-volume',\n project_id: '123e4567-e89b-12d3-a456-426614174000',\n region: 'us-sva-2',\n size: 100,\n type: 'abs',\n})\n```",
2511
2728
  perLanguage: {
2512
2729
  typescript: {
2513
2730
  method: 'client.compute.volumes.availability.create',
@@ -2540,7 +2757,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [
2540
2757
  qualified: 'client.compute.volumes.availability.update',
2541
2758
  params: ['volume_id: string;', 'name?: string;', 'size?: number;', 'tags?: string[];'],
2542
2759
  markdown:
2543
- "## update\n\n`client.compute.volumes.availability.update(volume_id: string, name?: string, size?: number, tags?: string[]): void`\n\n**patch** `/v1/compute/volumes/{volume_id}/availability`\n\nCheck Volume Update Availability\n\n### Parameters\n\n- `volume_id: string`\n\n- `name?: string`\n Name of the Volume.\n\n- `size?: number`\n Size of the Volume in GB.\n\n- `tags?: string[]`\n Tags to attach to the Volume.\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nawait client.compute.volumes.availability.update('volume_id')\n```",
2760
+ "## update\n\n`client.compute.volumes.availability.update(volume_id: string, name?: string, size?: number, tags?: string[]): void`\n\n**patch** `/v1/compute/volumes/{volume_id}/availability`\n\nCheck Volume Update Availability\n\n### Parameters\n\n- `volume_id: string`\n\n- `name?: string`\n Name of the Volume.\n\n- `size?: number`\n Size of the Volume in GB. Longhorn volumes cannot be resized.\n\n- `tags?: string[]`\n Tags to attach to the Volume.\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nawait client.compute.volumes.availability.update('volume_id')\n```",
2544
2761
  perLanguage: {
2545
2762
  typescript: {
2546
2763
  method: 'client.compute.volumes.availability.update',
@@ -2576,14 +2793,14 @@ const EMBEDDED_METHODS: MethodEntry[] = [
2576
2793
  'project_id: string;',
2577
2794
  "region: 'us-sva-2';",
2578
2795
  'size: number;',
2579
- "type: 'nvme' | 'abs';",
2796
+ "type: 'nvme' | 'abs' | 'longhorn';",
2580
2797
  'tags?: string[];',
2581
2798
  'vm_id?: string;',
2582
2799
  ],
2583
2800
  response:
2584
2801
  '{ currency: string; monthly_total: string; priced_at: string; usage_dimensions: { dimension: string; dimension_display_name: string; monthly_amount: string; quantity: number; unit_price: string; }[]; current_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }; updated_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }; }',
2585
2802
  markdown:
2586
- "## create\n\n`client.compute.volumes.cost.create(name: string, project_id: string, region: 'us-sva-2', size: number, type: 'nvme' | 'abs', tags?: string[], vm_id?: string): { currency: string; monthly_total: string; priced_at: string; usage_dimensions: object[]; current_summary?: organization_billing_summary; updated_summary?: organization_billing_summary; }`\n\n**post** `/v1/compute/volumes/cost`\n\nReturn a priced cost quote for the proposed Volume.\n\n### Parameters\n\n- `name: string`\n Name of the Volume.\n\n- `project_id: string`\n Project ID the Volume belongs to.\n\n- `region: 'us-sva-2'`\n Region the resource is in.\n\n- `size: number`\n Size of the Volume in GB.\n\n- `type: 'nvme' | 'abs'`\n Type of the Volume.\n\n- `tags?: string[]`\n Tags to attach to the Volume.\n\n- `vm_id?: string`\n ID of the VM the Volume is attached to.\n\n### Returns\n\n- `{ currency: string; monthly_total: string; priced_at: string; usage_dimensions: { dimension: string; dimension_display_name: string; monthly_amount: string; quantity: number; unit_price: string; }[]; current_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }; updated_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }; }`\n Cost quote returned by POST /cost. current_summary and updated_summary hold the org billing summary now and with this resource; omitted when the caller cannot view billing.\n\n - `currency: string`\n - `monthly_total: string`\n - `priced_at: string`\n - `usage_dimensions: { dimension: string; dimension_display_name: string; monthly_amount: string; quantity: number; unit_price: string; }[]`\n - `current_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }`\n - `updated_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst costQuote = await client.compute.volumes.cost.create({\n name: 'my-data-volume',\n project_id: '123e4567-e89b-12d3-a456-426614174000',\n region: 'us-sva-2',\n size: 100,\n type: 'abs',\n});\n\nconsole.log(costQuote);\n```",
2803
+ "## create\n\n`client.compute.volumes.cost.create(name: string, project_id: string, region: 'us-sva-2', size: number, type: 'nvme' | 'abs' | 'longhorn', tags?: string[], vm_id?: string): { currency: string; monthly_total: string; priced_at: string; usage_dimensions: object[]; current_summary?: organization_billing_summary; updated_summary?: organization_billing_summary; }`\n\n**post** `/v1/compute/volumes/cost`\n\nReturn a priced cost quote for the proposed Volume.\n\n### Parameters\n\n- `name: string`\n Name of the Volume.\n\n- `project_id: string`\n Project ID the Volume belongs to.\n\n- `region: 'us-sva-2'`\n Region the resource is in.\n\n- `size: number`\n Size of the Volume in GB.\n\n- `type: 'nvme' | 'abs' | 'longhorn'`\n Type of the Volume.\n\n- `tags?: string[]`\n Tags to attach to the Volume.\n\n- `vm_id?: string`\n ID of the VM the Volume is attached to.\n\n### Returns\n\n- `{ currency: string; monthly_total: string; priced_at: string; usage_dimensions: { dimension: string; dimension_display_name: string; monthly_amount: string; quantity: number; unit_price: string; }[]; current_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }; updated_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }; }`\n Cost quote returned by POST /cost. current_summary and updated_summary hold the org billing summary now and with this resource; omitted when the caller cannot view billing.\n\n - `currency: string`\n - `monthly_total: string`\n - `priced_at: string`\n - `usage_dimensions: { dimension: string; dimension_display_name: string; monthly_amount: string; quantity: number; unit_price: string; }[]`\n - `current_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }`\n - `updated_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst costQuote = await client.compute.volumes.cost.create({\n name: 'my-data-volume',\n project_id: '123e4567-e89b-12d3-a456-426614174000',\n region: 'us-sva-2',\n size: 100,\n type: 'abs',\n});\n\nconsole.log(costQuote);\n```",
2587
2804
  perLanguage: {
2588
2805
  typescript: {
2589
2806
  method: 'client.compute.volumes.cost.create',
@@ -2619,7 +2836,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [
2619
2836
  response:
2620
2837
  '{ after: { monthly_total: string; usage_dimensions: { dimension: string; dimension_display_name: string; monthly_amount: string; quantity: number; unit_price: string; }[]; }; before: { monthly_total: string; usage_dimensions: { dimension: string; dimension_display_name: string; monthly_amount: string; quantity: number; unit_price: string; }[]; }; currency: string; diff: { monthly_total_delta: string; usage_dimensions: { after: object; before: object; dimension: string; dimension_display_name: string; monthly_amount_delta: string; }[]; }; priced_at: string; current_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }; updated_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }; }',
2621
2838
  markdown:
2622
- "## update\n\n`client.compute.volumes.cost.update(volume_id: string, name?: string, size?: number, tags?: string[]): { after: object; before: object; currency: string; diff: object; priced_at: string; current_summary?: organization_billing_summary; updated_summary?: organization_billing_summary; }`\n\n**patch** `/v1/compute/volumes/{volume_id}/cost`\n\nReturn a priced cost quote for the proposed Volume update plus a diff against the current state.\n\n### Parameters\n\n- `volume_id: string`\n\n- `name?: string`\n Name of the Volume.\n\n- `size?: number`\n Size of the Volume in GB.\n\n- `tags?: string[]`\n Tags to attach to the Volume.\n\n### Returns\n\n- `{ after: { monthly_total: string; usage_dimensions: { dimension: string; dimension_display_name: string; monthly_amount: string; quantity: number; unit_price: string; }[]; }; before: { monthly_total: string; usage_dimensions: { dimension: string; dimension_display_name: string; monthly_amount: string; quantity: number; unit_price: string; }[]; }; currency: string; diff: { monthly_total_delta: string; usage_dimensions: { after: object; before: object; dimension: string; dimension_display_name: string; monthly_amount_delta: string; }[]; }; priced_at: string; current_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }; updated_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }; }`\n Cost quote returned by PATCH /:id/cost: current-state quote, post-update quote, and signed diff. current_summary and updated_summary omitted when the caller cannot view billing.\n\n - `after: { monthly_total: string; usage_dimensions: { dimension: string; dimension_display_name: string; monthly_amount: string; quantity: number; unit_price: string; }[]; }`\n - `before: { monthly_total: string; usage_dimensions: { dimension: string; dimension_display_name: string; monthly_amount: string; quantity: number; unit_price: string; }[]; }`\n - `currency: string`\n - `diff: { monthly_total_delta: string; usage_dimensions: { after: { monthly_amount: string; quantity: number; unit_price: string; }; before: { monthly_amount: string; quantity: number; unit_price: string; }; dimension: string; dimension_display_name: string; monthly_amount_delta: string; }[]; }`\n - `priced_at: string`\n - `current_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }`\n - `updated_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst costQuoteUpdate = await client.compute.volumes.cost.update('volume_id');\n\nconsole.log(costQuoteUpdate);\n```",
2839
+ "## update\n\n`client.compute.volumes.cost.update(volume_id: string, name?: string, size?: number, tags?: string[]): { after: object; before: object; currency: string; diff: object; priced_at: string; current_summary?: organization_billing_summary; updated_summary?: organization_billing_summary; }`\n\n**patch** `/v1/compute/volumes/{volume_id}/cost`\n\nReturn a priced cost quote for the proposed Volume update plus a diff against the current state.\n\n### Parameters\n\n- `volume_id: string`\n\n- `name?: string`\n Name of the Volume.\n\n- `size?: number`\n Size of the Volume in GB. Longhorn volumes cannot be resized.\n\n- `tags?: string[]`\n Tags to attach to the Volume.\n\n### Returns\n\n- `{ after: { monthly_total: string; usage_dimensions: { dimension: string; dimension_display_name: string; monthly_amount: string; quantity: number; unit_price: string; }[]; }; before: { monthly_total: string; usage_dimensions: { dimension: string; dimension_display_name: string; monthly_amount: string; quantity: number; unit_price: string; }[]; }; currency: string; diff: { monthly_total_delta: string; usage_dimensions: { after: object; before: object; dimension: string; dimension_display_name: string; monthly_amount_delta: string; }[]; }; priced_at: string; current_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }; updated_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }; }`\n Cost quote returned by PATCH /:id/cost: current-state quote, post-update quote, and signed diff. current_summary and updated_summary omitted when the caller cannot view billing.\n\n - `after: { monthly_total: string; usage_dimensions: { dimension: string; dimension_display_name: string; monthly_amount: string; quantity: number; unit_price: string; }[]; }`\n - `before: { monthly_total: string; usage_dimensions: { dimension: string; dimension_display_name: string; monthly_amount: string; quantity: number; unit_price: string; }[]; }`\n - `currency: string`\n - `diff: { monthly_total_delta: string; usage_dimensions: { after: { monthly_amount: string; quantity: number; unit_price: string; }; before: { monthly_amount: string; quantity: number; unit_price: string; }; dimension: string; dimension_display_name: string; monthly_amount_delta: string; }[]; }`\n - `priced_at: string`\n - `current_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }`\n - `updated_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst costQuoteUpdate = await client.compute.volumes.cost.update('volume_id');\n\nconsole.log(costQuoteUpdate);\n```",
2623
2840
  perLanguage: {
2624
2841
  typescript: {
2625
2842
  method: 'client.compute.volumes.cost.update',
@@ -3903,9 +4120,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [
3903
4120
  qualified: 'client.nks.clusters.persistentVolumeClaims.get',
3904
4121
  params: ['cluster_id: string;', 'persistent_volume_claim_id: string;'],
3905
4122
  response:
3906
- "{ id: string; cluster_id: string; created_at: string; name: string; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; type: 'nvme' | 'abs'; updated_at: string; }",
4123
+ "{ id: string; cluster_id: string; created_at: string; name: string; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; type: 'nvme' | 'abs' | 'longhorn'; updated_at: string; }",
3907
4124
  markdown:
3908
- "## get\n\n`client.nks.clusters.persistentVolumeClaims.get(cluster_id: string, persistent_volume_claim_id: string): { id: string; cluster_id: string; created_at: string; name: string; size: number; status: resource_status; type: volume_type; updated_at: string; }`\n\n**get** `/v1/nks/clusters/{cluster_id}/persistent_volume_claims/{persistent_volume_claim_id}`\n\nGet details about an NKS persistent volume claim\n\n### Parameters\n\n- `cluster_id: string`\n\n- `persistent_volume_claim_id: string`\n\n### Returns\n\n- `{ id: string; cluster_id: string; created_at: string; name: string; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; type: 'nvme' | 'abs'; updated_at: string; }`\n NKS persistent volume claim details.\n\n - `id: string`\n - `cluster_id: string`\n - `created_at: string`\n - `name: string`\n - `size: number`\n - `status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'`\n - `type: 'nvme' | 'abs'`\n - `updated_at: string`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst persistentVolumeClaim = await client.nks.clusters.persistentVolumeClaims.get('persistent_volume_claim_id', { cluster_id: 'cluster_id' });\n\nconsole.log(persistentVolumeClaim);\n```",
4125
+ "## get\n\n`client.nks.clusters.persistentVolumeClaims.get(cluster_id: string, persistent_volume_claim_id: string): { id: string; cluster_id: string; created_at: string; name: string; size: number; status: resource_status; type: volume_type; updated_at: string; }`\n\n**get** `/v1/nks/clusters/{cluster_id}/persistent_volume_claims/{persistent_volume_claim_id}`\n\nGet details about an NKS persistent volume claim\n\n### Parameters\n\n- `cluster_id: string`\n\n- `persistent_volume_claim_id: string`\n\n### Returns\n\n- `{ id: string; cluster_id: string; created_at: string; name: string; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; type: 'nvme' | 'abs' | 'longhorn'; updated_at: string; }`\n NKS persistent volume claim details.\n\n - `id: string`\n - `cluster_id: string`\n - `created_at: string`\n - `name: string`\n - `size: number`\n - `status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'`\n - `type: 'nvme' | 'abs' | 'longhorn'`\n - `updated_at: string`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst persistentVolumeClaim = await client.nks.clusters.persistentVolumeClaims.get('persistent_volume_claim_id', { cluster_id: 'cluster_id' });\n\nconsole.log(persistentVolumeClaim);\n```",
3909
4126
  perLanguage: {
3910
4127
  typescript: {
3911
4128
  method: 'client.nks.clusters.persistentVolumeClaims.get',
@@ -3948,9 +4165,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [
3948
4165
  "type?: 'abs';",
3949
4166
  ],
3950
4167
  response:
3951
- "{ id: string; cluster_id: string; created_at: string; name: string; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; type: 'nvme' | 'abs'; updated_at: string; }",
4168
+ "{ id: string; cluster_id: string; created_at: string; name: string; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; type: 'nvme' | 'abs' | 'longhorn'; updated_at: string; }",
3952
4169
  markdown:
3953
- "## list\n\n`client.nks.clusters.persistentVolumeClaims.list(cluster_id: string, cursor?: string, limit?: number, name?: string, size_gb_max?: number, size_gb_min?: number, sort?: string, status?: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'error', type?: 'abs'): { id: string; cluster_id: string; created_at: string; name: string; size: number; status: resource_status; type: volume_type; updated_at: string; }`\n\n**get** `/v1/nks/clusters/{cluster_id}/persistent_volume_claims`\n\nList all persistent volume claims in an NKS cluster\n\n### Parameters\n\n- `cluster_id: string`\n\n- `cursor?: string`\n Pagination cursor returned by a previous request. Only valid for the same filters and sort order.\n\n- `limit?: number`\n Maximum number of items to return\n\n- `name?: string`\n Filter by a case-insensitive substring of the claim name\n\n- `size_gb_max?: number`\n Only claims of at most this size\n\n- `size_gb_min?: number`\n Only claims of at least this size\n\n- `sort?: string`\n Comma-separated sort terms in precedence order, each field:asc or field:desc. Fields: created_at, updated_at, name, status, size_gb\n\n- `status?: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'error'`\n Filter by persistent volume claim status\n\n- `type?: 'abs'`\n Filter by storage type\n\n### Returns\n\n- `{ id: string; cluster_id: string; created_at: string; name: string; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; type: 'nvme' | 'abs'; updated_at: string; }`\n NKS persistent volume claim details.\n\n - `id: string`\n - `cluster_id: string`\n - `created_at: string`\n - `name: string`\n - `size: number`\n - `status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'`\n - `type: 'nvme' | 'abs'`\n - `updated_at: string`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\n// Automatically fetches more pages as needed.\nfor await (const persistentVolumeClaim of client.nks.clusters.persistentVolumeClaims.list('cluster_id')) {\n console.log(persistentVolumeClaim);\n}\n```",
4170
+ "## list\n\n`client.nks.clusters.persistentVolumeClaims.list(cluster_id: string, cursor?: string, limit?: number, name?: string, size_gb_max?: number, size_gb_min?: number, sort?: string, status?: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'error', type?: 'abs'): { id: string; cluster_id: string; created_at: string; name: string; size: number; status: resource_status; type: volume_type; updated_at: string; }`\n\n**get** `/v1/nks/clusters/{cluster_id}/persistent_volume_claims`\n\nList all persistent volume claims in an NKS cluster\n\n### Parameters\n\n- `cluster_id: string`\n\n- `cursor?: string`\n Pagination cursor returned by a previous request. Only valid for the same filters and sort order.\n\n- `limit?: number`\n Maximum number of items to return\n\n- `name?: string`\n Filter by a case-insensitive substring of the claim name\n\n- `size_gb_max?: number`\n Only claims of at most this size\n\n- `size_gb_min?: number`\n Only claims of at least this size\n\n- `sort?: string`\n Comma-separated sort terms in precedence order, each field:asc or field:desc. Fields: created_at, updated_at, name, status, size_gb\n\n- `status?: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'error'`\n Filter by persistent volume claim status\n\n- `type?: 'abs'`\n Filter by storage type\n\n### Returns\n\n- `{ id: string; cluster_id: string; created_at: string; name: string; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; type: 'nvme' | 'abs' | 'longhorn'; updated_at: string; }`\n NKS persistent volume claim details.\n\n - `id: string`\n - `cluster_id: string`\n - `created_at: string`\n - `name: string`\n - `size: number`\n - `status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'`\n - `type: 'nvme' | 'abs' | 'longhorn'`\n - `updated_at: string`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\n// Automatically fetches more pages as needed.\nfor await (const persistentVolumeClaim of client.nks.clusters.persistentVolumeClaims.list('cluster_id')) {\n console.log(persistentVolumeClaim);\n}\n```",
3954
4171
  perLanguage: {
3955
4172
  typescript: {
3956
4173
  method: 'client.nks.clusters.persistentVolumeClaims.list',
@@ -4097,9 +4314,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [
4097
4314
  qualified: 'client.nks.clusters.controllers.volumes.get',
4098
4315
  params: ['cluster_id: string;', 'controller_id: string;', 'volume_id: string;'],
4099
4316
  response:
4100
- "{ id: string; created_at: string; kind: 'boot' | 'data'; name: string; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; type: 'nvme' | 'abs'; updated_at: string; }",
4317
+ "{ id: string; created_at: string; kind: 'boot' | 'data'; name: string; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; type: 'nvme' | 'abs' | 'longhorn'; updated_at: string; }",
4101
4318
  markdown:
4102
- "## get\n\n`client.nks.clusters.controllers.volumes.get(cluster_id: string, controller_id: string, volume_id: string): { id: string; created_at: string; kind: volume_kind; name: string; size: number; status: resource_status; type: volume_type; updated_at: string; }`\n\n**get** `/v1/nks/clusters/{cluster_id}/controllers/{controller_id}/volumes/{volume_id}`\n\nGet details about a volume attached to an NKS controller\n\n### Parameters\n\n- `cluster_id: string`\n\n- `controller_id: string`\n\n- `volume_id: string`\n\n### Returns\n\n- `{ id: string; created_at: string; kind: 'boot' | 'data'; name: string; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; type: 'nvme' | 'abs'; updated_at: string; }`\n NKS controller volume details.\n\n - `id: string`\n - `created_at: string`\n - `kind: 'boot' | 'data'`\n - `name: string`\n - `size: number`\n - `status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'`\n - `type: 'nvme' | 'abs'`\n - `updated_at: string`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst nksControllerVolume = await client.nks.clusters.controllers.volumes.get('volume_id', { cluster_id: 'cluster_id', controller_id: 'controller_id' });\n\nconsole.log(nksControllerVolume);\n```",
4319
+ "## get\n\n`client.nks.clusters.controllers.volumes.get(cluster_id: string, controller_id: string, volume_id: string): { id: string; created_at: string; kind: volume_kind; name: string; size: number; status: resource_status; type: volume_type; updated_at: string; }`\n\n**get** `/v1/nks/clusters/{cluster_id}/controllers/{controller_id}/volumes/{volume_id}`\n\nGet details about a volume attached to an NKS controller\n\n### Parameters\n\n- `cluster_id: string`\n\n- `controller_id: string`\n\n- `volume_id: string`\n\n### Returns\n\n- `{ id: string; created_at: string; kind: 'boot' | 'data'; name: string; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; type: 'nvme' | 'abs' | 'longhorn'; updated_at: string; }`\n NKS controller volume details.\n\n - `id: string`\n - `created_at: string`\n - `kind: 'boot' | 'data'`\n - `name: string`\n - `size: number`\n - `status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'`\n - `type: 'nvme' | 'abs' | 'longhorn'`\n - `updated_at: string`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst nksControllerVolume = await client.nks.clusters.controllers.volumes.get('volume_id', { cluster_id: 'cluster_id', controller_id: 'controller_id' });\n\nconsole.log(nksControllerVolume);\n```",
4103
4320
  perLanguage: {
4104
4321
  typescript: {
4105
4322
  method: 'client.nks.clusters.controllers.volumes.get',
@@ -4144,9 +4361,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [
4144
4361
  "type?: 'abs';",
4145
4362
  ],
4146
4363
  response:
4147
- "{ id: string; created_at: string; kind: 'boot' | 'data'; name: string; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; type: 'nvme' | 'abs'; updated_at: string; }",
4364
+ "{ id: string; created_at: string; kind: 'boot' | 'data'; name: string; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; type: 'nvme' | 'abs' | 'longhorn'; updated_at: string; }",
4148
4365
  markdown:
4149
- "## list\n\n`client.nks.clusters.controllers.volumes.list(cluster_id: string, controller_id: string, cursor?: string, kind?: 'boot' | 'data', limit?: number, name?: string, size_gb_max?: number, size_gb_min?: number, sort?: string, status?: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'error', type?: 'abs'): { id: string; created_at: string; kind: volume_kind; name: string; size: number; status: resource_status; type: volume_type; updated_at: string; }`\n\n**get** `/v1/nks/clusters/{cluster_id}/controllers/{controller_id}/volumes`\n\nList all volumes attached to an NKS controller\n\n### Parameters\n\n- `cluster_id: string`\n\n- `controller_id: string`\n\n- `cursor?: string`\n Pagination cursor returned by a previous request. Only valid for the same filters and sort order.\n\n- `kind?: 'boot' | 'data'`\n Filter by volume kind\n\n- `limit?: number`\n Maximum number of items to return\n\n- `name?: string`\n Filter by a case-insensitive substring of the volume name\n\n- `size_gb_max?: number`\n Only volumes of at most this size\n\n- `size_gb_min?: number`\n Only volumes of at least this size\n\n- `sort?: string`\n Comma-separated sort terms in precedence order, each field:asc or field:desc. Fields: created_at, updated_at, name, status, size_gb\n\n- `status?: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'error'`\n Filter by volume status\n\n- `type?: 'abs'`\n Filter by storage type\n\n### Returns\n\n- `{ id: string; created_at: string; kind: 'boot' | 'data'; name: string; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; type: 'nvme' | 'abs'; updated_at: string; }`\n NKS controller volume details.\n\n - `id: string`\n - `created_at: string`\n - `kind: 'boot' | 'data'`\n - `name: string`\n - `size: number`\n - `status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'`\n - `type: 'nvme' | 'abs'`\n - `updated_at: string`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\n// Automatically fetches more pages as needed.\nfor await (const nksControllerVolume of client.nks.clusters.controllers.volumes.list('controller_id', { cluster_id: 'cluster_id' })) {\n console.log(nksControllerVolume);\n}\n```",
4366
+ "## list\n\n`client.nks.clusters.controllers.volumes.list(cluster_id: string, controller_id: string, cursor?: string, kind?: 'boot' | 'data', limit?: number, name?: string, size_gb_max?: number, size_gb_min?: number, sort?: string, status?: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'error', type?: 'abs'): { id: string; created_at: string; kind: volume_kind; name: string; size: number; status: resource_status; type: volume_type; updated_at: string; }`\n\n**get** `/v1/nks/clusters/{cluster_id}/controllers/{controller_id}/volumes`\n\nList all volumes attached to an NKS controller\n\n### Parameters\n\n- `cluster_id: string`\n\n- `controller_id: string`\n\n- `cursor?: string`\n Pagination cursor returned by a previous request. Only valid for the same filters and sort order.\n\n- `kind?: 'boot' | 'data'`\n Filter by volume kind\n\n- `limit?: number`\n Maximum number of items to return\n\n- `name?: string`\n Filter by a case-insensitive substring of the volume name\n\n- `size_gb_max?: number`\n Only volumes of at most this size\n\n- `size_gb_min?: number`\n Only volumes of at least this size\n\n- `sort?: string`\n Comma-separated sort terms in precedence order, each field:asc or field:desc. Fields: created_at, updated_at, name, status, size_gb\n\n- `status?: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'error'`\n Filter by volume status\n\n- `type?: 'abs'`\n Filter by storage type\n\n### Returns\n\n- `{ id: string; created_at: string; kind: 'boot' | 'data'; name: string; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; type: 'nvme' | 'abs' | 'longhorn'; updated_at: string; }`\n NKS controller volume details.\n\n - `id: string`\n - `created_at: string`\n - `kind: 'boot' | 'data'`\n - `name: string`\n - `size: number`\n - `status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'`\n - `type: 'nvme' | 'abs' | 'longhorn'`\n - `updated_at: string`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\n// Automatically fetches more pages as needed.\nfor await (const nksControllerVolume of client.nks.clusters.controllers.volumes.list('controller_id', { cluster_id: 'cluster_id' })) {\n console.log(nksControllerVolume);\n}\n```",
4150
4367
  perLanguage: {
4151
4368
  typescript: {
4152
4369
  method: 'client.nks.clusters.controllers.volumes.list',
@@ -4301,7 +4518,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [
4301
4518
  response:
4302
4519
  "{ id: string; created_at: string; details: { changes: operation_changes; }; kind: 'vm' | 'volume' | 'vpc' | 'firewall_rule' | 'nks_cluster' | 'nks_node_pool'; project_id: string; resource_id: string; status: 'pending' | 'running' | 'done' | 'failed' | 'unknown'; type: 'create' | 'update' | 'delete' | 'restart'; updated_at: string; }",
4303
4520
  markdown:
4304
- "## create\n\n`client.nks.clusters.pools.create(cluster_id: string, name: string, node_config: { boot_volume: nks_node_pool_boot_volume; instance_type: string; labels?: string[]; taints?: string[]; }, node_count?: number, tags?: string[]): { id: string; created_at: string; details: operation_details; kind: operation_kind; project_id: string; resource_id: string; status: operation_status; type: operation_type; updated_at: string; }`\n\n**post** `/v1/nks/clusters/{cluster_id}/pools`\n\nCreate a node pool in an NKS cluster\n\n### Parameters\n\n- `cluster_id: string`\n\n- `name: string`\n Name of the node pool.\n\n- `node_config: { boot_volume: { size: number; type: volume_type; }; instance_type: string; labels?: string[]; taints?: string[]; }`\n Node configuration.\n - `boot_volume: { size: number; type: 'nvme' | 'abs'; }`\n Boot volume configuration.\n - `instance_type: string`\n Instance type name used for worker nodes. Immutable after pool creation.\n - `labels?: string[]`\n Kubernetes labels to apply to each node in the pool. Each entry is \"key=value\".\nKeys under kubernetes.io, k8s.io, and nirvanalabs.io prefixes are reserved.\nImmutable after pool creation.\n - `taints?: string[]`\n Kubernetes taints to apply to each node in the pool at creation time.\nEach entry is \"key=value:Effect\" where Effect is NoSchedule, PreferNoSchedule, or NoExecute.\nImmutable after pool creation.\n\n- `node_count?: number`\n Number of nodes. Must be between 0 and 100.\n\n- `tags?: string[]`\n Tags to attach to the node pool.\n\n### Returns\n\n- `{ id: string; created_at: string; details: { changes: operation_changes; }; kind: 'vm' | 'volume' | 'vpc' | 'firewall_rule' | 'nks_cluster' | 'nks_node_pool'; project_id: string; resource_id: string; status: 'pending' | 'running' | 'done' | 'failed' | 'unknown'; type: 'create' | 'update' | 'delete' | 'restart'; updated_at: string; }`\n Operation details.\n\n - `id: string`\n - `created_at: string`\n - `details: { changes: object; }`\n - `kind: 'vm' | 'volume' | 'vpc' | 'firewall_rule' | 'nks_cluster' | 'nks_node_pool'`\n - `project_id: string`\n - `resource_id: string`\n - `status: 'pending' | 'running' | 'done' | 'failed' | 'unknown'`\n - `type: 'create' | 'update' | 'delete' | 'restart'`\n - `updated_at: string`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst operation = await client.nks.clusters.pools.create('cluster_id', {\n name: 'my-node-pool',\n node_config: {\n boot_volume: { size: 100, type: 'abs' },\n instance_type: 'n1-standard-8',\n},\n});\n\nconsole.log(operation);\n```",
4521
+ "## create\n\n`client.nks.clusters.pools.create(cluster_id: string, name: string, node_config: { boot_volume: nks_node_pool_boot_volume; instance_type: string; labels?: string[]; taints?: string[]; }, node_count?: number, tags?: string[]): { id: string; created_at: string; details: operation_details; kind: operation_kind; project_id: string; resource_id: string; status: operation_status; type: operation_type; updated_at: string; }`\n\n**post** `/v1/nks/clusters/{cluster_id}/pools`\n\nCreate a node pool in an NKS cluster\n\n### Parameters\n\n- `cluster_id: string`\n\n- `name: string`\n Name of the node pool.\n\n- `node_config: { boot_volume: { size: number; type: volume_type; }; instance_type: string; labels?: string[]; taints?: string[]; }`\n Node configuration.\n - `boot_volume: { size: number; type: 'nvme' | 'abs' | 'longhorn'; }`\n Boot volume configuration.\n - `instance_type: string`\n Instance type name used for worker nodes. Immutable after pool creation.\n - `labels?: string[]`\n Kubernetes labels to apply to each node in the pool. Each entry is \"key=value\".\nKeys under kubernetes.io, k8s.io, and nirvanalabs.io prefixes are reserved.\nImmutable after pool creation.\n - `taints?: string[]`\n Kubernetes taints to apply to each node in the pool at creation time.\nEach entry is \"key=value:Effect\" where Effect is NoSchedule, PreferNoSchedule, or NoExecute.\nImmutable after pool creation.\n\n- `node_count?: number`\n Number of nodes. Must be between 0 and 100.\n\n- `tags?: string[]`\n Tags to attach to the node pool.\n\n### Returns\n\n- `{ id: string; created_at: string; details: { changes: operation_changes; }; kind: 'vm' | 'volume' | 'vpc' | 'firewall_rule' | 'nks_cluster' | 'nks_node_pool'; project_id: string; resource_id: string; status: 'pending' | 'running' | 'done' | 'failed' | 'unknown'; type: 'create' | 'update' | 'delete' | 'restart'; updated_at: string; }`\n Operation details.\n\n - `id: string`\n - `created_at: string`\n - `details: { changes: object; }`\n - `kind: 'vm' | 'volume' | 'vpc' | 'firewall_rule' | 'nks_cluster' | 'nks_node_pool'`\n - `project_id: string`\n - `resource_id: string`\n - `status: 'pending' | 'running' | 'done' | 'failed' | 'unknown'`\n - `type: 'create' | 'update' | 'delete' | 'restart'`\n - `updated_at: string`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst operation = await client.nks.clusters.pools.create('cluster_id', {\n name: 'my-node-pool',\n node_config: {\n boot_volume: { size: 100, type: 'abs' },\n instance_type: 'n1-standard-8',\n},\n});\n\nconsole.log(operation);\n```",
4305
4522
  perLanguage: {
4306
4523
  typescript: {
4307
4524
  method: 'client.nks.clusters.pools.create',
@@ -4496,7 +4713,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [
4496
4713
  'tags?: string[];',
4497
4714
  ],
4498
4715
  markdown:
4499
- "## create\n\n`client.nks.clusters.pools.availability.create(cluster_id: string, name: string, node_config: { boot_volume: nks_node_pool_boot_volume; instance_type: string; labels?: string[]; taints?: string[]; }, node_count?: number, tags?: string[]): void`\n\n**post** `/v1/nks/clusters/{cluster_id}/pools/availability`\n\nCheck if a node pool can be created in an NKS cluster\n\n### Parameters\n\n- `cluster_id: string`\n\n- `name: string`\n Name of the node pool.\n\n- `node_config: { boot_volume: { size: number; type: volume_type; }; instance_type: string; labels?: string[]; taints?: string[]; }`\n Node configuration.\n - `boot_volume: { size: number; type: 'nvme' | 'abs'; }`\n Boot volume configuration.\n - `instance_type: string`\n Instance type name used for worker nodes. Immutable after pool creation.\n - `labels?: string[]`\n Kubernetes labels to apply to each node in the pool. Each entry is \"key=value\".\nKeys under kubernetes.io, k8s.io, and nirvanalabs.io prefixes are reserved.\nImmutable after pool creation.\n - `taints?: string[]`\n Kubernetes taints to apply to each node in the pool at creation time.\nEach entry is \"key=value:Effect\" where Effect is NoSchedule, PreferNoSchedule, or NoExecute.\nImmutable after pool creation.\n\n- `node_count?: number`\n Number of nodes. Must be between 0 and 100.\n\n- `tags?: string[]`\n Tags to attach to the node pool.\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nawait client.nks.clusters.pools.availability.create('cluster_id', {\n name: 'my-node-pool',\n node_config: {\n boot_volume: { size: 100, type: 'abs' },\n instance_type: 'n1-standard-8',\n},\n})\n```",
4716
+ "## create\n\n`client.nks.clusters.pools.availability.create(cluster_id: string, name: string, node_config: { boot_volume: nks_node_pool_boot_volume; instance_type: string; labels?: string[]; taints?: string[]; }, node_count?: number, tags?: string[]): void`\n\n**post** `/v1/nks/clusters/{cluster_id}/pools/availability`\n\nCheck if a node pool can be created in an NKS cluster\n\n### Parameters\n\n- `cluster_id: string`\n\n- `name: string`\n Name of the node pool.\n\n- `node_config: { boot_volume: { size: number; type: volume_type; }; instance_type: string; labels?: string[]; taints?: string[]; }`\n Node configuration.\n - `boot_volume: { size: number; type: 'nvme' | 'abs' | 'longhorn'; }`\n Boot volume configuration.\n - `instance_type: string`\n Instance type name used for worker nodes. Immutable after pool creation.\n - `labels?: string[]`\n Kubernetes labels to apply to each node in the pool. Each entry is \"key=value\".\nKeys under kubernetes.io, k8s.io, and nirvanalabs.io prefixes are reserved.\nImmutable after pool creation.\n - `taints?: string[]`\n Kubernetes taints to apply to each node in the pool at creation time.\nEach entry is \"key=value:Effect\" where Effect is NoSchedule, PreferNoSchedule, or NoExecute.\nImmutable after pool creation.\n\n- `node_count?: number`\n Number of nodes. Must be between 0 and 100.\n\n- `tags?: string[]`\n Tags to attach to the node pool.\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nawait client.nks.clusters.pools.availability.create('cluster_id', {\n name: 'my-node-pool',\n node_config: {\n boot_volume: { size: 100, type: 'abs' },\n instance_type: 'n1-standard-8',\n},\n})\n```",
4500
4717
  perLanguage: {
4501
4718
  typescript: {
4502
4719
  method: 'client.nks.clusters.pools.availability.create',
@@ -4576,7 +4793,7 @@ const EMBEDDED_METHODS: MethodEntry[] = [
4576
4793
  response:
4577
4794
  '{ currency: string; monthly_total: string; priced_at: string; usage_dimensions: { dimension: string; dimension_display_name: string; monthly_amount: string; quantity: number; unit_price: string; }[]; current_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }; updated_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }; }',
4578
4795
  markdown:
4579
- "## create\n\n`client.nks.clusters.pools.cost.create(cluster_id: string, name: string, node_config: { boot_volume: nks_node_pool_boot_volume; instance_type: string; labels?: string[]; taints?: string[]; }, node_count?: number, tags?: string[]): { currency: string; monthly_total: string; priced_at: string; usage_dimensions: object[]; current_summary?: organization_billing_summary; updated_summary?: organization_billing_summary; }`\n\n**post** `/v1/nks/clusters/{cluster_id}/pools/cost`\n\nReturn a priced cost quote for the proposed NKS node pool.\n\n### Parameters\n\n- `cluster_id: string`\n\n- `name: string`\n Name of the node pool.\n\n- `node_config: { boot_volume: { size: number; type: volume_type; }; instance_type: string; labels?: string[]; taints?: string[]; }`\n Node configuration.\n - `boot_volume: { size: number; type: 'nvme' | 'abs'; }`\n Boot volume configuration.\n - `instance_type: string`\n Instance type name used for worker nodes. Immutable after pool creation.\n - `labels?: string[]`\n Kubernetes labels to apply to each node in the pool. Each entry is \"key=value\".\nKeys under kubernetes.io, k8s.io, and nirvanalabs.io prefixes are reserved.\nImmutable after pool creation.\n - `taints?: string[]`\n Kubernetes taints to apply to each node in the pool at creation time.\nEach entry is \"key=value:Effect\" where Effect is NoSchedule, PreferNoSchedule, or NoExecute.\nImmutable after pool creation.\n\n- `node_count?: number`\n Number of nodes. Must be between 0 and 100.\n\n- `tags?: string[]`\n Tags to attach to the node pool.\n\n### Returns\n\n- `{ currency: string; monthly_total: string; priced_at: string; usage_dimensions: { dimension: string; dimension_display_name: string; monthly_amount: string; quantity: number; unit_price: string; }[]; current_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }; updated_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }; }`\n Cost quote returned by POST /cost. current_summary and updated_summary hold the org billing summary now and with this resource; omitted when the caller cannot view billing.\n\n - `currency: string`\n - `monthly_total: string`\n - `priced_at: string`\n - `usage_dimensions: { dimension: string; dimension_display_name: string; monthly_amount: string; quantity: number; unit_price: string; }[]`\n - `current_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }`\n - `updated_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst costQuote = await client.nks.clusters.pools.cost.create('cluster_id', {\n name: 'my-node-pool',\n node_config: {\n boot_volume: { size: 100, type: 'abs' },\n instance_type: 'n1-standard-8',\n},\n});\n\nconsole.log(costQuote);\n```",
4796
+ "## create\n\n`client.nks.clusters.pools.cost.create(cluster_id: string, name: string, node_config: { boot_volume: nks_node_pool_boot_volume; instance_type: string; labels?: string[]; taints?: string[]; }, node_count?: number, tags?: string[]): { currency: string; monthly_total: string; priced_at: string; usage_dimensions: object[]; current_summary?: organization_billing_summary; updated_summary?: organization_billing_summary; }`\n\n**post** `/v1/nks/clusters/{cluster_id}/pools/cost`\n\nReturn a priced cost quote for the proposed NKS node pool.\n\n### Parameters\n\n- `cluster_id: string`\n\n- `name: string`\n Name of the node pool.\n\n- `node_config: { boot_volume: { size: number; type: volume_type; }; instance_type: string; labels?: string[]; taints?: string[]; }`\n Node configuration.\n - `boot_volume: { size: number; type: 'nvme' | 'abs' | 'longhorn'; }`\n Boot volume configuration.\n - `instance_type: string`\n Instance type name used for worker nodes. Immutable after pool creation.\n - `labels?: string[]`\n Kubernetes labels to apply to each node in the pool. Each entry is \"key=value\".\nKeys under kubernetes.io, k8s.io, and nirvanalabs.io prefixes are reserved.\nImmutable after pool creation.\n - `taints?: string[]`\n Kubernetes taints to apply to each node in the pool at creation time.\nEach entry is \"key=value:Effect\" where Effect is NoSchedule, PreferNoSchedule, or NoExecute.\nImmutable after pool creation.\n\n- `node_count?: number`\n Number of nodes. Must be between 0 and 100.\n\n- `tags?: string[]`\n Tags to attach to the node pool.\n\n### Returns\n\n- `{ currency: string; monthly_total: string; priced_at: string; usage_dimensions: { dimension: string; dimension_display_name: string; monthly_amount: string; quantity: number; unit_price: string; }[]; current_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }; updated_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }; }`\n Cost quote returned by POST /cost. current_summary and updated_summary hold the org billing summary now and with this resource; omitted when the caller cannot view billing.\n\n - `currency: string`\n - `monthly_total: string`\n - `priced_at: string`\n - `usage_dimensions: { dimension: string; dimension_display_name: string; monthly_amount: string; quantity: number; unit_price: string; }[]`\n - `current_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }`\n - `updated_summary?: { daily_cost: string; effective_balance: string; monthly_cost: string; recharge_threshold_days: string; estimated_next_charge_at?: string; runway_months?: string; }`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst costQuote = await client.nks.clusters.pools.cost.create('cluster_id', {\n name: 'my-node-pool',\n node_config: {\n boot_volume: { size: 100, type: 'abs' },\n instance_type: 'n1-standard-8',\n},\n});\n\nconsole.log(costQuote);\n```",
4580
4797
  perLanguage: {
4581
4798
  typescript: {
4582
4799
  method: 'client.nks.clusters.pools.cost.create',
@@ -4766,9 +4983,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [
4766
4983
  qualified: 'client.nks.clusters.pools.nodes.volumes.get',
4767
4984
  params: ['cluster_id: string;', 'pool_id: string;', 'node_id: string;', 'volume_id: string;'],
4768
4985
  response:
4769
- "{ id: string; created_at: string; kind: 'boot' | 'data'; name: string; node_id: string; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; type: 'nvme' | 'abs'; updated_at: string; }",
4986
+ "{ id: string; created_at: string; kind: 'boot' | 'data'; name: string; node_id: string; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; type: 'nvme' | 'abs' | 'longhorn'; updated_at: string; }",
4770
4987
  markdown:
4771
- "## get\n\n`client.nks.clusters.pools.nodes.volumes.get(cluster_id: string, pool_id: string, node_id: string, volume_id: string): { id: string; created_at: string; kind: volume_kind; name: string; node_id: string; size: number; status: resource_status; type: volume_type; updated_at: string; }`\n\n**get** `/v1/nks/clusters/{cluster_id}/pools/{pool_id}/nodes/{node_id}/volumes/{volume_id}`\n\nGet details about a volume attached to an NKS node\n\n### Parameters\n\n- `cluster_id: string`\n\n- `pool_id: string`\n\n- `node_id: string`\n\n- `volume_id: string`\n\n### Returns\n\n- `{ id: string; created_at: string; kind: 'boot' | 'data'; name: string; node_id: string; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; type: 'nvme' | 'abs'; updated_at: string; }`\n NKS node volume details.\n\n - `id: string`\n - `created_at: string`\n - `kind: 'boot' | 'data'`\n - `name: string`\n - `node_id: string`\n - `size: number`\n - `status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'`\n - `type: 'nvme' | 'abs'`\n - `updated_at: string`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst nksNodeVolume = await client.nks.clusters.pools.nodes.volumes.get('volume_id', {\n cluster_id: 'cluster_id',\n pool_id: 'pool_id',\n node_id: 'node_id',\n});\n\nconsole.log(nksNodeVolume);\n```",
4988
+ "## get\n\n`client.nks.clusters.pools.nodes.volumes.get(cluster_id: string, pool_id: string, node_id: string, volume_id: string): { id: string; created_at: string; kind: volume_kind; name: string; node_id: string; size: number; status: resource_status; type: volume_type; updated_at: string; }`\n\n**get** `/v1/nks/clusters/{cluster_id}/pools/{pool_id}/nodes/{node_id}/volumes/{volume_id}`\n\nGet details about a volume attached to an NKS node\n\n### Parameters\n\n- `cluster_id: string`\n\n- `pool_id: string`\n\n- `node_id: string`\n\n- `volume_id: string`\n\n### Returns\n\n- `{ id: string; created_at: string; kind: 'boot' | 'data'; name: string; node_id: string; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; type: 'nvme' | 'abs' | 'longhorn'; updated_at: string; }`\n NKS node volume details.\n\n - `id: string`\n - `created_at: string`\n - `kind: 'boot' | 'data'`\n - `name: string`\n - `node_id: string`\n - `size: number`\n - `status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'`\n - `type: 'nvme' | 'abs' | 'longhorn'`\n - `updated_at: string`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\nconst nksNodeVolume = await client.nks.clusters.pools.nodes.volumes.get('volume_id', {\n cluster_id: 'cluster_id',\n pool_id: 'pool_id',\n node_id: 'node_id',\n});\n\nconsole.log(nksNodeVolume);\n```",
4772
4989
  perLanguage: {
4773
4990
  typescript: {
4774
4991
  method: 'client.nks.clusters.pools.nodes.volumes.get',
@@ -4814,9 +5031,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [
4814
5031
  "type?: 'abs';",
4815
5032
  ],
4816
5033
  response:
4817
- "{ id: string; created_at: string; kind: 'boot' | 'data'; name: string; node_id: string; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; type: 'nvme' | 'abs'; updated_at: string; }",
5034
+ "{ id: string; created_at: string; kind: 'boot' | 'data'; name: string; node_id: string; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; type: 'nvme' | 'abs' | 'longhorn'; updated_at: string; }",
4818
5035
  markdown:
4819
- "## list\n\n`client.nks.clusters.pools.nodes.volumes.list(cluster_id: string, pool_id: string, node_id: string, cursor?: string, kind?: 'boot' | 'data', limit?: number, name?: string, size_gb_max?: number, size_gb_min?: number, sort?: string, status?: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'error', type?: 'abs'): { id: string; created_at: string; kind: volume_kind; name: string; node_id: string; size: number; status: resource_status; type: volume_type; updated_at: string; }`\n\n**get** `/v1/nks/clusters/{cluster_id}/pools/{pool_id}/nodes/{node_id}/volumes`\n\nList all volumes attached to an NKS node\n\n### Parameters\n\n- `cluster_id: string`\n\n- `pool_id: string`\n\n- `node_id: string`\n\n- `cursor?: string`\n Pagination cursor returned by a previous request. Only valid for the same filters and sort order.\n\n- `kind?: 'boot' | 'data'`\n Filter by volume kind\n\n- `limit?: number`\n Maximum number of items to return\n\n- `name?: string`\n Filter by a case-insensitive substring of the volume name\n\n- `size_gb_max?: number`\n Only volumes of at most this size\n\n- `size_gb_min?: number`\n Only volumes of at least this size\n\n- `sort?: string`\n Comma-separated sort terms in precedence order, each field:asc or field:desc. Fields: created_at, updated_at, name, status, size_gb\n\n- `status?: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'error'`\n Filter by volume status\n\n- `type?: 'abs'`\n Filter by storage type\n\n### Returns\n\n- `{ id: string; created_at: string; kind: 'boot' | 'data'; name: string; node_id: string; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; type: 'nvme' | 'abs'; updated_at: string; }`\n NKS node volume details.\n\n - `id: string`\n - `created_at: string`\n - `kind: 'boot' | 'data'`\n - `name: string`\n - `node_id: string`\n - `size: number`\n - `status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'`\n - `type: 'nvme' | 'abs'`\n - `updated_at: string`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\n// Automatically fetches more pages as needed.\nfor await (const nksNodeVolume of client.nks.clusters.pools.nodes.volumes.list('node_id', { cluster_id: 'cluster_id', pool_id: 'pool_id' })) {\n console.log(nksNodeVolume);\n}\n```",
5036
+ "## list\n\n`client.nks.clusters.pools.nodes.volumes.list(cluster_id: string, pool_id: string, node_id: string, cursor?: string, kind?: 'boot' | 'data', limit?: number, name?: string, size_gb_max?: number, size_gb_min?: number, sort?: string, status?: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'error', type?: 'abs'): { id: string; created_at: string; kind: volume_kind; name: string; node_id: string; size: number; status: resource_status; type: volume_type; updated_at: string; }`\n\n**get** `/v1/nks/clusters/{cluster_id}/pools/{pool_id}/nodes/{node_id}/volumes`\n\nList all volumes attached to an NKS node\n\n### Parameters\n\n- `cluster_id: string`\n\n- `pool_id: string`\n\n- `node_id: string`\n\n- `cursor?: string`\n Pagination cursor returned by a previous request. Only valid for the same filters and sort order.\n\n- `kind?: 'boot' | 'data'`\n Filter by volume kind\n\n- `limit?: number`\n Maximum number of items to return\n\n- `name?: string`\n Filter by a case-insensitive substring of the volume name\n\n- `size_gb_max?: number`\n Only volumes of at most this size\n\n- `size_gb_min?: number`\n Only volumes of at least this size\n\n- `sort?: string`\n Comma-separated sort terms in precedence order, each field:asc or field:desc. Fields: created_at, updated_at, name, status, size_gb\n\n- `status?: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'error'`\n Filter by volume status\n\n- `type?: 'abs'`\n Filter by storage type\n\n### Returns\n\n- `{ id: string; created_at: string; kind: 'boot' | 'data'; name: string; node_id: string; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; type: 'nvme' | 'abs' | 'longhorn'; updated_at: string; }`\n NKS node volume details.\n\n - `id: string`\n - `created_at: string`\n - `kind: 'boot' | 'data'`\n - `name: string`\n - `node_id: string`\n - `size: number`\n - `status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'`\n - `type: 'nvme' | 'abs' | 'longhorn'`\n - `updated_at: string`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\n// Automatically fetches more pages as needed.\nfor await (const nksNodeVolume of client.nks.clusters.pools.nodes.volumes.list('node_id', { cluster_id: 'cluster_id', pool_id: 'pool_id' })) {\n console.log(nksNodeVolume);\n}\n```",
4820
5037
  perLanguage: {
4821
5038
  typescript: {
4822
5039
  method: 'client.nks.clusters.pools.nodes.volumes.list',
@@ -4861,9 +5078,9 @@ const EMBEDDED_METHODS: MethodEntry[] = [
4861
5078
  "type?: 'abs';",
4862
5079
  ],
4863
5080
  response:
4864
- "{ id: string; created_at: string; kind: 'boot' | 'data'; name: string; node_id: string; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; type: 'nvme' | 'abs'; updated_at: string; }",
5081
+ "{ id: string; created_at: string; kind: 'boot' | 'data'; name: string; node_id: string; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; type: 'nvme' | 'abs' | 'longhorn'; updated_at: string; }",
4865
5082
  markdown:
4866
- "## list\n\n`client.nks.clusters.pools.volumes.list(cluster_id: string, pool_id: string, cursor?: string, kind?: 'boot' | 'data', limit?: number, name?: string, size_gb_max?: number, size_gb_min?: number, sort?: string, status?: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'error', type?: 'abs'): { id: string; created_at: string; kind: volume_kind; name: string; node_id: string; size: number; status: resource_status; type: volume_type; updated_at: string; }`\n\n**get** `/v1/nks/clusters/{cluster_id}/pools/{pool_id}/volumes`\n\nList all volumes attached to the nodes of an NKS node pool\n\n### Parameters\n\n- `cluster_id: string`\n\n- `pool_id: string`\n\n- `cursor?: string`\n Pagination cursor returned by a previous request. Only valid for the same filters and sort order.\n\n- `kind?: 'boot' | 'data'`\n Filter by volume kind\n\n- `limit?: number`\n Maximum number of items to return\n\n- `name?: string`\n Filter by a case-insensitive substring of the volume name\n\n- `size_gb_max?: number`\n Only volumes of at most this size\n\n- `size_gb_min?: number`\n Only volumes of at least this size\n\n- `sort?: string`\n Comma-separated sort terms in precedence order, each field:asc or field:desc. Fields: created_at, updated_at, name, status, size_gb\n\n- `status?: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'error'`\n Filter by volume status\n\n- `type?: 'abs'`\n Filter by storage type\n\n### Returns\n\n- `{ id: string; created_at: string; kind: 'boot' | 'data'; name: string; node_id: string; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; type: 'nvme' | 'abs'; updated_at: string; }`\n NKS node volume details.\n\n - `id: string`\n - `created_at: string`\n - `kind: 'boot' | 'data'`\n - `name: string`\n - `node_id: string`\n - `size: number`\n - `status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'`\n - `type: 'nvme' | 'abs'`\n - `updated_at: string`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\n// Automatically fetches more pages as needed.\nfor await (const nksNodeVolume of client.nks.clusters.pools.volumes.list('pool_id', { cluster_id: 'cluster_id' })) {\n console.log(nksNodeVolume);\n}\n```",
5083
+ "## list\n\n`client.nks.clusters.pools.volumes.list(cluster_id: string, pool_id: string, cursor?: string, kind?: 'boot' | 'data', limit?: number, name?: string, size_gb_max?: number, size_gb_min?: number, sort?: string, status?: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'error', type?: 'abs'): { id: string; created_at: string; kind: volume_kind; name: string; node_id: string; size: number; status: resource_status; type: volume_type; updated_at: string; }`\n\n**get** `/v1/nks/clusters/{cluster_id}/pools/{pool_id}/volumes`\n\nList all volumes attached to the nodes of an NKS node pool\n\n### Parameters\n\n- `cluster_id: string`\n\n- `pool_id: string`\n\n- `cursor?: string`\n Pagination cursor returned by a previous request. Only valid for the same filters and sort order.\n\n- `kind?: 'boot' | 'data'`\n Filter by volume kind\n\n- `limit?: number`\n Maximum number of items to return\n\n- `name?: string`\n Filter by a case-insensitive substring of the volume name\n\n- `size_gb_max?: number`\n Only volumes of at most this size\n\n- `size_gb_min?: number`\n Only volumes of at least this size\n\n- `sort?: string`\n Comma-separated sort terms in precedence order, each field:asc or field:desc. Fields: created_at, updated_at, name, status, size_gb\n\n- `status?: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'error'`\n Filter by volume status\n\n- `type?: 'abs'`\n Filter by storage type\n\n### Returns\n\n- `{ id: string; created_at: string; kind: 'boot' | 'data'; name: string; node_id: string; size: number; status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'; type: 'nvme' | 'abs' | 'longhorn'; updated_at: string; }`\n NKS node volume details.\n\n - `id: string`\n - `created_at: string`\n - `kind: 'boot' | 'data'`\n - `name: string`\n - `node_id: string`\n - `size: number`\n - `status: 'pending' | 'creating' | 'updating' | 'ready' | 'deleting' | 'deleted' | 'error'`\n - `type: 'nvme' | 'abs' | 'longhorn'`\n - `updated_at: string`\n\n### Example\n\n```typescript\nimport NirvanaLabs from '@nirvana-labs/nirvana';\n\nconst client = new NirvanaLabs();\n\n// Automatically fetches more pages as needed.\nfor await (const nksNodeVolume of client.nks.clusters.pools.volumes.list('pool_id', { cluster_id: 'cluster_id' })) {\n console.log(nksNodeVolume);\n}\n```",
4867
5084
  perLanguage: {
4868
5085
  typescript: {
4869
5086
  method: 'client.nks.clusters.pools.volumes.list',
@@ -4897,12 +5114,12 @@ const EMBEDDED_READMES: { language: string; content: string }[] = [
4897
5114
  {
4898
5115
  language: 'go',
4899
5116
  content:
4900
- '# Nirvana Labs Go API Library\n\n<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/v2"><img src="https://pkg.go.dev/badge/github.com/nirvana-labs/nirvana-go/v2.svg" alt="Go Reference"></a>\n\nThe Nirvana Labs Go library provides convenient access to the [Nirvana Labs REST API](https://docs.nirvanalabs.io)\nfrom applications written in Go.\n\n\n\n## MCP Server\n\nUse the Nirvana Labs MCP Server to enable AI assistants to interact with this API, allowing them to explore endpoints, make test requests, and use documentation to help integrate this SDK into your application.\n\n[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=%40nirvana-labs%2Fnirvana-mcp&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBuaXJ2YW5hLWxhYnMvbmlydmFuYS1tY3AiXSwiZW52Ijp7Ik5JUlZBTkFfTEFCU19BUElfS0VZIjoiTXkgQVBJIEtleSJ9fQ)\n[![Install in VS Code](https://img.shields.io/badge/_-Add_to_VS_Code-blue?style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZmlsbD0iI0VFRSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzAuMjM1IDM5Ljg4NGEyLjQ5MSAyLjQ5MSAwIDAgMS0xLjc4MS0uNzNMMTIuNyAyNC43OGwtMy40NiAyLjYyNC0zLjQwNiAyLjU4MmExLjY2NSAxLjY2NSAwIDAgMS0xLjA4Mi4zMzggMS42NjQgMS42NjQgMCAwIDEtMS4wNDYtLjQzMWwtMi4yLTJhMS42NjYgMS42NjYgMCAwIDEgMC0yLjQ2M0w3LjQ1OCAyMCA0LjY3IDE3LjQ1MyAxLjUwNyAxNC41N2ExLjY2NSAxLjY2NSAwIDAgMSAwLTIuNDYzbDIuMi0yYTEuNjY1IDEuNjY1IDAgMCAxIDIuMTMtLjA5N2w2Ljg2MyA1LjIwOUwyOC40NTIuODQ0YTIuNDg4IDIuNDg4IDAgMCAxIDEuODQxLS43MjljLjM1MS4wMDkuNjk5LjA5MSAxLjAxOS4yNDVsOC4yMzYgMy45NjFhMi41IDIuNSAwIDAgMSAxLjQxNSAyLjI1M3YuMDk5LS4wNDVWMzMuMzd2LS4wNDUuMDk1YTIuNTAxIDIuNTAxIDAgMCAxLTEuNDE2IDIuMjU3bC04LjIzNSAzLjk2MWEyLjQ5MiAyLjQ5MiAwIDAgMS0xLjA3Ny4yNDZabS43MTYtMjguOTQ3LTExLjk0OCA5LjA2MiAxMS45NTIgOS4wNjUtLjAwNC0xOC4xMjdaIi8+PC9zdmc+)](https://vscode.stainless.com/mcp/%7B%22name%22%3A%22%40nirvana-labs%2Fnirvana-mcp%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40nirvana-labs%2Fnirvana-mcp%22%5D%2C%22env%22%3A%7B%22NIRVANA_LABS_API_KEY%22%3A%22My%20API%20Key%22%7D%7D)\n\n> Note: You may need to set environment variables in your MCP client.\n\n## Installation\n\n<!-- x-release-please-start-version -->\n\n```go\nimport (\n\t"github.com/nirvana-labs/nirvana-go/v2" // imported as SDK_PackageName\n)\n```\n\n<!-- x-release-please-end -->\n\nOr to pin the version:\n\n<!-- x-release-please-start-version -->\n\n```sh\ngo get -u \'github.com/nirvana-labs/nirvana-go/v2@v2.1.1\'\n```\n\n<!-- x-release-please-end -->\n\n## Requirements\n\nThis library requires Go 1.22+.\n\n## Usage\n\nThe full API of this library can be found in [api.md](api.md).\n\n```go\npackage main\n\nimport (\n\t"context"\n\t"fmt"\n\n\t"github.com/nirvana-labs/nirvana-go/v2"\n\t"github.com/nirvana-labs/nirvana-go/v2/compute"\n\t"github.com/nirvana-labs/nirvana-go/v2/option"\n\t"github.com/nirvana-labs/nirvana-go/v2/shared"\n)\n\nfunc main() {\n\tclient := nirvana.NewClient(\n\t\toption.WithAPIKey("My API Key"), // defaults to os.LookupEnv("NIRVANA_LABS_API_KEY")\n\t)\n\toperation, err := client.Compute.VMs.New(context.TODO(), compute.VMNewParams{\n\t\tBootVolume: compute.VMNewParamsBootVolume{\n\t\t\tSize: 100,\n\t\t\tType: compute.VolumeTypeABS,\n\t\t},\n\t\tInstanceType: "n1-standard-2",\n\t\tName: "my-vm",\n\t\tOSImageName: "ubuntu-noble-2025-10-01",\n\t\tProjectID: "123e4567-e89b-12d3-a456-426614174000",\n\t\tPublicIPEnabled: true,\n\t\tRegion: shared.RegionNameUsSva2,\n\t\tSSHKey: compute.SSHKeyRequestParam{\n\t\t\tPublicKey: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDBIASkmwNiLcdlW6927Zjt1Hf7Kw/PpEZ4Zm+wU9wn2",\n\t\t},\n\t\tSubnetID: "123e4567-e89b-12d3-a456-426614174000",\n\t})\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf("%+v\\n", operation.ID)\n}\n\n```\n\n### Request fields\n\nAll request parameters are wrapped in a generic `Field` type,\nwhich we use to distinguish zero values from null or omitted fields.\n\nThis prevents accidentally sending a zero value if you forget a required parameter,\nand enables explicitly sending `null`, `false`, `\'\'`, or `0` on optional parameters.\nAny field not specified is not sent.\n\nTo construct fields with values, use the helpers `String()`, `Int()`, `Float()`, or most commonly, the generic `F[T]()`.\nTo send a null, use `Null[T]()`, and to send a nonconforming value, use `Raw[T](any)`. For example:\n\n```go\nparams := FooParams{\n\tName: SDK_PackageName.F("hello"),\n\n\t// Explicitly send `"description": null`\n\tDescription: SDK_PackageName.Null[string](),\n\n\tPoint: SDK_PackageName.F(SDK_PackageName.Point{\n\t\tX: SDK_PackageName.Int(0),\n\t\tY: SDK_PackageName.Int(1),\n\n\t\t// In cases where the API specifies a given type,\n\t\t// but you want to send something else, use `Raw`:\n\t\tZ: SDK_PackageName.Raw[int64](0.01), // sends a float\n\t}),\n}\n```\n\n### Response objects\n\nAll fields in response structs are value types (not pointers or wrappers).\n\nIf a given field is `null`, not present, or invalid, the corresponding field\nwill simply be its zero value.\n\nAll response structs also include a special `JSON` field, containing more detailed\ninformation about each property, which you can use like so:\n\n```go\nif res.Name == "" {\n\t// true if `"name"` is either not present or explicitly null\n\tres.JSON.Name.IsNull()\n\n\t// true if the `"name"` key was not present in the response JSON at all\n\tres.JSON.Name.IsMissing()\n\n\t// When the API returns data that cannot be coerced to the expected type:\n\tif res.JSON.Name.IsInvalid() {\n\t\traw := res.JSON.Name.Raw()\n\n\t\tlegacyName := struct{\n\t\t\tFirst string `json:"first"`\n\t\t\tLast string `json:"last"`\n\t\t}{}\n\t\tjson.Unmarshal([]byte(raw), &legacyName)\n\t\tname = legacyName.First + " " + legacyName.Last\n\t}\n}\n```\n\nThese `.JSON` structs also include an `Extras` map containing\nany properties in the json response that were not specified\nin the struct. This can be useful for API features not yet\npresent in the SDK.\n\n```go\nbody := res.JSON.ExtraFields["my_unexpected_field"].Raw()\n```\n\n### RequestOptions\n\nThis library uses the functional options pattern. Functions defined in the\n`SDK_PackageOptionName` package return a `RequestOption`, which is a closure that mutates a\n`RequestConfig`. These options can be supplied to the client or at individual\nrequests. For example:\n\n```go\nclient := SDK_PackageName.SDK_ClientInitializerName(\n\t// Adds a header to every request made by the client\n\tSDK_PackageOptionName.WithHeader("X-Some-Header", "custom_header_info"),\n)\n\nclient.Compute.VMs.New(context.TODO(), ...,\n\t// Override the header\n\tSDK_PackageOptionName.WithHeader("X-Some-Header", "some_other_custom_header_info"),\n\t// Add an undocumented field to the request body, using sjson syntax\n\tSDK_PackageOptionName.WithJSONSet("some.json.path", map[string]string{"my": "object"}),\n)\n```\n\nSee the [full list of request options](https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/v2/SDK_PackageOptionName).\n\n### Pagination\n\nThis library provides some conveniences for working with paginated list endpoints.\n\nYou can use `.ListAutoPaging()` methods to iterate through items across all pages:\n\n```go\niter := client.Compute.VMs.ListAutoPaging(context.TODO(), compute.VMListParams{\n\tProjectID: "123e4567-e89b-12d3-a456-426614174000",\n\tLimit: nirvana.Int(10),\n})\n// Automatically fetches more pages as needed.\nfor iter.Next() {\n\tvm := iter.Current()\n\tfmt.Printf("%+v\\n", vm)\n}\nif err := iter.Err(); err != nil {\n\tpanic(err.Error())\n}\n```\n\nOr you can use simple `.List()` methods to fetch a single page and receive a standard response object\nwith additional helper methods like `.GetNextPage()`, e.g.:\n\n```go\npage, err := client.Compute.VMs.List(context.TODO(), compute.VMListParams{\n\tProjectID: "123e4567-e89b-12d3-a456-426614174000",\n\tLimit: nirvana.Int(10),\n})\nfor page != nil {\n\tfor _, vm := range page.Items {\n\t\tfmt.Printf("%+v\\n", vm)\n\t}\n\tpage, err = page.GetNextPage()\n}\nif err != nil {\n\tpanic(err.Error())\n}\n```\n\n### Errors\n\nWhen the API returns a non-success status code, we return an error with type\n`*SDK_PackageName.Error`. This contains the `StatusCode`, `*http.Request`, and\n`*http.Response` values of the request, as well as the JSON of the error body\n(much like other response objects in the SDK).\n\nTo handle errors, we recommend that you use the `errors.As` pattern:\n\n```go\n_, err := client.Compute.VMs.New(context.TODO(), compute.VMNewParams{\n\tBootVolume: compute.VMNewParamsBootVolume{\n\t\tSize: 100,\n\t\tType: compute.VolumeTypeABS,\n\t},\n\tInstanceType: "n1-standard-2",\n\tName: "my-vm",\n\tOSImageName: "ubuntu-noble-2025-10-01",\n\tProjectID: "123e4567-e89b-12d3-a456-426614174000",\n\tPublicIPEnabled: true,\n\tRegion: shared.RegionNameUsSva2,\n\tSSHKey: compute.SSHKeyRequestParam{\n\t\tPublicKey: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDBIASkmwNiLcdlW6927Zjt1Hf7Kw/PpEZ4Zm+wU9wn2",\n\t},\n\tSubnetID: "123e4567-e89b-12d3-a456-426614174000",\n})\nif err != nil {\n\tvar apierr *nirvana.Error\n\tif errors.As(err, &apierr) {\n\t\tprintln(string(apierr.DumpRequest(true))) // Prints the serialized HTTP request\n\t\tprintln(string(apierr.DumpResponse(true))) // Prints the serialized HTTP response\n\t}\n\tpanic(err.Error()) // GET "/v1/compute/vms": 400 Bad Request { ... }\n}\n```\n\nWhen other errors occur, they are returned unwrapped; for example,\nif HTTP transport fails, you might receive `*url.Error` wrapping `*net.OpError`.\n\n### Timeouts\n\nRequests do not time out by default; use context to configure a timeout for a request lifecycle.\n\nNote that if a request is [retried](#retries), the context timeout does not start over.\nTo set a per-retry timeout, use `SDK_PackageOptionName.WithRequestTimeout()`.\n\n```go\n// This sets the timeout for the request, including all the retries.\nctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute)\ndefer cancel()\nclient.Compute.VMs.New(\n\tctx,\n\tcompute.VMNewParams{\n\t\tBootVolume: compute.VMNewParamsBootVolume{\n\t\t\tSize: 100,\n\t\t\tType: compute.VolumeTypeABS,\n\t\t},\n\t\tInstanceType: "n1-standard-2",\n\t\tName: "my-vm",\n\t\tOSImageName: "ubuntu-noble-2025-10-01",\n\t\tProjectID: "123e4567-e89b-12d3-a456-426614174000",\n\t\tPublicIPEnabled: true,\n\t\tRegion: shared.RegionNameUsSva2,\n\t\tSSHKey: compute.SSHKeyRequestParam{\n\t\t\tPublicKey: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDBIASkmwNiLcdlW6927Zjt1Hf7Kw/PpEZ4Zm+wU9wn2",\n\t\t},\n\t\tSubnetID: "123e4567-e89b-12d3-a456-426614174000",\n\t},\n\t// This sets the per-retry timeout\n\toption.WithRequestTimeout(20*time.Second),\n)\n```\n\n### File uploads\n\nRequest parameters that correspond to file uploads in multipart requests are typed as\n`param.Field[io.Reader]`. The contents of the `io.Reader` will by default be sent as a multipart form\npart with the file name of "anonymous_file" and content-type of "application/octet-stream".\n\nThe file name and content-type can be customized by implementing `Name() string` or `ContentType()\nstring` on the run-time type of `io.Reader`. Note that `os.File` implements `Name() string`, so a\nfile returned by `os.Open` will be sent with the file name on disk.\n\nWe also provide a helper `SDK_PackageName.FileParam(reader io.Reader, filename string, contentType string)`\nwhich can be used to wrap any `io.Reader` with the appropriate file name and content type.\n\n\n\n### Retries\n\nCertain errors will be automatically retried 2 times by default, with a short exponential backoff.\nWe retry by default all connection errors, 408 Request Timeout, 409 Conflict, 429 Rate Limit,\nand >=500 Internal errors.\n\nYou can use the `WithMaxRetries` option to configure or disable this:\n\n```go\n// Configure the default for all requests:\nclient := nirvana.NewClient(\n\toption.WithMaxRetries(0), // default is 2\n)\n\n// Override per-request:\nclient.Compute.VMs.New(\n\tcontext.TODO(),\n\tcompute.VMNewParams{\n\t\tBootVolume: compute.VMNewParamsBootVolume{\n\t\t\tSize: 100,\n\t\t\tType: compute.VolumeTypeABS,\n\t\t},\n\t\tInstanceType: "n1-standard-2",\n\t\tName: "my-vm",\n\t\tOSImageName: "ubuntu-noble-2025-10-01",\n\t\tProjectID: "123e4567-e89b-12d3-a456-426614174000",\n\t\tPublicIPEnabled: true,\n\t\tRegion: shared.RegionNameUsSva2,\n\t\tSSHKey: compute.SSHKeyRequestParam{\n\t\t\tPublicKey: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDBIASkmwNiLcdlW6927Zjt1Hf7Kw/PpEZ4Zm+wU9wn2",\n\t\t},\n\t\tSubnetID: "123e4567-e89b-12d3-a456-426614174000",\n\t},\n\toption.WithMaxRetries(5),\n)\n```\n\n\n### Accessing raw response data (e.g. response headers)\n\nYou can access the raw HTTP response data by using the `option.WithResponseInto()` request option. This is useful when\nyou need to examine response headers, status codes, or other details.\n\n```go\n// Create a variable to store the HTTP response\nvar response *http.Response\noperation, err := client.Compute.VMs.New(\n\tcontext.TODO(),\n\tcompute.VMNewParams{\n\t\tBootVolume: compute.VMNewParamsBootVolume{\n\t\t\tSize: 100,\n\t\t\tType: compute.VolumeTypeABS,\n\t\t},\n\t\tInstanceType: "n1-standard-2",\n\t\tName: "my-vm",\n\t\tOSImageName: "ubuntu-noble-2025-10-01",\n\t\tProjectID: "123e4567-e89b-12d3-a456-426614174000",\n\t\tPublicIPEnabled: true,\n\t\tRegion: shared.RegionNameUsSva2,\n\t\tSSHKey: compute.SSHKeyRequestParam{\n\t\t\tPublicKey: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDBIASkmwNiLcdlW6927Zjt1Hf7Kw/PpEZ4Zm+wU9wn2",\n\t\t},\n\t\tSubnetID: "123e4567-e89b-12d3-a456-426614174000",\n\t},\n\toption.WithResponseInto(&response),\n)\nif err != nil {\n\t// handle error\n}\nfmt.Printf("%+v\\n", operation)\n\nfmt.Printf("Status Code: %d\\n", response.StatusCode)\nfmt.Printf("Headers: %+#v\\n", response.Header)\n```\n\n### Making custom/undocumented requests\n\nThis library is typed for convenient access to the documented API. If you need to access undocumented\nendpoints, params, or response properties, the library can still be used.\n\n#### Undocumented endpoints\n\nTo make requests to undocumented endpoints, you can use `client.Get`, `client.Post`, and other HTTP verbs.\n`RequestOptions` on the client, such as retries, will be respected when making these requests.\n\n```go\nvar (\n // params can be an io.Reader, a []byte, an encoding/json serializable object,\n // or a "…Params" struct defined in this library.\n params map[string]interface{}\n\n // result can be an []byte, *http.Response, a encoding/json deserializable object,\n // or a model defined in this library.\n result *http.Response\n)\nerr := client.Post(context.Background(), "/unspecified", params, &result)\nif err != nil {\n …\n}\n```\n\n#### Undocumented request params\n\nTo make requests using undocumented parameters, you may use either the `SDK_PackageOptionName.WithQuerySet()`\nor the `SDK_PackageOptionName.WithJSONSet()` methods.\n\n```go\nparams := FooNewParams{\n ID: SDK_PackageName.F("id_xxxx"),\n Data: SDK_PackageName.F(FooNewParamsData{\n FirstName: SDK_PackageName.F("John"),\n }),\n}\nclient.Foo.New(context.Background(), params, SDK_PackageOptionName.WithJSONSet("data.last_name", "Doe"))\n```\n\n#### Undocumented response properties\n\nTo access undocumented response properties, you may either access the raw JSON of the response as a string\nwith `result.JSON.RawJSON()`, or get the raw JSON of a particular field on the result with\n`result.JSON.Foo.Raw()`.\n\nAny fields that are not present on the response struct will be saved and can be accessed by `result.JSON.ExtraFields()` which returns the extra fields as a `map[string]Field`.\n\n### Middleware\n\nWe provide `SDK_PackageOptionName.WithMiddleware` which applies the given\nmiddleware to requests.\n\n```go\nfunc Logger(req *http.Request, next SDK_PackageOptionName.MiddlewareNext) (res *http.Response, err error) {\n\t// Before the request\n\tstart := time.Now()\n\tLogReq(req)\n\n\t// Forward the request to the next handler\n\tres, err = next(req)\n\n\t// Handle stuff after the request\n\tend := time.Now()\n\tLogRes(res, err, start - end)\n\n return res, err\n}\n\nclient := SDK_PackageName.SDK_ClientInitializerName(\n\tSDK_PackageOptionName.WithMiddleware(Logger),\n)\n```\n\nWhen multiple middlewares are provided as variadic arguments, the middlewares\nare applied left to right. If `SDK_PackageOptionName.WithMiddleware` is given\nmultiple times, for example first in the client then the method, the\nmiddleware in the client will run first and the middleware given in the method\nwill run next.\n\nYou may also replace the default `http.Client` with\n`SDK_PackageOptionName.WithHTTPClient(client)`. Only one http client is\naccepted (this overwrites any previous client) and receives requests after any\nmiddleware has been applied.\n\n## Semantic versioning\n\nThis package generally follows [SemVer](https://semver.org/spec/v2.0.0.html) conventions, though certain backwards-incompatible changes may be released as minor versions:\n\n1. Changes to library internals which are technically public but not intended or documented for external use. _(Please open a GitHub issue to let us know if you are relying on such internals.)_\n2. Changes that we do not expect to impact the vast majority of users in practice.\n\nWe take backwards-compatibility seriously and work hard to ensure you can rely on a smooth upgrade experience.\n\nWe are keen for your feedback; please open an [issue](https://www.github.com/nirvana-labs/nirvana-go/issues) with questions, bugs, or suggestions.\n\n## Contributing\n\nSee [the contributing documentation](./CONTRIBUTING.md).\n',
5117
+ '# Nirvana Labs Go API Library\n\n<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/v2"><img src="https://pkg.go.dev/badge/github.com/nirvana-labs/nirvana-go/v2.svg" alt="Go Reference"></a>\n\nThe Nirvana Labs Go library provides convenient access to the [Nirvana Labs REST API](https://docs.nirvanalabs.io)\nfrom applications written in Go.\n\n\n\n## MCP Server\n\nUse the Nirvana Labs MCP Server to enable AI assistants to interact with this API, allowing them to explore endpoints, make test requests, and use documentation to help integrate this SDK into your application.\n\n[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=%40nirvana-labs%2Fnirvana-mcp&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBuaXJ2YW5hLWxhYnMvbmlydmFuYS1tY3AiXSwiZW52Ijp7Ik5JUlZBTkFfTEFCU19BUElfS0VZIjoiTXkgQVBJIEtleSJ9fQ)\n[![Install in VS Code](https://img.shields.io/badge/_-Add_to_VS_Code-blue?style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZmlsbD0iI0VFRSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzAuMjM1IDM5Ljg4NGEyLjQ5MSAyLjQ5MSAwIDAgMS0xLjc4MS0uNzNMMTIuNyAyNC43OGwtMy40NiAyLjYyNC0zLjQwNiAyLjU4MmExLjY2NSAxLjY2NSAwIDAgMS0xLjA4Mi4zMzggMS42NjQgMS42NjQgMCAwIDEtMS4wNDYtLjQzMWwtMi4yLTJhMS42NjYgMS42NjYgMCAwIDEgMC0yLjQ2M0w3LjQ1OCAyMCA0LjY3IDE3LjQ1MyAxLjUwNyAxNC41N2ExLjY2NSAxLjY2NSAwIDAgMSAwLTIuNDYzbDIuMi0yYTEuNjY1IDEuNjY1IDAgMCAxIDIuMTMtLjA5N2w2Ljg2MyA1LjIwOUwyOC40NTIuODQ0YTIuNDg4IDIuNDg4IDAgMCAxIDEuODQxLS43MjljLjM1MS4wMDkuNjk5LjA5MSAxLjAxOS4yNDVsOC4yMzYgMy45NjFhMi41IDIuNSAwIDAgMSAxLjQxNSAyLjI1M3YuMDk5LS4wNDVWMzMuMzd2LS4wNDUuMDk1YTIuNTAxIDIuNTAxIDAgMCAxLTEuNDE2IDIuMjU3bC04LjIzNSAzLjk2MWEyLjQ5MiAyLjQ5MiAwIDAgMS0xLjA3Ny4yNDZabS43MTYtMjguOTQ3LTExLjk0OCA5LjA2MiAxMS45NTIgOS4wNjUtLjAwNC0xOC4xMjdaIi8+PC9zdmc+)](https://vscode.stainless.com/mcp/%7B%22name%22%3A%22%40nirvana-labs%2Fnirvana-mcp%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40nirvana-labs%2Fnirvana-mcp%22%5D%2C%22env%22%3A%7B%22NIRVANA_LABS_API_KEY%22%3A%22My%20API%20Key%22%7D%7D)\n\n> Note: You may need to set environment variables in your MCP client.\n\n## Installation\n\n<!-- x-release-please-start-version -->\n\n```go\nimport (\n\t"github.com/nirvana-labs/nirvana-go/v2" // imported as SDK_PackageName\n)\n```\n\n<!-- x-release-please-end -->\n\nOr to pin the version:\n\n<!-- x-release-please-start-version -->\n\n```sh\ngo get -u \'github.com/nirvana-labs/nirvana-go/v2@v2.2.0\'\n```\n\n<!-- x-release-please-end -->\n\n## Requirements\n\nThis library requires Go 1.22+.\n\n## Usage\n\nThe full API of this library can be found in [api.md](api.md).\n\n```go\npackage main\n\nimport (\n\t"context"\n\t"fmt"\n\n\t"github.com/nirvana-labs/nirvana-go/v2"\n\t"github.com/nirvana-labs/nirvana-go/v2/compute"\n\t"github.com/nirvana-labs/nirvana-go/v2/option"\n\t"github.com/nirvana-labs/nirvana-go/v2/shared"\n)\n\nfunc main() {\n\tclient := nirvana.NewClient(\n\t\toption.WithAPIKey("My API Key"), // defaults to os.LookupEnv("NIRVANA_LABS_API_KEY")\n\t)\n\toperation, err := client.Compute.VMs.New(context.TODO(), compute.VMNewParams{\n\t\tBootVolume: compute.VMNewParamsBootVolume{\n\t\t\tSize: 100,\n\t\t\tType: compute.VolumeTypeABS,\n\t\t},\n\t\tInstanceType: "n1-standard-2",\n\t\tName: "my-vm",\n\t\tOSImageName: "ubuntu-noble-2025-10-01",\n\t\tProjectID: "123e4567-e89b-12d3-a456-426614174000",\n\t\tPublicIPEnabled: true,\n\t\tRegion: shared.RegionNameUsSva2,\n\t\tSSHKey: compute.SSHKeyRequestParam{\n\t\t\tPublicKey: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDBIASkmwNiLcdlW6927Zjt1Hf7Kw/PpEZ4Zm+wU9wn2",\n\t\t},\n\t\tSubnetID: "123e4567-e89b-12d3-a456-426614174000",\n\t})\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf("%+v\\n", operation.ID)\n}\n\n```\n\n### Request fields\n\nAll request parameters are wrapped in a generic `Field` type,\nwhich we use to distinguish zero values from null or omitted fields.\n\nThis prevents accidentally sending a zero value if you forget a required parameter,\nand enables explicitly sending `null`, `false`, `\'\'`, or `0` on optional parameters.\nAny field not specified is not sent.\n\nTo construct fields with values, use the helpers `String()`, `Int()`, `Float()`, or most commonly, the generic `F[T]()`.\nTo send a null, use `Null[T]()`, and to send a nonconforming value, use `Raw[T](any)`. For example:\n\n```go\nparams := FooParams{\n\tName: SDK_PackageName.F("hello"),\n\n\t// Explicitly send `"description": null`\n\tDescription: SDK_PackageName.Null[string](),\n\n\tPoint: SDK_PackageName.F(SDK_PackageName.Point{\n\t\tX: SDK_PackageName.Int(0),\n\t\tY: SDK_PackageName.Int(1),\n\n\t\t// In cases where the API specifies a given type,\n\t\t// but you want to send something else, use `Raw`:\n\t\tZ: SDK_PackageName.Raw[int64](0.01), // sends a float\n\t}),\n}\n```\n\n### Response objects\n\nAll fields in response structs are value types (not pointers or wrappers).\n\nIf a given field is `null`, not present, or invalid, the corresponding field\nwill simply be its zero value.\n\nAll response structs also include a special `JSON` field, containing more detailed\ninformation about each property, which you can use like so:\n\n```go\nif res.Name == "" {\n\t// true if `"name"` is either not present or explicitly null\n\tres.JSON.Name.IsNull()\n\n\t// true if the `"name"` key was not present in the response JSON at all\n\tres.JSON.Name.IsMissing()\n\n\t// When the API returns data that cannot be coerced to the expected type:\n\tif res.JSON.Name.IsInvalid() {\n\t\traw := res.JSON.Name.Raw()\n\n\t\tlegacyName := struct{\n\t\t\tFirst string `json:"first"`\n\t\t\tLast string `json:"last"`\n\t\t}{}\n\t\tjson.Unmarshal([]byte(raw), &legacyName)\n\t\tname = legacyName.First + " " + legacyName.Last\n\t}\n}\n```\n\nThese `.JSON` structs also include an `Extras` map containing\nany properties in the json response that were not specified\nin the struct. This can be useful for API features not yet\npresent in the SDK.\n\n```go\nbody := res.JSON.ExtraFields["my_unexpected_field"].Raw()\n```\n\n### RequestOptions\n\nThis library uses the functional options pattern. Functions defined in the\n`SDK_PackageOptionName` package return a `RequestOption`, which is a closure that mutates a\n`RequestConfig`. These options can be supplied to the client or at individual\nrequests. For example:\n\n```go\nclient := SDK_PackageName.SDK_ClientInitializerName(\n\t// Adds a header to every request made by the client\n\tSDK_PackageOptionName.WithHeader("X-Some-Header", "custom_header_info"),\n)\n\nclient.Compute.VMs.New(context.TODO(), ...,\n\t// Override the header\n\tSDK_PackageOptionName.WithHeader("X-Some-Header", "some_other_custom_header_info"),\n\t// Add an undocumented field to the request body, using sjson syntax\n\tSDK_PackageOptionName.WithJSONSet("some.json.path", map[string]string{"my": "object"}),\n)\n```\n\nSee the [full list of request options](https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/v2/SDK_PackageOptionName).\n\n### Pagination\n\nThis library provides some conveniences for working with paginated list endpoints.\n\nYou can use `.ListAutoPaging()` methods to iterate through items across all pages:\n\n```go\niter := client.Compute.VMs.ListAutoPaging(context.TODO(), compute.VMListParams{\n\tProjectID: "123e4567-e89b-12d3-a456-426614174000",\n\tLimit: nirvana.Int(10),\n})\n// Automatically fetches more pages as needed.\nfor iter.Next() {\n\tvm := iter.Current()\n\tfmt.Printf("%+v\\n", vm)\n}\nif err := iter.Err(); err != nil {\n\tpanic(err.Error())\n}\n```\n\nOr you can use simple `.List()` methods to fetch a single page and receive a standard response object\nwith additional helper methods like `.GetNextPage()`, e.g.:\n\n```go\npage, err := client.Compute.VMs.List(context.TODO(), compute.VMListParams{\n\tProjectID: "123e4567-e89b-12d3-a456-426614174000",\n\tLimit: nirvana.Int(10),\n})\nfor page != nil {\n\tfor _, vm := range page.Items {\n\t\tfmt.Printf("%+v\\n", vm)\n\t}\n\tpage, err = page.GetNextPage()\n}\nif err != nil {\n\tpanic(err.Error())\n}\n```\n\n### Errors\n\nWhen the API returns a non-success status code, we return an error with type\n`*SDK_PackageName.Error`. This contains the `StatusCode`, `*http.Request`, and\n`*http.Response` values of the request, as well as the JSON of the error body\n(much like other response objects in the SDK).\n\nTo handle errors, we recommend that you use the `errors.As` pattern:\n\n```go\n_, err := client.Compute.VMs.New(context.TODO(), compute.VMNewParams{\n\tBootVolume: compute.VMNewParamsBootVolume{\n\t\tSize: 100,\n\t\tType: compute.VolumeTypeABS,\n\t},\n\tInstanceType: "n1-standard-2",\n\tName: "my-vm",\n\tOSImageName: "ubuntu-noble-2025-10-01",\n\tProjectID: "123e4567-e89b-12d3-a456-426614174000",\n\tPublicIPEnabled: true,\n\tRegion: shared.RegionNameUsSva2,\n\tSSHKey: compute.SSHKeyRequestParam{\n\t\tPublicKey: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDBIASkmwNiLcdlW6927Zjt1Hf7Kw/PpEZ4Zm+wU9wn2",\n\t},\n\tSubnetID: "123e4567-e89b-12d3-a456-426614174000",\n})\nif err != nil {\n\tvar apierr *nirvana.Error\n\tif errors.As(err, &apierr) {\n\t\tprintln(string(apierr.DumpRequest(true))) // Prints the serialized HTTP request\n\t\tprintln(string(apierr.DumpResponse(true))) // Prints the serialized HTTP response\n\t}\n\tpanic(err.Error()) // GET "/v1/compute/vms": 400 Bad Request { ... }\n}\n```\n\nWhen other errors occur, they are returned unwrapped; for example,\nif HTTP transport fails, you might receive `*url.Error` wrapping `*net.OpError`.\n\n### Timeouts\n\nRequests do not time out by default; use context to configure a timeout for a request lifecycle.\n\nNote that if a request is [retried](#retries), the context timeout does not start over.\nTo set a per-retry timeout, use `SDK_PackageOptionName.WithRequestTimeout()`.\n\n```go\n// This sets the timeout for the request, including all the retries.\nctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute)\ndefer cancel()\nclient.Compute.VMs.New(\n\tctx,\n\tcompute.VMNewParams{\n\t\tBootVolume: compute.VMNewParamsBootVolume{\n\t\t\tSize: 100,\n\t\t\tType: compute.VolumeTypeABS,\n\t\t},\n\t\tInstanceType: "n1-standard-2",\n\t\tName: "my-vm",\n\t\tOSImageName: "ubuntu-noble-2025-10-01",\n\t\tProjectID: "123e4567-e89b-12d3-a456-426614174000",\n\t\tPublicIPEnabled: true,\n\t\tRegion: shared.RegionNameUsSva2,\n\t\tSSHKey: compute.SSHKeyRequestParam{\n\t\t\tPublicKey: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDBIASkmwNiLcdlW6927Zjt1Hf7Kw/PpEZ4Zm+wU9wn2",\n\t\t},\n\t\tSubnetID: "123e4567-e89b-12d3-a456-426614174000",\n\t},\n\t// This sets the per-retry timeout\n\toption.WithRequestTimeout(20*time.Second),\n)\n```\n\n### File uploads\n\nRequest parameters that correspond to file uploads in multipart requests are typed as\n`param.Field[io.Reader]`. The contents of the `io.Reader` will by default be sent as a multipart form\npart with the file name of "anonymous_file" and content-type of "application/octet-stream".\n\nThe file name and content-type can be customized by implementing `Name() string` or `ContentType()\nstring` on the run-time type of `io.Reader`. Note that `os.File` implements `Name() string`, so a\nfile returned by `os.Open` will be sent with the file name on disk.\n\nWe also provide a helper `SDK_PackageName.FileParam(reader io.Reader, filename string, contentType string)`\nwhich can be used to wrap any `io.Reader` with the appropriate file name and content type.\n\n\n\n### Retries\n\nCertain errors will be automatically retried 2 times by default, with a short exponential backoff.\nWe retry by default all connection errors, 408 Request Timeout, 409 Conflict, 429 Rate Limit,\nand >=500 Internal errors.\n\nYou can use the `WithMaxRetries` option to configure or disable this:\n\n```go\n// Configure the default for all requests:\nclient := nirvana.NewClient(\n\toption.WithMaxRetries(0), // default is 2\n)\n\n// Override per-request:\nclient.Compute.VMs.New(\n\tcontext.TODO(),\n\tcompute.VMNewParams{\n\t\tBootVolume: compute.VMNewParamsBootVolume{\n\t\t\tSize: 100,\n\t\t\tType: compute.VolumeTypeABS,\n\t\t},\n\t\tInstanceType: "n1-standard-2",\n\t\tName: "my-vm",\n\t\tOSImageName: "ubuntu-noble-2025-10-01",\n\t\tProjectID: "123e4567-e89b-12d3-a456-426614174000",\n\t\tPublicIPEnabled: true,\n\t\tRegion: shared.RegionNameUsSva2,\n\t\tSSHKey: compute.SSHKeyRequestParam{\n\t\t\tPublicKey: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDBIASkmwNiLcdlW6927Zjt1Hf7Kw/PpEZ4Zm+wU9wn2",\n\t\t},\n\t\tSubnetID: "123e4567-e89b-12d3-a456-426614174000",\n\t},\n\toption.WithMaxRetries(5),\n)\n```\n\n\n### Accessing raw response data (e.g. response headers)\n\nYou can access the raw HTTP response data by using the `option.WithResponseInto()` request option. This is useful when\nyou need to examine response headers, status codes, or other details.\n\n```go\n// Create a variable to store the HTTP response\nvar response *http.Response\noperation, err := client.Compute.VMs.New(\n\tcontext.TODO(),\n\tcompute.VMNewParams{\n\t\tBootVolume: compute.VMNewParamsBootVolume{\n\t\t\tSize: 100,\n\t\t\tType: compute.VolumeTypeABS,\n\t\t},\n\t\tInstanceType: "n1-standard-2",\n\t\tName: "my-vm",\n\t\tOSImageName: "ubuntu-noble-2025-10-01",\n\t\tProjectID: "123e4567-e89b-12d3-a456-426614174000",\n\t\tPublicIPEnabled: true,\n\t\tRegion: shared.RegionNameUsSva2,\n\t\tSSHKey: compute.SSHKeyRequestParam{\n\t\t\tPublicKey: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDBIASkmwNiLcdlW6927Zjt1Hf7Kw/PpEZ4Zm+wU9wn2",\n\t\t},\n\t\tSubnetID: "123e4567-e89b-12d3-a456-426614174000",\n\t},\n\toption.WithResponseInto(&response),\n)\nif err != nil {\n\t// handle error\n}\nfmt.Printf("%+v\\n", operation)\n\nfmt.Printf("Status Code: %d\\n", response.StatusCode)\nfmt.Printf("Headers: %+#v\\n", response.Header)\n```\n\n### Making custom/undocumented requests\n\nThis library is typed for convenient access to the documented API. If you need to access undocumented\nendpoints, params, or response properties, the library can still be used.\n\n#### Undocumented endpoints\n\nTo make requests to undocumented endpoints, you can use `client.Get`, `client.Post`, and other HTTP verbs.\n`RequestOptions` on the client, such as retries, will be respected when making these requests.\n\n```go\nvar (\n // params can be an io.Reader, a []byte, an encoding/json serializable object,\n // or a "…Params" struct defined in this library.\n params map[string]interface{}\n\n // result can be an []byte, *http.Response, a encoding/json deserializable object,\n // or a model defined in this library.\n result *http.Response\n)\nerr := client.Post(context.Background(), "/unspecified", params, &result)\nif err != nil {\n …\n}\n```\n\n#### Undocumented request params\n\nTo make requests using undocumented parameters, you may use either the `SDK_PackageOptionName.WithQuerySet()`\nor the `SDK_PackageOptionName.WithJSONSet()` methods.\n\n```go\nparams := FooNewParams{\n ID: SDK_PackageName.F("id_xxxx"),\n Data: SDK_PackageName.F(FooNewParamsData{\n FirstName: SDK_PackageName.F("John"),\n }),\n}\nclient.Foo.New(context.Background(), params, SDK_PackageOptionName.WithJSONSet("data.last_name", "Doe"))\n```\n\n#### Undocumented response properties\n\nTo access undocumented response properties, you may either access the raw JSON of the response as a string\nwith `result.JSON.RawJSON()`, or get the raw JSON of a particular field on the result with\n`result.JSON.Foo.Raw()`.\n\nAny fields that are not present on the response struct will be saved and can be accessed by `result.JSON.ExtraFields()` which returns the extra fields as a `map[string]Field`.\n\n### Middleware\n\nWe provide `SDK_PackageOptionName.WithMiddleware` which applies the given\nmiddleware to requests.\n\n```go\nfunc Logger(req *http.Request, next SDK_PackageOptionName.MiddlewareNext) (res *http.Response, err error) {\n\t// Before the request\n\tstart := time.Now()\n\tLogReq(req)\n\n\t// Forward the request to the next handler\n\tres, err = next(req)\n\n\t// Handle stuff after the request\n\tend := time.Now()\n\tLogRes(res, err, start - end)\n\n return res, err\n}\n\nclient := SDK_PackageName.SDK_ClientInitializerName(\n\tSDK_PackageOptionName.WithMiddleware(Logger),\n)\n```\n\nWhen multiple middlewares are provided as variadic arguments, the middlewares\nare applied left to right. If `SDK_PackageOptionName.WithMiddleware` is given\nmultiple times, for example first in the client then the method, the\nmiddleware in the client will run first and the middleware given in the method\nwill run next.\n\nYou may also replace the default `http.Client` with\n`SDK_PackageOptionName.WithHTTPClient(client)`. Only one http client is\naccepted (this overwrites any previous client) and receives requests after any\nmiddleware has been applied.\n\n## Semantic versioning\n\nThis package generally follows [SemVer](https://semver.org/spec/v2.0.0.html) conventions, though certain backwards-incompatible changes may be released as minor versions:\n\n1. Changes to library internals which are technically public but not intended or documented for external use. _(Please open a GitHub issue to let us know if you are relying on such internals.)_\n2. Changes that we do not expect to impact the vast majority of users in practice.\n\nWe take backwards-compatibility seriously and work hard to ensure you can rely on a smooth upgrade experience.\n\nWe are keen for your feedback; please open an [issue](https://www.github.com/nirvana-labs/nirvana-go/issues) with questions, bugs, or suggestions.\n\n## Contributing\n\nSee [the contributing documentation](./CONTRIBUTING.md).\n',
4901
5118
  },
4902
5119
  {
4903
5120
  language: 'terraform',
4904
5121
  content:
4905
- '# Nirvana Labs Terraform Provider\n\nThe [Nirvana Labs Terraform provider](https://registry.terraform.io/providers/nirvana-labs/nirvana/latest/docs) provides convenient access to\nthe [Nirvana Labs REST API](https://docs.nirvanalabs.io) from Terraform.\n\n\n\n## Requirements\n\nThis provider requires Terraform CLI 1.0 or later. You can [install it for your system](https://developer.hashicorp.com/terraform/install)\non Hashicorp\'s website.\n\n## Usage\n\nAdd the following to your `main.tf` file:\n\n<!-- x-release-please-start-version -->\n\n```hcl\n# Declare the provider and version\nterraform {\n required_providers {\n SDK_ProviderTypeName = {\n source = "nirvana-labs/nirvana"\n version = "~> 2.1.1"\n }\n }\n}\n\n# Initialize the provider\nprovider "nirvana" {\n api_key = "My API Key" # or set NIRVANA_LABS_API_KEY env variable\n}\n\n# Configure a resource\nresource "nirvana_compute_vm" "example_compute_vm" {\n boot_volume = {\n size = 100\n type = "abs"\n tags = ["production", "ethereum"]\n }\n instance_type = "n1-standard-2"\n name = "my-vm"\n os_image_name = "ubuntu-noble-2025-10-01"\n project_id = "123e4567-e89b-12d3-a456-426614174000"\n public_ip_enabled = true\n region = "us-sva-2"\n ssh_key = {\n public_key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDBIASkmwNiLcdlW6927Zjt1Hf7Kw/PpEZ4Zm+wU9wn2"\n }\n subnet_id = "123e4567-e89b-12d3-a456-426614174000"\n data_volumes = [{\n name = "my-data-volume"\n size = 100\n type = "abs"\n tags = ["production", "ethereum"]\n }]\n tags = ["production", "ethereum"]\n}\n```\n\n<!-- x-release-please-end -->\n\nInitialize your project by running `terraform init` in the directory.\n\nAdditional examples can be found in the [./examples](./examples) folder within this repository, and you can\nrefer to the full documentation on [the Terraform Registry](https://registry.terraform.io/providers/nirvana-labs/nirvana/latest/docs).\n\n### Provider Options\nWhen you initialize the provider, the following options are supported. It is recommended to use environment variables for sensitive values like access tokens.\nIf an environment variable is provided, then the option does not need to be set in the terraform source.\n\n| Property | Environment variable | Required | Default value |\n| -------- | ---------------------- | -------- | ------------- |\n| api_key | `NIRVANA_LABS_API_KEY` | true | — |\n\n\n## Semantic versioning\n\nThis package generally follows [SemVer](https://semver.org/spec/v2.0.0.html) conventions, though certain backwards-incompatible changes may be released as minor versions:\n\n1. Changes to library internals which are technically public but not intended or documented for external use. _(Please open a GitHub issue to let us know if you are relying on such internals.)_\n2. Changes that we do not expect to impact the vast majority of users in practice.\n\nWe take backwards-compatibility seriously and work hard to ensure you can rely on a smooth upgrade experience.\n\nWe are keen for your feedback; please open an [issue](https://www.github.com/nirvana-labs/terraform-provider-nirvana/issues) with questions, bugs, or suggestions.\n\n## Contributing\n\nSee [the contributing documentation](./CONTRIBUTING.md).\n',
5122
+ '# Nirvana Labs Terraform Provider\n\nThe [Nirvana Labs Terraform provider](https://registry.terraform.io/providers/nirvana-labs/nirvana/latest/docs) provides convenient access to\nthe [Nirvana Labs REST API](https://docs.nirvanalabs.io) from Terraform.\n\n\n\n## Requirements\n\nThis provider requires Terraform CLI 1.0 or later. You can [install it for your system](https://developer.hashicorp.com/terraform/install)\non Hashicorp\'s website.\n\n## Usage\n\nAdd the following to your `main.tf` file:\n\n<!-- x-release-please-start-version -->\n\n```hcl\n# Declare the provider and version\nterraform {\n required_providers {\n SDK_ProviderTypeName = {\n source = "nirvana-labs/nirvana"\n version = "~> 2.2.0"\n }\n }\n}\n\n# Initialize the provider\nprovider "nirvana" {\n api_key = "My API Key" # or set NIRVANA_LABS_API_KEY env variable\n}\n\n# Configure a resource\nresource "nirvana_compute_vm" "example_compute_vm" {\n boot_volume = {\n size = 100\n type = "abs"\n tags = ["production", "ethereum"]\n }\n instance_type = "n1-standard-2"\n name = "my-vm"\n os_image_name = "ubuntu-noble-2025-10-01"\n project_id = "123e4567-e89b-12d3-a456-426614174000"\n public_ip_enabled = true\n region = "us-sva-2"\n ssh_key = {\n public_key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDBIASkmwNiLcdlW6927Zjt1Hf7Kw/PpEZ4Zm+wU9wn2"\n }\n subnet_id = "123e4567-e89b-12d3-a456-426614174000"\n data_volumes = [{\n name = "my-data-volume"\n size = 100\n type = "abs"\n tags = ["production", "ethereum"]\n }]\n tags = ["production", "ethereum"]\n}\n```\n\n<!-- x-release-please-end -->\n\nInitialize your project by running `terraform init` in the directory.\n\nAdditional examples can be found in the [./examples](./examples) folder within this repository, and you can\nrefer to the full documentation on [the Terraform Registry](https://registry.terraform.io/providers/nirvana-labs/nirvana/latest/docs).\n\n### Provider Options\nWhen you initialize the provider, the following options are supported. It is recommended to use environment variables for sensitive values like access tokens.\nIf an environment variable is provided, then the option does not need to be set in the terraform source.\n\n| Property | Environment variable | Required | Default value |\n| -------- | ---------------------- | -------- | ------------- |\n| api_key | `NIRVANA_LABS_API_KEY` | true | — |\n\n\n## Semantic versioning\n\nThis package generally follows [SemVer](https://semver.org/spec/v2.0.0.html) conventions, though certain backwards-incompatible changes may be released as minor versions:\n\n1. Changes to library internals which are technically public but not intended or documented for external use. _(Please open a GitHub issue to let us know if you are relying on such internals.)_\n2. Changes that we do not expect to impact the vast majority of users in practice.\n\nWe take backwards-compatibility seriously and work hard to ensure you can rely on a smooth upgrade experience.\n\nWe are keen for your feedback; please open an [issue](https://www.github.com/nirvana-labs/terraform-provider-nirvana/issues) with questions, bugs, or suggestions.\n\n## Contributing\n\nSee [the contributing documentation](./CONTRIBUTING.md).\n',
4906
5123
  },
4907
5124
  {
4908
5125
  language: 'cli',