Model Reference

Sync API record properties, types, and requiredness for the C# and Python SDKs.

Last updated

Use the language selector to view the public names and types exposed by each SDK.

Requiredness describes Sync API expectations; Protobuf does not enforce required fields on the wire.

Accounts

Accounts are snapshot-backed records representing users inside a connected product.

Account

PropertyPropertyTypeTypeRequiredDescription
GenericgenericGenericAccountDetailsGenericAccountDetailsExactly oneProvider-neutral account details

GenericAccountDetails

PropertyPropertyTypeTypeRequiredDescription
IdidstringstrYesStable source account identifier
NamenamestringstrNoDisplay name
EmailemailstringstrNoPrimary email
UsernameusernamestringstrNoSource username
ActiveactiveboolboolNoWhether the account is active
RolesrolesRepeatedField<string>list[str]NoRoles assigned in the source
DetailsdetailsAccountDetailsAccountDetailsNoVendor metadata
TypetypestringstrNoSource-defined account type

AccountDetails

PropertyPropertyTypeTypeRequiredDescription
MicrosoftmicrosoftMicrosoftAccountDetailsMicrosoftAccountDetailsExactly oneMicrosoft-specific metadata when vendor details are present
MicrosoftAccountDetails.TeamsMicrosoftAccountDetails.teamsTeamsMetadataTeamsMetadataNoMicrosoft Teams metadata
TeamsMetadata.HasTeamsTeamsMetadata.has_teamsboolboolYesWhether the account has Teams
SlackslackSlackAccountDetailsSlackAccountDetailsExactly oneSlack-specific metadata when vendor details are present
SlackAccountDetails.SurveysSlackAccountDetails.surveysSlackSurveysMetadataSlackSurveysMetadataNoViio Surveys for Slack metadata
SlackSurveysMetadata.HasAppInstalledSlackSurveysMetadata.has_app_installedboolboolYesWhether the Viio Surveys app is installed in the member's Slack workspace

Plans and Licenses

Plans and licenses are snapshot-backed. A license associates a source account with a source plan.

Plan

PropertyPropertyTypeTypeRequiredDescription
GenericgenericGenericPlanDetailsGenericPlanDetailsExactly oneProvider-neutral plan details
MicrosoftmicrosoftMicrosoftPlanDetailsMicrosoftPlanDetailsExactly oneMicrosoft Graph subscribed SKU and its company subscriptions

GenericPlanDetails

PropertyPropertyTypeTypeRequiredDescription
IdidstringstrYesStable source plan identifier
ExternalPlanNameexternal_plan_namestringstrYesSource plan name
ExternalProductNameexternal_product_namestringstrNoProduct name when the source contains multiple products
AttributesattributesMapField<string, string>dict[str, str]NoSource-specific metadata
DetailsdetailsPlanDetailsPlanDetailsYesSubscription details

PlanDetails

PropertyPropertyTypeTypeRequiredDescription
ModelmodelSubscriptionModelSubscriptionModelYesSubscription model
SeatBasedseat_basedSeatBasedSubscriptionModelSeatBasedSubscriptionModelConditionalRequired when Model is seat-based
SeatBased.PaidSeatsseat_based.paid_seatsintintNoPurchased seats
SeatBased.ConsumedSeatsseat_based.consumed_seatsintintNoAssigned or consumed seats

MicrosoftPlanDetails

Send one record for each Microsoft Graph subscribedSku. Viio uses SkuId as the plan ID. It takes the plan and product names from SkuPartNumber, and the seat counts from ConsumedUnits and PrepaidUnits. Every other field is stored with the plan as received. A license references a Microsoft plan by setting SourcePlanId to its SkuId.

PropertyPropertyTypeTypeRequiredDescription
SkuIdsku_idstringstrYesSKU identifier and plan ID
SkuPartNumbersku_part_numberstringstrYesSKU part number, such as SPE_E3, used as the plan name
AccountIdaccount_idstringstrNoID of the account the SKU belongs to
AccountNameaccount_namestringstrNoName of the account the SKU belongs to
AppliesToapplies_tostringstrNoTarget class, such as User or Company
CapabilityStatuscapability_statusstringstrNoSKU status, such as Enabled or Warning
ConsumedUnitsconsumed_unitsintintNoAssigned licenses, used as consumed seats
PrepaidUnitsprepaid_unitsMicrosoftLicenseUnitsDetailMicrosoftLicenseUnitsDetailNoPurchased units by state
ServicePlansservice_plansRepeatedField<MicrosoftServicePlanInfo>list[MicrosoftServicePlanInfo]NoService plans included in the SKU
SubscriptionIdssubscription_idsRepeatedField<string>list[str]NoIdentifiers of the SKU's subscriptions
SubscriptionssubscriptionsRepeatedField<MicrosoftCompanySubscription>list[MicrosoftCompanySubscription]NoCompany subscriptions with the same SKU ID; leave empty when they can't be read

MicrosoftLicenseUnitsDetail

PropertyPropertyTypeTypeRequiredDescription
EnabledenabledintintNoActive units, used as paid seats
LockedOutlocked_outintintNoUnits locked out after the subscription was cancelled
SuspendedsuspendedintintNoUnits of a cancelled subscription that can still be reactivated
WarningwarningintintNoUnits in the grace period after expiration

MicrosoftServicePlanInfo

Used by MicrosoftPlanDetails.ServicePlans and MicrosoftCompanySubscription.ServiceStatus.

PropertyPropertyTypeTypeRequiredDescription
ServicePlanIdservice_plan_idstringstrNoService plan identifier
ServicePlanNameservice_plan_namestringstrNoService plan name, such as EXCHANGE_S_ENTERPRISE
ProvisioningStatusprovisioning_statusstringstrNoProvisioning status, such as Success or Disabled
AppliesToapplies_tostringstrNoTarget class, such as User or Company

MicrosoftCompanySubscription

Send the Microsoft Graph companySubscription objects whose skuId matches the plan.

PropertyPropertyTypeTypeRequiredDescription
IdidstringstrYesSubscription identifier
CommerceSubscriptionIdcommerce_subscription_idstringstrNoIdentifier in the Microsoft commerce system
CreatedDateTimecreated_date_timeTimestampdatetime | TimestampNoCreation time
IsTrialis_trialboolboolNoWhether the subscription is a free trial
NextLifecycleDateTimenext_lifecycle_date_timeTimestampdatetime | TimestampNoWhen the subscription moves to its next state unless renewed
OwnerIdowner_idstringstrNoObject ID of the account admin
OwnerTenantIdowner_tenant_idstringstrNoPartner tenant that created the subscription
OwnerTypeowner_typestringstrNoEntity type of OwnerId, such as User
ServiceStatusservice_statusRepeatedField<MicrosoftServicePlanInfo>list[MicrosoftServicePlanInfo]NoProvisioning status of each included service
SkuIdsku_idstringstrNoSKU identifier
SkuPartNumbersku_part_numberstringstrNoSKU part number
StatusstatusstringstrNoEnabled, Deleted, Suspended, Warning, or LockedOut
TotalLicensestotal_licensesintintNoLicenses included in the subscription

License

PropertyPropertyTypeTypeRequiredDescription
GenericgenericGenericLicenseDetailsGenericLicenseDetailsExactly oneProvider-neutral license details

GenericLicenseDetails

PropertyPropertyTypeTypeRequiredDescription
SourceIdsource_idstringstrYesStable license or assignment identifier
SourceAccountIdsource_account_idstringstrYesReferenced account identifier
SourcePlanIdsource_plan_idstringstrYesReferenced plan identifier
BillablebillableboolboolYesWhether the assignment consumes a paid entitlement
ExternalProductIdexternal_product_idstringstrNoSource product identifier

SubscriptionModel

C#PythonDescription
UnspecifiedSUBSCRIPTION_MODEL_UNSPECIFIEDNo subscription model selected
SeatBasedSUBSCRIPTION_MODEL_SEAT_BASEDSeat-based subscription

Usage

Usage records are event-based. Their absence from a later batch does not remove earlier events.

Usage

PropertyPropertyTypeTypeRequiredDescription
GenericgenericGenericUsageDetailsGenericUsageDetailsExactly oneProvider-neutral usage details

GenericUsageDetails

PropertyPropertyTypeTypeRequiredDescription
IdidstringstrYesStable usage-event identifier
SourceActorIdsource_actor_idstringstrYesAccount or employee responsible for the activity
ExternalProductNameexternal_product_namestringstrNoProduct in which activity occurred
SourcePlanIdsource_plan_idstringstrNoRelated plan identifier
LastActivitylast_activityTimestampdatetime | TimestampYesMost recent activity time

ExternallyDiscoveredUsage

PropertyPropertyTypeTypeRequiredDescription
GenericgenericGenericExternallyDiscoveredUsageDetailsGenericExternallyDiscoveredUsageDetailsExactly oneProvider-neutral discovered-usage details

GenericExternallyDiscoveredUsageDetails

PropertyPropertyTypeTypeRequiredDescription
SourceActorIdsource_actor_idstringstrYesStable actor identifier
ActorEmailactor_emailstringstrNoActor email when known
ExternalProductNameexternal_product_namestringstrNoDiscovered product
SourcesourcestringstrNoDiscovery source
LastActivitylast_activityTimestampdatetime | TimestampConditionalProvide this or the complete activity range
LastActivityFromlast_activity_fromTimestampdatetime | TimestampConditionalRange start; requires the range end
LastActivityTolast_activity_toTimestampdatetime | TimestampConditionalRange end; requires the range start

Employees

Employees are snapshot-backed. Select the details model that matches the source data.

Employee

PropertyPropertyTypeTypeRequiredDescription
GenericgenericGenericEmployeeDetailsGenericEmployeeDetailsExactly oneProvider-neutral or normalized employee
MicrosoftmicrosoftMicrosoftEmployeeDetailsMicrosoftEmployeeDetailsExactly oneMicrosoft Graph user
GooglegoogleGoogleEmployeeDetailsGoogleEmployeeDetailsExactly oneGoogle Directory user
OktaoktaOktaEmployeeDetailsOktaEmployeeDetailsExactly oneOkta user
BambooHrbamboo_hrBambooHrEmployeeDetailsBambooHrEmployeeDetailsExactly oneBambooHR employee

GenericEmployeeDetails

PropertyPropertyTypeTypeRequiredDescription
IdidstringstrYesStable source employee identifier
FullNamefull_namestringstrYesDisplay name
FirstNamefirst_namestringstrNoGiven name
LastNamelast_namestringstrNoFamily name
EmailemailstringstrNoPrimary email
EmailAliasesemail_aliasesRepeatedField<string>list[str]NoAlternate emails
ActiveactiveboolboolNoWhether the employee is active
DeleteddeletedboolboolNoWhether the employee was deleted
DeletionTimedeletion_timeTimestampdatetime | TimestampNoSource deletion time
CreationTimecreation_timeTimestampdatetime | TimestampNoSource creation time
AvatarUrlavatar_urlstringstrNoProfile image URL
OrgUnitorg_unitstringstrNoOrganizational unit
DepartmentPathdepartment_pathRepeatedField<string>list[str]NoDepartment hierarchy
JobTitlejob_titlestringstrNoJob title
CountrycountrystringstrNoCountry
DivisiondivisionstringstrNoDivision
CostCentercost_centerstringstrNoCost center
UserTypeuser_typestringstrNoSource-defined employee type
ManagerIdmanager_idstringstrNoSource manager identifier
HasMailboxhas_mailboxboolboolNoWhether the employee has a mailbox
AttributesattributesMapField<string, string>dict[str, str]NoSource-specific metadata

MicrosoftEmployeeDetails

PropertyPropertyTypeTypeRequiredDescription
IdidstringstrYesMicrosoft user identifier
DisplayNamedisplay_namestringstrYesDisplay name
UserPrincipalNameuser_principal_namestringstrYesUser principal name
GivenNamegiven_namestringstrNoGiven name
SurnamesurnamestringstrNoFamily name
MailmailstringstrNoPrimary email
DepartmentdepartmentstringstrNoDepartment
AccountEnabledaccount_enabledboolboolNoWhether the account is enabled
CreatedDateTimecreated_date_timeTimestampdatetime | TimestampNoCreation time
DeletedDateTimedeleted_date_timeTimestampdatetime | TimestampNoDeletion time
JobTitlejob_titlestringstrNoJob title
UserTypeuser_typestringstrNoMicrosoft user type
CountrycountrystringstrNoCountry
EmployeeOrgDataemployee_org_dataMicrosoftEmployeeOrgDataMicrosoftEmployeeOrgDataNoDivision and cost-center data
ManagerIdmanager_idstringstrNoMicrosoft manager identifier

MicrosoftEmployeeOrgData exposes optional Division / division and CostCenter / cost_center strings.

GoogleEmployeeDetails

PropertyPropertyTypeTypeRequiredDescription
IdidstringstrYesGoogle user identifier
NamenameGoogleEmployeeNameGoogleEmployeeNameYesFull and given names are required; family name is optional
PrimaryEmailprimary_emailstringstrYesPrimary email
AliasesaliasesRepeatedField<string>list[str]NoAlternate emails
ThumbnailPhotoUrlthumbnail_photo_urlstringstrNoProfile image URL
OrgUnitPathorg_unit_pathstringstrNoOrganizational-unit path
CreationTimecreation_timeTimestampdatetime | TimestampNoCreation time
SuspendedsuspendedboolboolNoWhether the user is suspended
ArchivedarchivedboolboolNoWhether the user is archived
DeletionTimedeletion_timeTimestampdatetime | TimestampNoDeletion time
IsMailboxSetupis_mailbox_setupboolboolNoWhether the mailbox is set up
OrganizationsorganizationsRepeatedField<GoogleEmployeeOrganization>list[GoogleEmployeeOrganization]NoOrganization entries
AddressesaddressesRepeatedField<GoogleEmployeeAddress>list[GoogleEmployeeAddress]NoAddress entries
RelationsrelationsRepeatedField<GoogleEmployeeRelation>list[GoogleEmployeeRelation]NoEmployee relations

Organization entries expose optional cost center, description, title, primary, and type fields. Address entries expose optional country, primary, and type fields. Relation entries expose optional type and value fields.

OktaEmployeeDetails

PropertyPropertyTypeTypeRequiredDescription
IdidstringstrYesOkta user identifier
StatusstatusstringstrYesOkta lifecycle status
CreatedcreatedTimestampdatetime | TimestampYesCreation time
ProfileprofileOktaEmployeeProfileOktaEmployeeProfileYesUser profile

OktaEmployeeProfile requires Email / email, FirstName / first_name, and LastName / last_name. Department, manager ID, manager, country code, division, cost center, user type, and title are optional strings.

BambooHrEmployeeDetails

PropertyPropertyTypeTypeRequiredDescription
IdidstringstrYesBambooHR employee identifier
FirstNamefirst_namestringstrYesGiven name
LastNamelast_namestringstrYesFamily name
WorkEmailwork_emailstringstrNoWork email
DepartmentdepartmentstringstrNoDepartment
JobTitlejob_titlestringstrNoJob title
DivisiondivisionstringstrNoDivision
CountrycountrystringstrNoCountry
StatusstatusstringstrNoEmployment status
HireDatehire_dateTimestampdatetime | TimestampNoHire date
EmploymentStatusemployment_statusstringstrNoSource employment status
SupervisorIdsupervisor_idstringstrNoSupervisor identifier
SupervisorEmailsupervisor_emailstringstrNoSupervisor email
PhotoUrlphoto_urlstringstrNoProfile image URL
MetaUserStatusmeta_user_statusstringstrNoBambooHR meta-user status
CostCentercost_centerstringstrNoCost center
EmployeeTypeemployee_typestringstrNoEmployee type

Groups and Devices

Groups, memberships, and devices are snapshot-backed records.

Group

PropertyPropertyTypeTypeRequiredDescription
GenericgenericGenericGroupDetailsGenericGroupDetailsExactly oneProvider-neutral group details

GenericGroupDetails

PropertyPropertyTypeTypeRequiredDescription
IdidstringstrYesStable source group identifier
NamenamestringstrYesGroup name
DescriptiondescriptionstringstrNoGroup description
DeletionTimedeletion_timeTimestampdatetime | TimestampNoSource deletion time
CreationTimecreation_timeTimestampdatetime | TimestampNoSource creation time
EmailAliasesemail_aliasesRepeatedField<string>list[str]NoGroup email aliases
AttributesattributesMapField<string, string>dict[str, str]NoSource-specific metadata

GroupMember

PropertyPropertyTypeTypeRequiredDescription
GenericgenericGenericGroupMemberDetailsGenericGroupMemberDetailsExactly oneProvider-neutral membership details

GenericGroupMemberDetails

PropertyPropertyTypeTypeRequiredDescription
GroupIdgroup_idstringstrYesReferenced group identifier
MemberIdmember_idstringstrYesReferenced user or group identifier
TypetypeGroupMemberTypeGroupMemberTypeYesWhether the member is a user or group
DeletionTimedeletion_timeTimestampdatetime | TimestampNoMembership deletion time
CreationTimecreation_timeTimestampdatetime | TimestampNoMembership creation time
RolerolestringstrNoSource membership role
AttributesattributesMapField<string, string>dict[str, str]ConditionalMust include a stable sourceId entry

Device

PropertyPropertyTypeTypeRequiredDescription
GenericgenericGenericDeviceDetailsGenericDeviceDetailsExactly oneProvider-neutral device details

GenericDeviceDetails

PropertyPropertyTypeTypeRequiredDescription
IdidstringstrYesStable source device identifier
NamenamestringstrYesDevice name
SerialNumberserial_numberstringstrYesDevice serial number
OwnerownerDeviceOwnerDeviceOwnerNoDevice owner
UuiduuidstringstrNoDevice UUID

DeviceOwner

PropertyPropertyTypeTypeRequiredDescription
IdidstringstrYesReferenced owner identifier
EmailemailstringstrNoOwner email

GroupMemberType

C#PythonDescription
UnspecifiedGROUP_MEMBER_TYPE_UNSPECIFIEDNo member type selected
UserGROUP_MEMBER_TYPE_USERUser member
GroupGROUP_MEMBER_TYPE_GROUPNested group member

Audit Logs

Audit logs are event-based. Select the details model that matches the source event.

AuditLog

PropertyPropertyTypeTypeRequiredDescription
GenericgenericGenericAuditLogDetailsGenericAuditLogDetailsExactly oneProvider-neutral audit event
MicrosoftSignInmicrosoft_sign_inMicrosoftSignInAuditLogDetailsMicrosoftSignInAuditLogDetailsExactly oneMicrosoft Graph sign-in event
MicrosoftSecuritymicrosoft_securityMicrosoftSecurityAuditLogDetailsMicrosoftSecurityAuditLogDetailsExactly oneMicrosoft Graph security audit event

GenericAuditLogDetails

PropertyPropertyTypeTypeRequiredDescription
DatedateTimestampdatetime | TimestampYesEvent time
AuditLogSourceaudit_log_sourcestringstrYesSource audit-log stream
ActoractorAuditLogActorAuditLogActorYesActor identity
ApplicationNameapplication_namestringstrYesApplication name
SourcesourcestringstrYesEvent source
ActivityNameactivity_namestringstrYesActivity name
EventProviderevent_providerstringstrYesProvider that emitted the event
ScopesscopesstringstrNoEvent scopes

AuditLogActor requires Email / email. Its Id / id field is optional.

MicrosoftSignInAuditLogDetails

PropertyPropertyTypeTypeRequiredDescription
CreatedDateTimecreated_date_timeTimestampdatetime | TimestampYesSign-in time
UserIduser_idstringstrYesMicrosoft user identifier
AppDisplayNameapp_display_namestringstrYesApplication display name
UserPrincipalNameuser_principal_namestringstrNoUser principal name
ClientAppUsedclient_app_usedstringstrNoClient used for sign-in
AppIdapp_idstringstrNoApplication identifier
ResourceDisplayNameresource_display_namestringstrNoResource display name
ResourceIdresource_idstringstrNoResource identifier
IsInteractiveis_interactiveboolboolNoWhether the sign-in was interactive
StatusstatusMicrosoftSignInStatusMicrosoftSignInStatusNoError code and failure details

Omit the complete sign-in record when the source does not provide AppDisplayName / app_display_name. Status error code, failure reason, and additional details are all optional.

MicrosoftSecurityAuditLogDetails

PropertyPropertyTypeTypeRequiredDescription
ActorIdactor_idstringstrYesEntra ID user object ID resolved from the user principal name
CreatedDateTimecreated_date_timeTimestampdatetime | TimestampNoEvent time
UserPrincipalNameuser_principal_namestringstrNoUser principal name
ServiceservicestringstrNoMicrosoft service
OperationoperationstringstrNoAudit operation
AuditLogRecordTypeaudit_log_record_typestringstrNoMicrosoft record type

AI Usage and Cost

AI usage and cost records are event-based. The models preserve provider response fields without normalization.

AiUsage and AiCost

PropertyPropertyTypeTypeRequiredDescription
AiUsage.ProviderAiUsage.providerAiProviderAiProviderYesUsage provider
AiUsage.AnthropicMessagesUsageAiUsage.anthropic_messages_usageAnthropicMessagesUsageAnthropicMessagesUsageExactly oneAnthropic Messages API usage
AiUsage.AnthropicClaudeCodeAiUsage.anthropic_claude_codeAnthropicClaudeCodeUsageAnthropicClaudeCodeUsageExactly oneAnthropic Claude Code usage
AiUsage.OpenaiUsageAiUsage.openai_usageOpenAiUsageOpenAiUsageExactly oneOpenAI organization usage
AiUsage.CursorDailyUsageAiUsage.cursor_daily_usageCursorDailyUsageCursorDailyUsageExactly oneCursor daily member usage
AiUsage.CursorUsageEventAiUsage.cursor_usage_eventCursorUsageEventCursorUsageEventExactly oneCursor model request
AiCost.ProviderAiCost.providerAiProviderAiProviderYesCost provider
AiCost.AnthropicCostAiCost.anthropic_costAnthropicCostAnthropicCostExactly oneAnthropic cost report item
AiCost.OpenaiCostAiCost.openai_costOpenAiCostOpenAiCostExactly oneOpenAI organization cost item

In Python, import the OpenAI and Cursor messages from viio_sync_api.v1.openai_pb2 and viio_sync_api.v1.cursor_pb2. The viio_sync_api.v1 package doesn't expose them directly.

AnthropicMessagesUsage

PropertyPropertyTypeTypeRequiredDescription
StartingAtstarting_atTimestampdatetime | TimestampYesBucket start, inclusive
EndingAtending_atTimestampdatetime | TimestampYesBucket end, exclusive
UncachedInputTokensuncached_input_tokenslongintYesUncached input tokens
CacheReadInputTokenscache_read_input_tokenslongintYesCache-read input tokens
OutputTokensoutput_tokenslongintYesOutput tokens
CacheCreationcache_creationAnthropicCacheCreationAnthropicCacheCreationYesOne-hour and five-minute cache-creation token counts
ServerToolUseserver_tool_useAnthropicServerToolUseAnthropicServerToolUseYesServer tool-use counts
AccountIdaccount_idstringstrNoAnthropic account identifier
ApiKeyIdapi_key_idstringstrNoAPI key identifier
ServiceAccountIdservice_account_idstringstrNoService-account identifier
WorkspaceIdworkspace_idstringstrNoAnthropic workspace identifier
ModelmodelstringstrNoModel
ServiceTierservice_tierstringstrNoService tier
ContextWindowcontext_windowstringstrNoContext-window group
InferenceGeoinference_geostringstrNoInference geography

AnthropicCacheCreation requires the one-hour and five-minute token counts. AnthropicServerToolUse requires the web-search request count.

AnthropicCost

PropertyPropertyTypeTypeRequiredDescription
StartingAtstarting_atTimestampdatetime | TimestampYesBucket start, inclusive
EndingAtending_atTimestampdatetime | TimestampYesBucket end, exclusive
AmountamountstringstrYesLowest currency units as reported by Anthropic
CurrencycurrencystringstrYesCurrency code
WorkspaceIdworkspace_idstringstrNoAnthropic workspace identifier
DescriptiondescriptionstringstrNoCost description
CostTypecost_typestringstrNoCost category
TokenTypetoken_typestringstrNoToken category
ModelmodelstringstrNoModel
ServiceTierservice_tierstringstrNoService tier
ContextWindowcontext_windowstringstrNoContext-window group
InferenceGeoinference_geostringstrNoInference geography

AnthropicClaudeCodeUsage

PropertyPropertyTypeTypeRequiredDescription
DatedateTimestampdatetime | TimestampYesUTC usage day
ActoractorAnthropicClaudeCodeActorAnthropicClaudeCodeActorYesUser or API actor
CoreMetricscore_metricsAnthropicClaudeCodeCoreMetricsAnthropicClaudeCodeCoreMetricsYesSession, code-line, commit, and pull-request metrics
ToolActionstool_actionsAnthropicClaudeCodeToolActionsAnthropicClaudeCodeToolActionsYesAccepted and rejected tool actions
OrganizationIdorganization_idstringstrNoAnthropic organization identifier
CustomerTypecustomer_typestringstrNoAPI or subscription customer type
SubscriptionTypesubscription_typestringstrNoSubscription type
TerminalTypeterminal_typestringstrNoTerminal or editor
ModelBreakdownsmodel_breakdownsRepeatedField<AnthropicClaudeCodeModelBreakdown>list[AnthropicClaudeCodeModelBreakdown]NoPer-model tokens and estimated cost

The nested Claude Code metrics use required numeric counters. The actor type is required; actor email and API-key name are optional. Each model breakdown requires its model, token counts, and estimated currency and amount.

OpenAiUsage

One result row from an OpenAI organization usage endpoint. Set exactly one endpoint payload.

PropertyPropertyTypeTypeRequiredDescription
StartingAtstarting_atTimestampdatetime | TimestampYesBucket start, inclusive
EndingAtending_atTimestampdatetime | TimestampYesBucket end, exclusive
ProjectIdproject_idstringstrNoOpenAI project identifier
UserIduser_idstringstrNoOpenAI user identifier
ApiKeyIdapi_key_idstringstrNoAPI key identifier
ModelmodelstringstrNoModel
CompletionscompletionsOpenAiCompletionsUsageOpenAiCompletionsUsageExactly oneCompletions usage
EmbeddingsembeddingsOpenAiEmbeddingsUsageOpenAiEmbeddingsUsageExactly oneEmbeddings usage
ModerationsmoderationsOpenAiModerationsUsageOpenAiModerationsUsageExactly oneModerations usage
ImagesimagesOpenAiImagesUsageOpenAiImagesUsageExactly oneImages usage
AudioSpeechesaudio_speechesOpenAiAudioSpeechesUsageOpenAiAudioSpeechesUsageExactly oneAudio speeches usage
AudioTranscriptionsaudio_transcriptionsOpenAiAudioTranscriptionsUsageOpenAiAudioTranscriptionsUsageExactly oneAudio transcriptions usage
VectorStoresvector_storesOpenAiVectorStoresUsageOpenAiVectorStoresUsageExactly oneVector store usage
CodeInterpreterSessionscode_interpreter_sessionsOpenAiCodeInterpreterSessionsUsageOpenAiCodeInterpreterSessionsUsageExactly oneCode interpreter sessions
FileSearchCallsfile_search_callsOpenAiFileSearchCallsUsageOpenAiFileSearchCallsUsageExactly oneFile search calls
WebSearchCallsweb_search_callsOpenAiWebSearchCallsUsageOpenAiWebSearchCallsUsageExactly oneWeb search calls

Each payload mirrors the counters of its OpenAI endpoint, such as input, output, cached, audio, and image tokens, request counts, images, characters, seconds, bytes, or sessions. Counters are required long / int values. Completions also accept optional Batch / batch and ServiceTier / service_tier. Images accept optional Size / size and Source / source. File search calls accept an optional VectorStoreId / vector_store_id, and web search calls accept an optional ContextLevel / context_level.

OpenAiCost

PropertyPropertyTypeTypeRequiredDescription
StartingAtstarting_atTimestampdatetime | TimestampYesBucket start, inclusive
EndingAtending_atTimestampdatetime | TimestampYesBucket end, exclusive
AmountamountstringstrYesDecimal amount as reported by OpenAI
CurrencycurrencystringstrYesCurrency code
ProjectIdproject_idstringstrNoOpenAI project identifier
ApiKeyIdapi_key_idstringstrNoAPI key identifier
LineItemline_itemstringstrNoCost line item
QuantityquantitystringstrNoDecimal quantity
QuantityUnitquantity_unitstringstrNoQuantity unit

CursorDailyUsage

One row of the Cursor Admin API daily usage report: a single member's activity for one UTC day.

PropertyPropertyTypeTypeRequiredDescription
DatedateTimestampdatetime | TimestampYesUTC midnight of the day
UserIduser_idstringstrNoCursor member identifier
EmailemailstringstrNoMember email
IsActiveis_activeboolboolNoWhether the member was active that day
MostUsedModelmost_used_modelstringstrNoMost used model
ApplyMostUsedExtensionapply_most_used_extensionstringstrNoFile extension most used with apply
TabMostUsedExtensiontab_most_used_extensionstringstrNoFile extension most used with tab completion
ClientVersionclient_versionstringstrNoCursor client version

The daily counters are required long / int values: total and accepted lines added and deleted; total applies, accepts, and rejects; tabs shown and accepted; composer, chat, and agent requests; Cmd+K usages; subscription-included, API-key, and usage-based requests; and Bugbot usages. Their names match the Cursor response fields, for example TotalLinesAdded / total_lines_added.

CursorUsageEvent

One Cursor model request, charged or not. Money values are Cursor's cents as decimal strings.

PropertyPropertyTypeTypeRequiredDescription
TimestamptimestampTimestampdatetime | TimestampYesRequest time
UserEmailuser_emailstringstrNoMember email
ServiceAccountIdservice_account_idstringstrNoService-account identifier
ServiceAccountNameservice_account_namestringstrNoService-account name
CloudAgentIdcloud_agent_idstringstrNoCloud agent identifier
AutomationIdautomation_idstringstrNoAutomation identifier
ConversationIdconversation_idstringstrNoConversation identifier
ModelmodelstringstrNoModel
KindkindstringstrNoBilling outcome, such as Usage-based or Included in Business
MaxModemax_modeboolboolNoWhether Max Mode was used
RequestsCostsrequests_costsstringstrNoRequest cost
IsTokenBasedCallis_token_based_callboolboolNoWhether the request is billed by tokens
IsChargeableis_chargeableboolboolNoWhether the request is chargeable
IsHeadlessis_headlessboolboolNoWhether the request was headless
TokenUsagetoken_usageCursorTokenUsageCursorTokenUsageNoToken counts; absent on requests that aren't token based
ChargedCentscharged_centsstringstrNoModel cost plus Cursor's token fee
CursorTokenFeecursor_token_feestringstrNoCursor's token fee

CursorTokenUsage requires disjoint input, output, cache-write, and cache-read token counts. Its TotalCents / total_cents model cost before the Cursor fee and DiscountPercentOff / discount_percent_off are optional strings.

AiProvider

C#PythonDescription
UnspecifiedAI_PROVIDER_UNSPECIFIEDNo provider selected
AnthropicAI_PROVIDER_ANTHROPICAnthropic provider data
GenericAI_PROVIDER_GENERICProvider-neutral data
OpenAiAI_PROVIDER_OPEN_AIOpenAI provider data
CursorAI_PROVIDER_CURSORCursor provider data

Cloud Costs

Cloud cost records are FOCUS (FinOps Open Cost and Usage Specification) rows grouped by billing period. Each completed batch replaces the earlier version of every billing period it contains. Billing periods that aren't in the batch don't change. Send every row of a billing period, with the same version, in one batch.

CloudCost

PropertyPropertyTypeTypeRequiredDescription
ProviderproviderCloudProviderCloudProviderYesCloud provider
ScopescopestringstrYesBilling period, such as 2026-09
VersionversionstringstrYesExport snapshot marker, such as the AWS export execution ID
FocusfocusFocusCostFocusCostExactly oneFOCUS cost row

FocusCost

FocusCost mirrors the FOCUS export columns, and every field is optional. Each column maps to a field with the same name, such as BilledCost / billed_cost, ChargePeriodStart / charge_period_start, or ServiceName / service_name. In Python, import FocusCost from viio_sync_api.v1.focus_pb2.

PropertyPropertyTypeTypeRequiredDescription
BillingPeriodStartbilling_period_startTimestampdatetime | TimestampNoBilling period start
BillingPeriodEndbilling_period_endTimestampdatetime | TimestampNoBilling period end
ChargePeriodStartcharge_period_startTimestampdatetime | TimestampNoCharge period start
ChargePeriodEndcharge_period_endTimestampdatetime | TimestampNoCharge period end
SkuPriceDetailssku_price_detailsstringstrNoRaw JSON from the export
TagstagsstringstrNoRaw JSON from the export
ExtrasextrasMapField<string, string>dict[str, str]NoProvider columns without a typed field, such as x_* columns, keyed by column name

All other columns, including cost, price, and quantity values, are strings exactly as exported.

CloudProvider

C#PythonDescription
UnspecifiedCLOUD_PROVIDER_UNSPECIFIEDNo provider selected
AwsCLOUD_PROVIDER_AWSAmazon Web Services