Skip to content

Proto API Reference

Protocol Documentation

Table of Contents

Top

brain/v1/character_runtime.proto

AcquireCharacterExecutionRequest

FieldTypeLabelDescription
execution_idstring
worker_idstring
request_idstring
lease_duration_secondsint64
account_idstring

AcquireCharacterExecutionResponse

FieldTypeLabelDescription
execution_idstring
worker_idstring
fence_tokenint64
expires_atgoogle.protobuf.Timestamp
replayedbool
canonical_recipe_jsonbytes
recipe_digestbytes
input_jsonbytes
checkpoint_jsonbytes
effects_jsonbytes
execution_revisionint64
recipe_version_idstring
workflow_idstring
action_idstring
stateCharacterExecutionState
completionCharacterCompletionoptional

CharacterAssetSourceRef

CharacterAssetSourceRef names an asset already bound to the character, by the slot it occupies. Lineage is declared against slots rather than asset ids because the workflow never sees an id — Sirloin mints those at commit.

FieldTypeLabelDescription
scopestringClosed policy enum as a string: upload
rolestringSlot name inside scope.
ordinalint32

CharacterCompletion

FieldTypeLabelDescription
character_idstring
execution_idstring
lifecyclestring
revisionint64

CharacterExecutionAsset

CharacterExecutionAsset is the only provider-to-storage creation-asset envelope. Sirloin verifies every field before atomically binding a result. Scope+role replace the retired flat role_key (ADR 2026-08-11).

FieldTypeLabelDescription
asset_kindstring
ordinalint32
object_keystring
content_typestring
byte_sizeint64
content_digestbytes
provenance_jsonbytes
contentbytesPOC/reference adapters may hand small deterministic objects to Sirloin. Provider adapters should upload content-addressed objects and omit this.
scopestringClosed policy enum as a string: upload
rolestringSlot name inside scope; recipe-declared, ^[a-z][a-z0-9_-]{0,63}$.
derived_fromCharacterAssetSourceRefrepeatedAssets this one was derived from, as slots on the same character. Sirloin resolves each to an asset id at commit and records an edge; a source that does not resolve fails the commit. Scope policy decides whether declaring any is mandatory (ADR 2026-08-11).

CharacterExecutionCheckpoint

FieldTypeLabelDescription
checkpoint_jsonbytes

CharacterExecutionEffectResult

FieldTypeLabelDescription
effect_keystring
node_idstring
logical_input_digestbytes
result_jsonbytes

CharacterExecutionEffectStart

FieldTypeLabelDescription
effect_keystring
node_idstring
logical_input_digestbytes
provider_idempotency_keystring

CharacterExecutionResponse

FieldTypeLabelDescription
execution_idstring
stateCharacterExecutionState
completionCharacterCompletionoptional
replayedbool

CharacterExecutionTerminalResult

FieldTypeLabelDescription
stateCharacterExecutionState
result_jsonbytes
runtime_versionstring
assetsCharacterExecutionAssetrepeated

CharacterRecipeValidationIssue

FieldTypeLabelDescription
pathstring
codestring
messagestring

CheckCharacterRuntimeHealthRequest

CheckCharacterRuntimeHealthResponse

FieldTypeLabelDescription
servingbool
runtime_versionstring

CommitCharacterExecutionRequest

FieldTypeLabelDescription
execution_idstring
worker_idstring
fence_tokenint64
request_idstring
payload_digestbytes
checkpointCharacterExecutionCheckpoint
effect_startCharacterExecutionEffectStart
effect_resultCharacterExecutionEffectResult
terminal_resultCharacterExecutionTerminalResult
account_idstring

CommitCharacterExecutionResponse

FieldTypeLabelDescription
stateCharacterExecutionState
execution_revisionint64
completionCharacterCompletionoptional
replayedbool

GetCharacterAttributesRequest

FieldTypeLabelDescription
character_idstring
account_idstringOptional under Brain service-token auth; see GetCharacterDatasetRequest.

GetCharacterAttributesResponse

FieldTypeLabelDescription
foundboolfalse → no Sirloin-owned character (Brain dual-read may fall back).
character_idstring
lifecyclestringcharacters.character_lifecycle (draft/training/available/blocked/rejected).
valuesgoogle.protobuf.StructRecipe-declared schema_values. Facade projects onto load_character slots; undeclared legacy fields stay absent (undefined), never invented.

GetCharacterDatasetRequest

GetCharacterDatasetRequest loads durable dataset object keys for media gen. types are Kitsune onboarding image type names (e.g. FACE_FRONTAL); empty means every generation_* role. Order of types is the response group order.

FieldTypeLabelDescription
character_idstring
account_idstringOptional when the caller is the Brain service token: Sirloin resolves the owning account. Prefer setting it when known (account-scoped reads).
typesstringrepeated

GetCharacterDatasetResponse

FieldTypeLabelDescription
foundboolfalse → no Sirloin-owned character for this id (Brain dual-read may fall back). true → Sirloin is source of truth even when object_keys is empty.
object_keysstringrepeated

RunCharacterExecutionRequest

FieldTypeLabelDescription
execution_idstring
request_idstring
account_idstring

ValidateCharacterRecipeRequest

FieldTypeLabelDescription
canonical_recipe_jsonbytes
recipe_digestbytes

ValidateCharacterRecipeResponse

FieldTypeLabelDescription
validbool
issuesCharacterRecipeValidationIssuerepeated

CharacterExecutionState

NameNumberDescription
CHARACTER_EXECUTION_STATE_UNSPECIFIED0
CHARACTER_EXECUTION_STATE_QUEUED1
CHARACTER_EXECUTION_STATE_RUNNING2
CHARACTER_EXECUTION_STATE_SUCCEEDED3
CHARACTER_EXECUTION_STATE_FAILED4
CHARACTER_EXECUTION_STATE_CANCELLED5

KitsuneOnboardingImageType

KitsuneOnboardingImageType is the single source of truth for Kitsune onboarding / generation reference image slots. Character generation roles for adapter “kitsune” are ToLower(enum name), e.g. FACE_FRONTAL → face_frontal. Brain HTTP OpenAPI and recipe generation policy must stay aligned with this enum — do not maintain a parallel string list.

NameNumberDescription
KITSUNE_ONBOARDING_IMAGE_TYPE_UNSPECIFIED0
FACE_FRONTAL1
FULL_BODY2
FULL_BODY_ANY3
FACE_FRONTAL_NSFW4
FULL_BODY_NSFW5
FULL_BODY_ANY_NSFW6
VAGINA_FRONTAL_NSFW7
VAGINA_CLOSEUP_NSFW8
ANUS_NSFW9

CharacterRuntimeControlService

CharacterRuntimeControlService is implemented by Sirloin. Acquire/Commit were built for mid-flight sync RunCharacterExecution; Bull EXECUTE Acquires locally at wake-up and Commits from the character-completion HTTP webhook. GetCharacterDataset / GetCharacterAttributes are the dual-read surface Brain dials for media-generation character data (see ADR 2026-08-08). Service-token auth is required before those reads are safe on this server.

Method NameRequest TypeResponse TypeDescription
AcquireCharacterExecutionAcquireCharacterExecutionRequestAcquireCharacterExecutionResponse
CommitCharacterExecutionCommitCharacterExecutionRequestCommitCharacterExecutionResponse
GetCharacterDatasetGetCharacterDatasetRequestGetCharacterDatasetResponseDual-read: used onboarding/dataset object keys for a Sirloin-owned character. found=false means Sirloin has no recipe-attributed character (Brain may fall back).
GetCharacterAttributesGetCharacterAttributesRequestGetCharacterAttributesResponseDual-read: recipe-declared schema values for a Sirloin-owned character.

CharacterRuntimeService

CharacterRuntimeService is implemented by Brain and invoked by Sirloin. Brain executes provider work but owns no authoritative character state.

Method NameRequest TypeResponse TypeDescription
ValidateCharacterRecipeValidateCharacterRecipeRequestValidateCharacterRecipeResponse
RunCharacterExecutionRunCharacterExecutionRequestCharacterExecutionResponse
CheckCharacterRuntimeHealthCheckCharacterRuntimeHealthRequestCheckCharacterRuntimeHealthResponse

Top

round/v1/round.proto

InferRequest

InferRequest contains the input data and model selection for inference.

FieldTypeLabelDescription
model_idstringmodel_id identifies which model to use for inference. Examples: “embeddings”, “face-detection”
textstringtext input for text-based models (e.g., embeddings)
image_base64stringimage_base64 input for image-based models (e.g., face detection) Base64 encoded image data. Expected formats: JPEG, PNG
optionsstringOptional parameters specific to the model (JSON encoded)

InferResponse

InferResponse contains the inference results. Errors are returned via gRPC status codes, not in the response body.

FieldTypeLabelDescription
outputstringoutput contains the inference result as text For embeddings: JSON array of float values For face detection: JSON with bounding boxes and metadata
metadatastringmetadata contains additional information about the inference (e.g., processing time, model version, etc.) as JSON

ListModelsRequest

ListModelsRequest is currently empty but reserved for future pagination

ListModelsResponse

ListModelsResponse contains information about available models.

FieldTypeLabelDescription
modelsModelInforepeated

ModelInfo

ModelInfo describes a single available model.

FieldTypeLabelDescription
model_idstringmodel_id is the unique identifier for the model
namestringname is the human-readable name of the model
descriptionstringdescription provides details about what the model does
input_typestringinput_type indicates the expected input type (text, image, etc.)
output_typestringoutput_type indicates the output format (embeddings, json, etc.)
versionstringversion is the model version

RoundService

Round Service

A universal ONNX model serving microservice that provides inference capabilities for multiple ML models including text embeddings and image analysis.

Method NameRequest TypeResponse TypeDescription
InferInferRequestInferResponseInfer runs inference on the specified model with the provided input. The model is selected via model_id, and input can be either text or binary data (e.g., images).
ListModelsListModelsRequestListModelsResponseListModels returns information about all available models.

Top

sirloin/v5/billing.proto

AddPaymentMethodRequest

AddPaymentMethodRequest - vault a single-use payment method token

FieldTypeLabelDescription
user_idstringClerk user_id (becomes Primer customer_id)
payment_method_tokenstringSingle-use token from Primer checkout

AddPaymentMethodResponse

AddPaymentMethodResponse returns the newly vaulted payment method

FieldTypeLabelDescription
payment_methodPaymentMethodThe newly vaulted payment method

BillingAddress

BillingAddress represents a customer’s billing address

FieldTypeLabelDescription
first_namestring
last_namestring
line1stringStreet address line 1
line2stringoptionalStreet address line 2 (optional)
citystring
statestringoptionalState/province (optional for some countries)
countrystringISO 3166-1 alpha-2 country code
zipstringoptionalPostal/ZIP code (optional for some countries)

CancelScheduledDowngradeRequest

CancelScheduledDowngradeRequest - cancel a scheduled plan change (e.g., downgrade)

FieldTypeLabelDescription
user_idstringClerk user_id (Chargebee customer_id)

CancelScheduledDowngradeResponse

CancelScheduledDowngradeResponse returns the updated subscription after removing scheduled changes

FieldTypeLabelDescription
successboolWhether the scheduled change was cancelled
current_subscriptionSubscriptionDetailsUpdated subscription details (without scheduled changes)

CancelSubscriptionRequest

CancelSubscriptionRequest - cancel subscription at end of term

FieldTypeLabelDescription
user_idstringClerk user_id (Chargebee customer_id)

CancelSubscriptionResponse

CancelSubscriptionResponse returns cancellation details

FieldTypeLabelDescription
cancellation_effective_dateint64Unix timestamp when subscription ends
statusstringSubscription status after cancellation (“non_renewing”)
subscription_idstringChargebee subscription ID

CardDetails

CardDetails contains card-specific payment method information

FieldTypeLabelDescription
last4stringLast 4 digits of card number
brandstringCard network (Visa, Mastercard, etc.)
expiry_monthstring2-digit expiration month
expiry_yearstring4-digit expiration year
cardholder_namestringCardholder name (optional)

CouponCredits

CouponCredits contains bonus credits from coupon metadata

FieldTypeLabelDescription
additional_imagesint32Bonus image credits
additional_charactersint32Bonus character slots

CouponInfo

CouponInfo contains coupon validation and discount details

FieldTypeLabelDescription
coupon_idstringChargebee coupon ID
namestringDisplay name
discount_typeCouponDiscountType
discount_percentagedoubleoptionalFor percentage coupons
discount_amountint32optionalFor fixed amount coupons (cents)
currency_codestringoptionalFor fixed amount coupons
duration_typestringone_time, forever, limited_period
is_validboolWhether coupon can be applied
invalid_reasonstringoptionalReason if not valid
creditsCouponCreditsoptionalBonus credits from coupon metadata
raw_metadatastringoptionalRaw JSON of all coupon custom metadata
initial_subscription_onlybooloptionalcf_initialsubscriptiononly: coupon only for first-time subscribers
checkout_descriptionstringoptionalcf_checkout_description: description for checkout display

CreatePrimerCheckoutRequest

FieldTypeLabelDescription
user_idstring
user_emailstring
item_price_idstringChargebee item price ID
countrystringoptionalOptional country code for metadata
coupon_codestringoptionalOptional coupon code to apply
test_pspstringoptionalInternal testing: override PSP via feature flag
payment_method_tokenstringoptionalOptional vaulted Primer token for MIT one-off payment
idempotency_keystringoptionalRequired when payment_method_token is set

CreatePrimerCheckoutResponse

FieldTypeLabelDescription
client_tokenstringPrimer client token for frontend checkout
order_idstringOrder ID (Chargebee invoice ID)
chargebee_customer_idstring
chargebee_subscription_idstring
chargebee_invoice_idstring
amountint32Final amount in cents (after discount)
currencystringCurrency code (e.g., USD)
original_amountint32Original amount before discount (cents)
discount_amountint32Discount amount applied (cents)
is_zero_amount_checkoutboolTrue if 100% coupon discount (checkout complete)
is_scheduled_changeboolTrue if downgrade scheduled for end of term (no checkout needed)
scheduled_change_dateint64Unix timestamp when scheduled change takes effect
primer_payment_idstringoptionalPrimer payment ID for direct MIT one-off payments
is_payment_pendingboolTrue if a direct MIT payment needs async confirmation/fulfillment
processorstringPayment processor assigned to the user (e.g. “NMI”, “EMP”)

CreateVaultingSessionRequest

CreateVaultingSessionRequest - create a Primer session for vaulting only

FieldTypeLabelDescription
user_idstringClerk user_id (Primer customer_id)
user_emailstringUser email for Primer
countrystringoptionalOptional country code for payment method options
test_pspstringoptionalInternal testing: override PSP via feature flag

CreateVaultingSessionResponse

CreateVaultingSessionResponse returns the Primer client token

FieldTypeLabelDescription
client_tokenstringPrimer client token for frontend checkout
processorstringPayment processor assigned to the user (e.g. “NMI”, “EMP”)

DeletePaymentMethodRequest

DeletePaymentMethodRequest - remove a vaulted payment method

FieldTypeLabelDescription
user_idstringClerk user_id for authorization
payment_method_tokenstringToken of payment method to delete

DeletePaymentMethodResponse

DeletePaymentMethodResponse returns the updated payment method list

FieldTypeLabelDescription
payment_methodsPaymentMethodrepeatedUpdated list after deletion

DunningState

DunningState contains detailed dunning information for users with failed payments.

FieldTypeLabelDescription
is_in_dunningboolWhether user is currently in dunning
access_loss_dateint64Unix timestamp: when subscription will be cancelled
next_retry_dateint64Unix timestamp: next payment attempt (0 if hard decline)
attempt_numberint32Which retry attempt we’re on
max_attemptsint32Total retries before cancellation
recovery_attemptedboolTrue if primary method changed after last failed attempt
last_dunning_attempt_atint64Unix timestamp: most recent failed attempt
primary_method_changed_atint64Unix timestamp: when primary payment method was last set

EarnedCredits

FieldTypeLabelDescription
date_monthstringFormat: “YYYY-MM”
referralsint32
creditsint32

GetCurrentUsageRequest

FieldTypeLabelDescription
user_idstring
user_emailstring

GetCurrentUsageResponse

FieldTypeLabelDescription
characters_countint32
media_countint32
media_monthly_limitint32
remaining_credits_countint32
remaining_full_access_credits_countint32
tierstring
is_subscribedbool
has_subscribedbool
reimbursement_eligiblebool
cancellation_benefit_eligiblebool
referralsReferrals
statsStats
is_in_dunningboolTrue if user has unpaid renewal invoice within dunning window
is_non_renewingboolTrue if subscription is cancelled but still active until term end
kyc_identification_statusKycIdentificationStatusOndato-like identification status (Awaiting/Approved/Rejected)
standard_credits_countint32
dunningDunningStateDetailed dunning state (nil if not in dunning)
kyc_reset_eligiblebool
kyc_approved_atint64Unix timestamp: when KYC was approved (0 if not approved)
has_ever_created_characterboolTrue once the account has owned a character, soft-deleted ones included. characters_count answers “how many now” and drops back to zero on delete; this answers “have they ever”, which is what the 18+ rules are written against. Clients gating adult surfaces must read this, not the count.
has_ever_created_nsfw_characterboolTrue once the account has owned an 18+ character, soft-deleted ones included. An 18+ character cannot exist without an 18+ plan behind it, so this stands in for “has ever paid for 18+” without reading billing history. Clients use it to stop offering a first-month discount to a returning customer.

GetPaymentMethodsRequest

GetPaymentMethodsRequest - requires user_id for Primer vault lookup

FieldTypeLabelDescription
user_idstringClerk user_id used as Primer customer_id

GetPaymentMethodsResponse

GetPaymentMethodsResponse contains the list of vaulted payment methods

FieldTypeLabelDescription
payment_methodsPaymentMethodrepeated

GetPaymentRequest

GetPaymentRequest - retrieve payment details from Primer

FieldTypeLabelDescription
payment_idstringPrimer payment ID

GetPaymentResponse

GetPaymentResponse returns payment details from Primer

FieldTypeLabelDescription
idstringPrimer payment ID
statusstringPENDING, AUTHORIZED, SETTLED, FAILED, DECLINED, CANCELLED
order_idstringOrder ID (usually Chargebee invoice ID)
amountint32Amount in minor units (cents)
currencystringISO currency code
datestringISO 8601 timestamp
customer_idstringoptionalPrimer customer ID
metadataGetPaymentResponse.MetadataEntryrepeatedPayment metadata
status_reasonPrimerPaymentStatusReasonoptionalDetails if payment failed

GetPaymentResponse.MetadataEntry

FieldTypeLabelDescription
keystring
valuestring

GetSubscriptionDetailsRequest

GetSubscriptionDetailsRequest - requires user_id

FieldTypeLabelDescription
user_idstringClerk user_id (Chargebee customer_id)

GetSubscriptionDetailsResponse

GetSubscriptionDetailsResponse contains subscription information

FieldTypeLabelDescription
current_subscriptionSubscriptionDetailsoptionalCurrently active subscription (StartDate <= now)
future_subscriptionSubscriptionDetailsoptionalPending downgrade subscription (StartDate > now, < 1 year)

GetTransactionsRequest

GetTransactionsRequest - requires user_id for invoice lookup

FieldTypeLabelDescription
user_idstringClerk user_id (Chargebee customer_id)

GetTransactionsResponse

GetTransactionsResponse contains complete transaction history

FieldTypeLabelDescription
transactionsTransactionrepeatedAll transactions, newest first

GetWorkflowPricingRequest

GetWorkflowPricingRequest - PUBLIC endpoint, no authentication required.

GetWorkflowPricingResponse

GetWorkflowPricingResponse contains pricing for all published workflows.

FieldTypeLabelDescription
workflowsWorkflowPricerepeated

HasNsfwPurchaseRequest

FieldTypeLabelDescription
user_idstring

HasNsfwPurchaseResponse

FieldTypeLabelDescription
has_nsfw_purchasebool

ListProductsRequest

ListProductsRequest - PUBLIC endpoint, no authentication required

FieldTypeLabelDescription
currency_codestringoptionalFilter by currency (default: all)
product_typeProductTypeoptionalFilter by type (default: all)
coupon_codestringoptionalApply coupon to calculate discounted prices

ListProductsResponse

ListProductsResponse contains all products grouped by type

FieldTypeLabelDescription
subscription_productsProductrepeatedSubscription plans sorted by tier
one_time_productsProductrepeatedOne-time purchases (image packs, characters)

PaymentMethod

PaymentMethod represents a vaulted payment method from Primer

FieldTypeLabelDescription
tokenstringPrimer payment method token (unique identifier)
payment_method_typePaymentMethodTypeType of payment method
is_defaultboolWhether this is the default payment method
created_atstringISO 8601 timestamp
card_detailsCardDetailsoptionalPresent if payment_method_type is CARD/GOOGLE_PAY/APPLE_PAY
descriptionstringoptionalUser-provided description
analytics_idstringoptionalPrimer analytics ID for tracking

PlanDetails

PlanDetails contains plan information

FieldTypeLabelDescription
plan_namestringe.g., “starter”, “ultimate”, “creator”
item_price_idstringChargebee item_price_id
priceint32Price in cents
currencystringISO currency code
billing_periodBillingPeriodMonthly/Yearly

PrimerPaymentStatusReason

PrimerPaymentStatusReason provides details about payment status

FieldTypeLabelDescription
typestringAPPLICATION_ERROR, GATEWAY_REJECTED, GATEWAY_TIMEOUT, ISSUER_DECLINED
decline_typestringSOFT_DECLINE (retryable), HARD_DECLINE (permanent)
codestringError code (e.g., INSUFFICIENT_FUNDS, EXPIRED_CARD)
messagestringHuman-readable error message

Product

Product represents a single product (subscription or one-time)

FieldTypeLabelDescription
idstringChargebee item ID (e.g., “foxy-starter-new”)
namestringDisplay name (e.g., “Starter”)
descriptionstringMarketing description
product_typeProductTypeSUBSCRIPTION or ONE_TIME
pricesProductPricerepeatedAll price variants (multi-currency, multi-period)
benefitsProductBenefitsCredits/limits from metadata
is_popularboolFeatured/recommended flag
sort_orderint32Display order
iconstringoptionalIcon identifier for frontend

ProductBenefits

ProductBenefits represents the credits/limits from Chargebee item metadata

FieldTypeLabelDescription
images_monthly_limitint32Monthly image credit limit
character_limitint32Character slot limit
additional_imagesint32Bonus images (for one-time packs)
additional_charactersint32Bonus characters (for one-time packs)
concurrent_generationsint32Concurrent image generation slots
concurrent_video_generationsint32Concurrent video generation slots
credit_typeCreditType

ProductPrice

ProductPrice represents a single price variant for a product

FieldTypeLabelDescription
item_price_idstringChargebee item_price_id for CreatePrimerCheckout
currency_codestringISO currency code (e.g., “USD”, “EUR”)
priceint32Price in minor units (cents)
billing_periodBillingPeriodMONTHLY/YEARLY for subscriptions, UNSPECIFIED for one-time
price_per_monthint32optionalFor yearly plans: price / 12 (convenience field)
discounted_priceint32optionalPrice after coupon (if coupon_code provided in request)
discount_amountint32optionalAmount saved (original price - discounted price)

ProvideCancellationBenefitRequest

FieldTypeLabelDescription
user_idstring
reasonstring
extra_creditsint32

ProvideCancellationBenefitResponse

ReactivateSubscriptionRequest

ReactivateSubscriptionRequest - reactivate a cancelled subscription

FieldTypeLabelDescription
user_idstringClerk user_id (Chargebee customer_id)

ReactivateSubscriptionResponse

ReactivateSubscriptionResponse returns reactivation details

FieldTypeLabelDescription
subscription_idstringChargebee subscription ID
statusstringSubscription status after reactivation (“active”)
next_billing_atint64Unix timestamp of next billing date

Referrals

FieldTypeLabelDescription
total_referralsint32
total_creditsint32
earned_creditsEarnedCreditsrepeated

ReservePaymentAttemptRequest

FieldTypeLabelDescription
user_idstring
planned_amount_centsint64planned_amount_cents and currency do NOT affect the allow/deny decision — count quota is purely transaction-count based. They are recorded into the authorization_attempt event metadata for observability and audit trails.
currencystring
merchant_contextstringmerchant_context controls whether this checkout consumes the high-risk PSP quota. Only “full” records an authorization_attempt; regular/SFW checkouts are allowed without writing quota rows.

ReservePaymentAttemptResponse

FieldTypeLabelDescription
allowedbool
remaining_attemptsint32
reasonstring

RetryDunningPaymentRequest

FieldTypeLabelDescription
user_idstring

RetryDunningPaymentResponse

FieldTypeLabelDescription
statusRetryDunningPaymentStatus
is_in_dunningbool
dunningDunningState

SetPrimaryPaymentMethodRequest

SetPrimaryPaymentMethodRequest - set a payment method as default

FieldTypeLabelDescription
user_idstringClerk user_id for authorization
payment_method_tokenstringToken of payment method to set as default

SetPrimaryPaymentMethodResponse

SetPrimaryPaymentMethodResponse returns the updated payment method list

FieldTypeLabelDescription
payment_methodsPaymentMethodrepeatedUpdated list with new default

SetReferralCodeRequest

FieldTypeLabelDescription
user_idstring
referral_codestring

SetReferralCodeResponse

Stats

FieldTypeLabelDescription
images_generated_last_30_daysint32
videos_generated_last_30_daysint32
top_custom_textstring

SubmitPaidInvoiceRequest

FieldTypeLabelDescription
user_idstring
subscription_idstringoptionalFor Primer-based payments (legacy): subscription_id to search for Primer payment by order_id
invoice_idint32optionalFor Chargebee-direct payments: invoice_id to poll for and apply credits
payment_idstringoptionalFor Primer-based payments (preferred): direct payment_id lookup via GET /payments/{id} subscription_id is extracted from payment’s order_id field, no need to pass it separately

SubmitPaidInvoiceResponse

SubscriptionDetails

SubscriptionDetails contains current subscription state

FieldTypeLabelDescription
current_planPlanDetailsCurrent active plan
future_planPlanDetailsoptionalScheduled plan change (if any)
renewal_dateint64Unix timestamp of next renewal (current_term_end)
next_billing_amountint32Next billing amount in cents
statusstringactive, non_renewing, cancelled, etc.
has_scheduled_changesboolWhether changes are scheduled
subscription_idstringChargebee subscription ID
activated_atint64Unix timestamp when subscription became active
next_billing_atint64Unix timestamp of next billing date
is_non_renewingboolTrue if subscription is canceled (non_renewing status)

Transaction

Transaction represents a single billing transaction

FieldTypeLabelDescription
idstringChargebee invoice/credit_note ID
dateint64Unix timestamp
transaction_typeTransactionType
statusTransactionStatus
payment_methodTransactionPaymentMethod
amountint32Amount in cents
currencystringISO currency code
descriptionstringoptionalLine item description
item_price_idstringoptionalAssociated item price (for purchases)

TransactionPaymentMethod

TransactionPaymentMethod contains payment method details for a transaction

FieldTypeLabelDescription
typePaymentMethodTypeCard, Google Pay, Apple Pay, etc.
last4stringoptionalLast 4 digits (for cards)
brandstringoptionalCard brand (Visa, Mastercard, etc.)

UpdateBillingAddressRequest

UpdateBillingAddressRequest - update billing address in Chargebee

FieldTypeLabelDescription
user_idstringClerk user_id (Chargebee customer_id)
billing_addressBillingAddressNew billing address
client_tokenstringoptionalPrimer client session token to update

UpdateBillingAddressResponse

UpdateBillingAddressResponse returns the updated billing address

FieldTypeLabelDescription
billing_addressBillingAddressUpdated billing address

UpdateNextBillingDateForTestingRequest

UpdateNextBillingDateForTestingRequest - test helper to move renewal earlier

FieldTypeLabelDescription
user_idstringClerk user_id (Chargebee customer_id)
minutesint32Minutes from now for the new term end

UpdateNextBillingDateForTestingResponse

UpdateNextBillingDateForTestingResponse returns updated subscription timing

FieldTypeLabelDescription
subscription_idstringChargebee subscription ID
statusstringSubscription status after update
next_billing_atint64Unix timestamp of next billing date

ValidateCouponRequest

ValidateCouponRequest - validate a coupon code

FieldTypeLabelDescription
coupon_codestringCoupon code to validate
for_subscriptionbooloptionalIf true, validates for subscription use
user_idstringoptionalIf provided, cleanup pending checkouts before validation

ValidateCouponResponse

ValidateCouponResponse returns validation result

FieldTypeLabelDescription
validboolWhether coupon is valid for use
reasonstringoptionalReason if not valid (human-readable)
couponCouponInfooptionalCoupon details if valid (for display)

WorkflowPrice

WorkflowPrice contains pricing information for a single workflow. A workflow is wholly SFW or NSFW, so base_price already reflects that — there is no NSFW multiplier. Final cost: image = base_price, video = base_price × duration(s), carousel = base_price × fixed carousel size.

FieldTypeLabelDescription
workflow_namestringWorkflow identifier (e.g. “kitsune-custom-image”)
display_namestringHuman-readable name
base_priceint32Base credit cost (per image / per second / per carousel item)

BillingPeriod

BillingPeriod for subscription products

NameNumberDescription
BILLING_PERIOD_UNSPECIFIED0
BILLING_PERIOD_MONTHLY1
BILLING_PERIOD_YEARLY2

CouponDiscountType

CouponDiscountType represents how the discount is calculated

NameNumberDescription
COUPON_DISCOUNT_TYPE_UNSPECIFIED0
COUPON_DISCOUNT_TYPE_PERCENTAGE1Percentage off
COUPON_DISCOUNT_TYPE_FIXED_AMOUNT2Fixed amount off

CreditType

CreditType distinguishes between standard (SFW-only) and full-access (SFW+NSFW) credits

NameNumberDescription
CREDIT_TYPE_UNSPECIFIED0
CREDIT_TYPE_STANDARD1
CREDIT_TYPE_FULL_ACCESS2

KycIdentificationStatus

KycIdentificationStatus matches Ondato’s identification status semantics.

NameNumberDescription
KYC_IDENTIFICATION_STATUS_UNSPECIFIED0
KYC_IDENTIFICATION_STATUS_AWAITING1
KYC_IDENTIFICATION_STATUS_APPROVED2
KYC_IDENTIFICATION_STATUS_REJECTED3

PaymentMethodType

PaymentMethodType represents the type of vaulted payment method

NameNumberDescription
PAYMENT_METHOD_TYPE_UNSPECIFIED0
PAYMENT_METHOD_TYPE_CARD1
PAYMENT_METHOD_TYPE_GOOGLE_PAY2
PAYMENT_METHOD_TYPE_APPLE_PAY3

ProductType

ProductType distinguishes between subscription plans and one-time purchases

NameNumberDescription
PRODUCT_TYPE_UNSPECIFIED0
PRODUCT_TYPE_SUBSCRIPTION1Recurring subscription plan
PRODUCT_TYPE_ONE_TIME2One-time purchase (image packs, extra characters)

RetryDunningPaymentStatus

NameNumberDescription
RETRY_DUNNING_PAYMENT_STATUS_UNSPECIFIED0
RETRY_DUNNING_PAYMENT_STATUS_SUCCEEDED1
RETRY_DUNNING_PAYMENT_STATUS_PROCESSING2
RETRY_DUNNING_PAYMENT_STATUS_ALREADY_PAID3
RETRY_DUNNING_PAYMENT_STATUS_NOT_IN_DUNNING4
RETRY_DUNNING_PAYMENT_STATUS_NO_PAYMENT_METHOD5
RETRY_DUNNING_PAYMENT_STATUS_FAILED_RETRYABLE6
RETRY_DUNNING_PAYMENT_STATUS_FAILED_HARD_DECLINE7
RETRY_DUNNING_PAYMENT_STATUS_BLOCKED_VELOCITY8

RiskAction

RiskAction represents a client-side behavioral risk signal.

NameNumberDescription
RISK_ACTION_UNSPECIFIED0
RISK_ACTION_SHORT_APP_TIME1User is using the app for less than MIN_APP_TIME_MS
RISK_ACTION_NO_POINTER_INTERACTION2No pointer/mouse click or move
RISK_ACTION_NO_SCROLL3No scroll interaction yet

TransactionStatus

TransactionStatus represents the status of a transaction

NameNumberDescription
TRANSACTION_STATUS_UNSPECIFIED0
TRANSACTION_STATUS_SUCCESS1Payment successful
TRANSACTION_STATUS_PENDING2Payment pending
TRANSACTION_STATUS_FAILED3Payment failed
TRANSACTION_STATUS_VOIDED4Invoice voided

TransactionType

TransactionType represents the type of billing transaction

NameNumberDescription
TRANSACTION_TYPE_UNSPECIFIED0
TRANSACTION_TYPE_PURCHASE1New subscription or renewal payment
TRANSACTION_TYPE_REFUND2Refund issued
TRANSACTION_TYPE_CREDIT_NOTE3Credit note adjustment

BillingService

Billing Service

Handles all billing-related operations including subscriptions, payments, products, and transactions.

Usage & Credits

Method NameRequest TypeResponse TypeDescription
GetCurrentUsageGetCurrentUsageRequestGetCurrentUsageResponseGetCurrentUsage returns the current usage of the user.
SubmitPaidInvoiceSubmitPaidInvoiceRequestSubmitPaidInvoiceResponseSubmitPaidInvoice submits a paid invoice for the user.
ProvideCancellationBenefitProvideCancellationBenefitRequestProvideCancellationBenefitResponseProvideCancellationBenefit provides a cancellation benefit for the user.
SetReferralCodeSetReferralCodeRequestSetReferralCodeResponseSetReferralCode sets the referral code for the user.
CreatePrimerCheckoutCreatePrimerCheckoutRequestCreatePrimerCheckoutResponseCreatePrimerCheckout creates a Primer checkout session for a subscription. POC: For testing Primer payment integration.
ReservePaymentAttemptReservePaymentAttemptRequestReservePaymentAttemptResponseReservePaymentAttempt reserves a PSP authorization attempt slot for the user based on per-attempt quota policy. Returns whether the attempt is allowed along with remaining attempts and a reason if denied.
GetPaymentGetPaymentRequestGetPaymentResponseGetPayment retrieves payment details from Primer.
RetryDunningPaymentRetryDunningPaymentRequestRetryDunningPaymentResponseRetryDunningPayment retries an unpaid renewal invoice for a user in dunning.
ListProductsListProductsRequestListProductsResponseListProducts returns all available products from Chargebee. PUBLIC endpoint - no authentication required.
ValidateCouponValidateCouponRequestValidateCouponResponseValidateCoupon checks if a coupon is valid for use.
GetPaymentMethodsGetPaymentMethodsRequestGetPaymentMethodsResponseGetPaymentMethods retrieves user’s vaulted payment methods from Primer.
SetPrimaryPaymentMethodSetPrimaryPaymentMethodRequestSetPrimaryPaymentMethodResponseSetPrimaryPaymentMethod sets a payment method as default for recurring charges.
DeletePaymentMethodDeletePaymentMethodRequestDeletePaymentMethodResponseDeletePaymentMethod removes a vaulted payment method from Primer.
AddPaymentMethodAddPaymentMethodRequestAddPaymentMethodResponseAddPaymentMethod vaults a single-use payment method token for future use.
CreateVaultingSessionCreateVaultingSessionRequestCreateVaultingSessionResponseCreateVaultingSession creates a Primer session for vaulting only (no charge).
GetTransactionsGetTransactionsRequestGetTransactionsResponseGetTransactions returns the user’s complete transaction history.
GetSubscriptionDetailsGetSubscriptionDetailsRequestGetSubscriptionDetailsResponseGetSubscriptionDetails returns current and future subscription plan info.
CancelSubscriptionCancelSubscriptionRequestCancelSubscriptionResponseCancelSubscription cancels the user’s subscription at end of term.
ReactivateSubscriptionReactivateSubscriptionRequestReactivateSubscriptionResponseReactivateSubscription reactivates a cancelled subscription (non_renewing).
UpdateNextBillingDateForTestingUpdateNextBillingDateForTestingRequestUpdateNextBillingDateForTestingResponseUpdateNextBillingDateForTesting shortens the current term for testing renewals.
CancelScheduledDowngradeCancelScheduledDowngradeRequestCancelScheduledDowngradeResponseCancelScheduledDowngrade removes a scheduled plan change (e.g., downgrade). This restores the subscription to its current plan without the scheduled change.
UpdateBillingAddressUpdateBillingAddressRequestUpdateBillingAddressResponseUpdateBillingAddress updates the user’s billing address in Chargebee.
HasNsfwPurchaseHasNsfwPurchaseRequestHasNsfwPurchaseResponseHasNsfwPurchase checks if a user has ever purchased an NSFW plan. Queries the purchases table (not Chargebee subscriptions) for accuracy when downgrades mutate the original subscription item.
GetWorkflowPricingGetWorkflowPricingRequestGetWorkflowPricingResponseGetWorkflowPricing returns credit costs for all published workflows. PUBLIC endpoint - used by brisket to display generation costs.

Top

sirloin/v5/character_common.proto

CharacterAssetReference

FieldTypeLabelDescription
asset_idstring
digeststring
media_typestring
statestring
object_keystringAccount-authorized stable object reference. Consumers resolve it through their local media adapter; it is not a public URL or bearer credential.
ordinalint32
display_namestring
tagsstringrepeated
access_urlstringShort-lived read credential resolved at request time. It is never stored.
scopestringClosed policy enum as a string: upload
rolestringSlot name inside scope.

CharacterCapabilityLayer

CharacterCapabilityLayer is one capability the character carries. The key is an open vocabulary so a new tier is a data change; “adult” is the only key with an enforcement path today.

FieldTypeLabelDescription
capability_keystring
enabledbool
verification_stateCharacterVerificationState
enabled_atgoogle.protobuf.Timestampoptional

RequestMetadata

RequestMetadata carries replay and optimistic-concurrency inputs. Trusted internal callers provide account and actor identity on the owning request.

FieldTypeLabelDescription
client_request_idstring
expected_revisionint64optional
reasonstring
correlation_idstring
trace_idstring

CharacterLifecycle

A character has two independent axes. CharacterLifecycle is where it is in its own life; CharacterCapabilityLayer is what it is permitted to do. There is deliberately no ADULT_ACTIVE lifecycle state: 18+ is a layer, which is what lets a further tier ship as data rather than as a new state.

NameNumberDescription
CHARACTER_LIFECYCLE_UNSPECIFIED0
CHARACTER_LIFECYCLE_DRAFT1
CHARACTER_LIFECYCLE_PENDING2
CHARACTER_LIFECYCLE_TRAINING3
CHARACTER_LIFECYCLE_AVAILABLE4
CHARACTER_LIFECYCLE_BLOCKED5
CHARACTER_LIFECYCLE_REJECTED6

CharacterOperationStatus

NameNumberDescription
CHARACTER_OPERATION_STATUS_UNSPECIFIED0
CHARACTER_OPERATION_STATUS_PENDING1
CHARACTER_OPERATION_STATUS_RUNNING2
CHARACTER_OPERATION_STATUS_ACTION_REQUIRED3
CHARACTER_OPERATION_STATUS_RETRYING4
CHARACTER_OPERATION_STATUS_SUCCEEDED5
CHARACTER_OPERATION_STATUS_REJECTED6
CHARACTER_OPERATION_STATUS_FAILED7
CHARACTER_OPERATION_STATUS_CANCELED8
CHARACTER_OPERATION_STATUS_EXPIRED9

CharacterVerificationState

NameNumberDescription
CHARACTER_VERIFICATION_STATE_UNSPECIFIED0
CHARACTER_VERIFICATION_STATE_INSTANT1
CHARACTER_VERIFICATION_STATE_NEEDS_REVIEW2
CHARACTER_VERIFICATION_STATE_IN_REVIEW3
CHARACTER_VERIFICATION_STATE_NOT_APPROVED4
CHARACTER_VERIFICATION_STATE_APPROVED5

Top

sirloin/v5/character_capability.proto

CharacterAdultState

CharacterAdultState is the stored adult capability of one character. adult_enabled is the slot authority. Whether the capability may currently be used is the derived CharacterCapabilityLayer.enabled on the projection, which reads false while a dataset change holds the character in review.

FieldTypeLabelDescription
character_idstring
adult_enabledbool
identity_anchorstringoptionalThe identity holding this character’s single adult slot. Absent while the capability is off.
selfie_reset_countuint32

EnableCharacterAdultCapabilityRequest

FieldTypeLabelDescription
metadataRequestMetadata
user_idstring
character_idstring
identity_anchorstringThe identity this character’s adult slot is bound to, one per account. Sirloin enforces the slot. It does not check that the anchor came from a completed verification; that binding is the caller’s until the verification ladder (FOXY-621) lands.

EnableCharacterAdultCapabilityResponse

FieldTypeLabelDescription
adultCharacterAdultState
replayedbool

IncrementCharacterSelfieResetCountRequest

FieldTypeLabelDescription
metadataRequestMetadata
user_idstring
character_idstring

IncrementCharacterSelfieResetCountResponse

FieldTypeLabelDescription
adultCharacterAdultState
replayedbool

CharacterCapabilityService

CharacterCapabilityService is the write surface for the capability axis. It is separate from the projection service because enabling 18+ binds an identity to a character and holds the account’s single slot for it: the authorization story is the compliance one, not the one that governs ordinary roster reads and edits.

Both RPCs are replay-safe on RequestMetadata.client_request_id, and the reason on that metadata is required here: every call lands in the character event log.

Method NameRequest TypeResponse TypeDescription
EnableCharacterAdultCapabilityEnableCharacterAdultCapabilityRequestEnableCharacterAdultCapabilityResponse
IncrementCharacterSelfieResetCountIncrementCharacterSelfieResetCountRequestIncrementCharacterSelfieResetCountResponse

Top

tbone/v1/character_recipe.proto

CharacterAction

FieldTypeLabelDescription
idstring
kindCharacterActionKind
labelstring
workflow_idstringoptional
billing_policy_idstringoptional
propsgoogle.protobuf.Struct
running_stage_idstringoptionalrunning_stage_id is shown only while an execute/authorize/upload-bound workflow is in flight. transition declares the successful destination.
roleCharacterActionRole
transitionCharacterTransition
bindingsCharacterActionBindings
available_whenCharacterConditionoptional
unavailable_reasonstring
history_barrierbool
entitlementCharacterEntitlementKindentitlement is checked by Sirloin before the action is applied. Brisket uses the same value to render the matching customer gate.

CharacterActionBindings

FieldTypeLabelDescription
valuesCharacterValueBindingrepeated
assetsCharacterAssetBindingrepeated

CharacterAssetBinding

FieldTypeLabelDescription
input_keystring
field_keystringoptionalfield_key binds an upload field; scope+role binds durable saved assets.
min_countuint32
max_countuint32
content_typesstringrepeated
scopestringoptionalClosed policy enum as a string: upload
rolestringoptionalSlot name inside scope; recipe-declared, ^[a-z][a-z0-9_-]{0,63}$.

CharacterAssetOutput

CharacterAssetOutput is the recipe-owned cardinality contract for durable runtime assets. It is universal across questionnaire, upload, and mixed character recipes. Scope carries policy (ADR 2026-08-11); role is the slot name inside that scope. Kitsune generation references use bare roles face_frontal / full_body / full_body_any under scope generation — never a generation_ prefix.

FieldTypeLabelDescription
asset_kindstring
min_countuint32
max_countuint32
scopestringClosed policy enum as a string: upload
rolestringSlot name inside scope; recipe-declared, ^[a-z][a-z0-9_-]{0,63}$.

CharacterBillingPolicy

CharacterBillingPolicy prices one repeatable action, so “first re-roll free, then 10 credits” is recipe data rather than code. Sirloin owns enforcement: it counts uses and bounds the free allowance, and a run that fails hands its use back.

FieldTypeLabelDescription
idstring
creditsint64
included_usesuint32Runs of this policy that cost nothing, counted per character across every action that shares the policy. Sirloin caps it, so a recipe cannot write itself an unlimited free tier; the first character’s provisioning credit is code-owned and cannot be granted here at all.

CharacterCondition

FieldTypeLabelDescription
existsCharacterExistsCondition
equalsCharacterEqualsCondition
allCharacterConditionGroup
anyCharacterConditionGroup
negatedCharacterCondition

CharacterConditionGroup

FieldTypeLabelDescription
conditionsCharacterConditionrepeated

CharacterEqualsCondition

FieldTypeLabelDescription
pathstring
valuegoogle.protobuf.Value

CharacterExistsCondition

FieldTypeLabelDescription
pathstring

CharacterField

FieldTypeLabelDescription
keystring
controlCharacterControlKind
labelstring
descriptionstring
requiredbool
optionsCharacterOptionrepeated
show_whenCharacterConditionoptional
validationgoogle.protobuf.Struct
propsgoogle.protobuf.Struct

CharacterLocalDataDefinition

FieldTypeLabelDescription
keystring
default_valuegoogle.protobuf.Value

CharacterManagement

CharacterManagement defines ordered cards and their focused edit flows. Draft navigation stays in the client; only a terminal SAVE action is sent to Sirloin.

FieldTypeLabelDescription
sectionsCharacterManagementSectionrepeated

CharacterManagementSection

FieldTypeLabelDescription
idstring
titlestring
descriptionstring
iconstring
summaryCharacterManagementSummary
flowCharacterStageFlow
available_whenCharacterConditionoptional
unavailable_reasonstring

CharacterManagementSummary

FieldTypeLabelDescription
bindingsCharacterManagementSummaryBindingrepeated
separatorstring
empty_textstring

CharacterManagementSummaryAssetRef

CharacterManagementSummaryAssetRef is a bound asset identified by the scope+role pair from ADR 2026-08-11 (not the retired flat role_key).

FieldTypeLabelDescription
scopestringClosed policy enum as a string: upload
rolestringSlot name inside scope; recipe-declared, ^[a-z][a-z0-9_-]{0,63}$.

CharacterManagementSummaryBinding

FieldTypeLabelDescription
field_keystring
assetCharacterManagementSummaryAssetRef
prefixstring
suffixstring

CharacterMediaReference

FieldTypeLabelDescription
asset_idstringoptional
urlstringoptional
altstring

CharacterOption

FieldTypeLabelDescription
valuegoogle.protobuf.Value
labelstring
descriptionstring
mediaCharacterMediaReference
payloadgoogle.protobuf.StructWhat picking this option does to a regeneration, as data the workflow interprets. Adding an attribute to the catalog is a publish rather than a release because this travels with the option that offers it.

CharacterPresentation

FieldTypeLabelDescription
creationCharacterStageFlow
managementCharacterManagement

CharacterRecipe

CharacterRecipe is the code-owned envelope for data-owned character flows. It deliberately has no VI/RI or real/visual discriminator. Creation method provenance is the pinned recipe key, version, and digest.

FieldTypeLabelDescription
schema_versionint32
keystring
catalogCharacterRecipeCatalogEntry
presentationCharacterPresentation
workflowsCharacterWorkflowrepeated
billing_policiesCharacterBillingPolicyrepeated
policygoogle.protobuf.Struct
output_schemagoogle.protobuf.Struct

CharacterRecipeCatalogEntry

FieldTypeLabelDescription
titlestring
descriptionstring
mediaCharacterMediaReference
sort_orderint32
badgesstringrepeated
billing_policy_idstringBilling policy shown on the recipe card. Empty means no catalog price.

CharacterStage

FieldTypeLabelDescription
idstring
kindCharacterStageKind
variantstring
titlestring
descriptionstring
fieldsCharacterFieldrepeated
actionsCharacterActionrepeated
show_whenCharacterConditionoptional
propsgoogle.protobuf.Struct
contentCharacterStageContentBlockrepeated
back_barrierbool

CharacterStageContentBlock

Content blocks are ordered presentation data. They never become session or character values.

FieldTypeLabelDescription
idstring
kindCharacterStageContentKind
titlestring
bodystring
tonestring
mediaCharacterMediaReference
show_whenCharacterConditionoptional
optionalbool

CharacterStageFlow

FieldTypeLabelDescription
entry_stage_idstring
stagesCharacterStagerepeated
local_dataCharacterLocalDataDefinitionrepeatedClient-owned temporary values. They never participate in server conditions, transitions, workflow inputs, billing, or persisted session state.

CharacterTransition

FieldTypeLabelDescription
kindCharacterTransitionKind
stage_idstringoptional
return_to_caller_if_presentboolReuse a local form as an editor: return through server history when it has a caller, otherwise apply the declared NEXT transition.

CharacterValueBinding

FieldTypeLabelDescription
input_keystring
field_keystring
fixed_valuegoogle.protobuf.Value
requiredbool

CharacterWorkflow

CharacterWorkflow is the recipe-side pin to a Brain-owned compute graph. The full node graph lives in Brain’s workflow table; the recipe stores only the immutable pin + the contract projection Sirloin needs for session, billing, and commit validation.

FieldTypeLabelDescription
idstring
purposestring
input_bindingsgoogle.protobuf.Struct
output_schemagoogle.protobuf.Struct
asset_outputsCharacterAssetOutputrepeated
brain_workflow_idstringUUID of a published Brain workflow row. Required.
graph_digeststringLowercase hex SHA-256 of the pinned graph canonical bytes at recipe publish.
contract_digeststringoptionalLowercase hex SHA-256 of the contract projection (purpose + input_bindings + output_schema + asset_outputs). Optional; recommended for drift checks.

CharacterActionKind

NameNumberDescription
CHARACTER_ACTION_KIND_UNSPECIFIED0
CHARACTER_ACTION_KIND_SAVE1
CHARACTER_ACTION_KIND_UPLOAD2
CHARACTER_ACTION_KIND_EXECUTE3
CHARACTER_ACTION_KIND_SELECT_ASSET4
CHARACTER_ACTION_KIND_AUTHORIZE5
CHARACTER_ACTION_KIND_LOCAL6LOCAL values are persisted by the client (for example, in IndexedDB) and are not persisted in the Sirloin session. The action is still sent to Sirloin, which applies the declared transition and remains authoritative for the current stage and visited-stage history.

CharacterActionRole

NameNumberDescription
CHARACTER_ACTION_ROLE_UNSPECIFIED0
CHARACTER_ACTION_ROLE_PRIMARY1
CHARACTER_ACTION_ROLE_SECONDARY2
CHARACTER_ACTION_ROLE_CHOICE3
CHARACTER_ACTION_ROLE_BACK4
CHARACTER_ACTION_ROLE_AUTOMATIC5

CharacterControlKind

NameNumberDescription
CHARACTER_CONTROL_KIND_UNSPECIFIED0
CHARACTER_CONTROL_KIND_OPTION_GRID1
CHARACTER_CONTROL_KIND_CHIPS2
CHARACTER_CONTROL_KIND_COLOR_PICKER3
CHARACTER_CONTROL_KIND_MULTI_SELECT4
CHARACTER_CONTROL_KIND_TEXT5
CHARACTER_CONTROL_KIND_MEDIA_UPLOAD6

CharacterEntitlementKind

NameNumberDescription
CHARACTER_ENTITLEMENT_KIND_UNSPECIFIED0
CHARACTER_ENTITLEMENT_KIND_ACTIVE_SUBSCRIPTION1

CharacterStageContentKind

NameNumberDescription
CHARACTER_STAGE_CONTENT_KIND_UNSPECIFIED0
CHARACTER_STAGE_CONTENT_KIND_TEXT1
CHARACTER_STAGE_CONTENT_KIND_NOTICE2
CHARACTER_STAGE_CONTENT_KIND_MEDIA3

CharacterStageKind

NameNumberDescription
CHARACTER_STAGE_KIND_UNSPECIFIED0
CHARACTER_STAGE_KIND_FORM1
CHARACTER_STAGE_KIND_UPLOAD2
CHARACTER_STAGE_KIND_REVIEW3
CHARACTER_STAGE_KIND_ASSET_PICKER4
CHARACTER_STAGE_KIND_CONFIRMATION5
CHARACTER_STAGE_KIND_STATUS6

CharacterTransitionKind

NameNumberDescription
CHARACTER_TRANSITION_KIND_UNSPECIFIED0
CHARACTER_TRANSITION_KIND_STAY1
CHARACTER_TRANSITION_KIND_NEXT2
CHARACTER_TRANSITION_KIND_BACK3
CHARACTER_TRANSITION_KIND_STAGE4

Top

sirloin/v5/character_recipe.proto

CharacterRecipeRoute

FieldTypeLabelDescription
route_keystring
revisionint64
active_versionCharacterRecipeVersion
draftCharacterRecipeVersionoptional
published_versionsCharacterRecipeVersionrepeated
updated_atgoogle.protobuf.Timestamp

CharacterRecipeValidationIssue

FieldTypeLabelDescription
pathstring
codestring
messagestring

CharacterRecipeVersion

FieldTypeLabelDescription
version_idstring
recipe_keystring
versionint64
revisionint64
statusCharacterRecipeVersionStatus
recipetbone.v1.CharacterRecipe
canonical_jsonbytes
digestbytes
validation_issuesCharacterRecipeValidationIssuerepeated
created_atgoogle.protobuf.Timestamp
published_atgoogle.protobuf.Timestampoptional

DeleteCharacterRecipeDraftRequest

FieldTypeLabelDescription
metadataRequestMetadata
route_keystring
draft_idstring
expected_draft_revisionint64
account_idstring
actor_idstring

DeleteCharacterRecipeDraftResponse

FieldTypeLabelDescription
replayedbool

GetCharacterRecipeRequest

FieldTypeLabelDescription
route_keystring
version_idstring
include_editor_stateboolAdmin-gated recipe tooling may request draft and unpublished state.

GetCharacterRecipeResponse

FieldTypeLabelDescription
routeCharacterRecipeRoute
versionCharacterRecipeVersion

ListCharacterRecipesRequest

FieldTypeLabelDescription
include_editor_stateboolAdmin-gated recipe tooling may request draft and unpublished state.

ListCharacterRecipesResponse

FieldTypeLabelDescription
routesCharacterRecipeRouterepeated

PublishCharacterRecipeRequest

FieldTypeLabelDescription
metadataRequestMetadata
route_keystring
draft_idstring
expected_draft_revisionint64
expected_route_revisionint64
account_idstring
actor_idstring

PublishCharacterRecipeResponse

FieldTypeLabelDescription
routeCharacterRecipeRoute
replayedbool

PutCharacterRecipeDraftRequest

FieldTypeLabelDescription
metadataRequestMetadata
route_keystring
recipe_jsonbytes
account_idstring
actor_idstring

PutCharacterRecipeDraftResponse

FieldTypeLabelDescription
draftCharacterRecipeVersion
replayedbool

RollbackCharacterRecipeRouteRequest

FieldTypeLabelDescription
metadataRequestMetadata
route_keystring
target_version_idstring
expected_route_revisionint64
account_idstring
actor_idstring

RollbackCharacterRecipeRouteResponse

FieldTypeLabelDescription
routeCharacterRecipeRoute
replayedbool

CharacterRecipeVersionStatus

NameNumberDescription
CHARACTER_RECIPE_VERSION_STATUS_UNSPECIFIED0
CHARACTER_RECIPE_VERSION_STATUS_DRAFT1
CHARACTER_RECIPE_VERSION_STATUS_PUBLISHED2

CharacterRecipeService

CharacterRecipeService stores T-Bone-authored drafts and immutable published recipes. Callers are trusted services on the private gRPC mesh.

Method NameRequest TypeResponse TypeDescription
GetCharacterRecipeGetCharacterRecipeRequestGetCharacterRecipeResponse
ListCharacterRecipesListCharacterRecipesRequestListCharacterRecipesResponse
PutCharacterRecipeDraftPutCharacterRecipeDraftRequestPutCharacterRecipeDraftResponse
DeleteCharacterRecipeDraftDeleteCharacterRecipeDraftRequestDeleteCharacterRecipeDraftResponse
PublishCharacterRecipePublishCharacterRecipeRequestPublishCharacterRecipeResponse
RollbackCharacterRecipeRouteRollbackCharacterRecipeRouteRequestRollbackCharacterRecipeRouteResponse

Top

sirloin/v5/character_session.proto

ApplyCharacterSessionActionRequest

FieldTypeLabelDescription
metadataRequestMetadata
character_idstring
action_idstring
valuesCharacterSessionValuesInput
prepare_uploadCharacterUploadPrepareInput
finalize_uploadCharacterUploadFinalizeInput
selectionCharacterAssetSelectionInput
user_idstring

ApplyCharacterSessionActionResponse

FieldTypeLabelDescription
sessionCharacterSession
operationCharacterSessionOperationoptional
replayedbool

CharacterAssetSelectionInput

CharacterAssetSelectionInput remains recipe-neutral: the recipe result names the group while Sirloin verifies every selected asset binding.

FieldTypeLabelDescription
group_keystring
asset_idsstringrepeated

CharacterSession

FieldTypeLabelDescription
character_idstring
statusCharacterSessionStatus
route_keystring
pinned_route_revisionint64
pinned_recipeCharacterRecipeVersion
current_stage_idstring
values_jsonbytes
result_jsonbytes
revisionint64
created_atgoogle.protobuf.Timestamp
updated_atgoogle.protobuf.Timestamp
assetsCharacterAssetReferencerepeated
failure_reason_codestringoptionalSafe machine-readable failure or terminal reason (e.g. “runtime_failed” or “user_discarded”). Cleared when an execution successfully resumes an interactive session. Never carries raw provider/debug text.
actionsCharacterSessionActionrepeated

CharacterSessionAction

FieldTypeLabelDescription
action_idstring
availablebool
unavailable_reasonstringoptional

CharacterSessionOperation

FieldTypeLabelDescription
operation_idstring
kindstring
statusCharacterOperationStatus
safe_result_jsonbytes
uploadCharacterUploadTicketoptional
execution_idstringoptional

CharacterSessionValuesInput

CharacterSessionValuesInput is used by recipe-defined form actions. Sirloin accepts only fields referenced by the pinned action’s declared bindings.

FieldTypeLabelDescription
values_jsonbytes

CharacterUploadFinalizeInput

CharacterUploadFinalizeInput identifies a previously prepared asset. The service downloads and measures the object before storage accepts it.

FieldTypeLabelDescription
asset_idstring

CharacterUploadPrepareInput

CharacterUploadPrepareInput starts a bounded upload for one media field in the pinned current stage. Declared metadata is re-verified on finalize.

FieldTypeLabelDescription
field_keystring
content_typestring
byte_sizeint64
content_digestbytesoptional

CharacterUploadTicket

FieldTypeLabelDescription
asset_idstring
field_keystring
upload_urlstring
content_typestring
byte_sizeint64
expires_atgoogle.protobuf.Timestamp

DiscardCharacterSessionRequest

FieldTypeLabelDescription
metadataRequestMetadata
character_idstring
user_idstring

DiscardCharacterSessionResponse

FieldTypeLabelDescription
sessionCharacterSession
replayedbool

GetCharacterSessionRequest

FieldTypeLabelDescription
character_idstring
user_idstring

GetCharacterSessionResponse

FieldTypeLabelDescription
sessionCharacterSession
operationCharacterSessionOperationoptional
execution_redispatchedbool

StartCharacterSessionRequest

FieldTypeLabelDescription
metadataRequestMetadata
route_keystring
user_idstring

StartCharacterSessionResponse

FieldTypeLabelDescription
sessionCharacterSession
replayedbool

CharacterSessionStatus

NameNumberDescription
CHARACTER_SESSION_STATUS_UNSPECIFIED0
CHARACTER_SESSION_STATUS_ACTIVE1
CHARACTER_SESSION_STATUS_RUNNING2
CHARACTER_SESSION_STATUS_COMPLETED3
CHARACTER_SESSION_STATUS_FAILED4

CharacterSessionService

CharacterSessionService drives every recipe-defined creation flow through the same durable character-backed session surface.

Method NameRequest TypeResponse TypeDescription
StartCharacterSessionStartCharacterSessionRequestStartCharacterSessionResponse
GetCharacterSessionGetCharacterSessionRequestGetCharacterSessionResponse
ApplyCharacterSessionActionApplyCharacterSessionActionRequestApplyCharacterSessionActionResponse
DiscardCharacterSessionDiscardCharacterSessionRequestDiscardCharacterSessionResponse

Top

sirloin/v5/character_projection.proto

ApplyCharacterMutationRequest

FieldTypeLabelDescription
metadataRequestMetadata
character_idstring
action_idstring
input_jsonbytes
user_idstring
management_recipe_version_idstring
management_recipe_digestbytes
management_route_revisionint64

ApplyCharacterMutationResponse

FieldTypeLabelDescription
projectionCharacterProjection
replayedbool

CharacterManagementSectionView

FieldTypeLabelDescription
section_idstring
availablebool
unavailable_reasonstringoptional
summary_valuesstringrepeated
summary_textstring
statusCharacterManagementSectionStatus

CharacterProjection

FieldTypeLabelDescription
character_idstring
lifecycleCharacterLifecycle
revisionint64
recipe_version_idstring
recipe_digestbytes
schema_values_jsonbytes
assetsCharacterAssetReferencerepeated
recipeCharacterRecipeVersion
capabilitiesCharacterCapabilityLayerrepeatedThe capability axis, ordered by key. Absent means no capability is enabled.
adult_enabledboolThe adult capability’s compliance columns, written by CharacterCapabilityService. adult_enabled holds the per-identity slot and stays true while a suspension withholds the capability, so read capabilities[adult].enabled to decide whether 18+ may be used.
identity_anchorstringoptional
selfie_reset_countuint32
management_recipeCharacterRecipeVersion
management_route_revisionint64
management_sectionsCharacterManagementSectionViewrepeated

GetCharacterProjectionRequest

FieldTypeLabelDescription
character_idstring
user_idstring

GetCharacterProjectionResponse

FieldTypeLabelDescription
projectionCharacterProjection

ListCharacterRosterProjectionRequest

FieldTypeLabelDescription
user_idstring

ListCharacterRosterProjectionResponse

FieldTypeLabelDescription
charactersCharacterProjectionrepeated
active_sessionCharacterSessionoptional
completed_session_counts_by_route_keyListCharacterRosterProjectionResponse.CompletedSessionCountsByRouteKeyEntryrepeatedLifetime completed-session counts for this account, keyed by recipe route. Zero-count routes are omitted; hidden and soft-deleted characters still count.
recipes_by_version_idListCharacterRosterProjectionResponse.RecipesByVersionIdEntryrepeatedCanonical pinned recipes, deduplicated across roster entries and keyed by CharacterProjection.recipe_version_id.

ListCharacterRosterProjectionResponse.CompletedSessionCountsByRouteKeyEntry

FieldTypeLabelDescription
keystring
valueuint32

ListCharacterRosterProjectionResponse.RecipesByVersionIdEntry

FieldTypeLabelDescription
keystring
valueCharacterRecipeVersion

CharacterManagementSectionStatus

NameNumberDescription
CHARACTER_MANAGEMENT_SECTION_STATUS_UNSPECIFIED0
CHARACTER_MANAGEMENT_SECTION_STATUS_READY1
CHARACTER_MANAGEMENT_SECTION_STATUS_EMPTY2
CHARACTER_MANAGEMENT_SECTION_STATUS_UNAVAILABLE3

CharacterProjectionService

Method NameRequest TypeResponse TypeDescription
GetCharacterProjectionGetCharacterProjectionRequestGetCharacterProjectionResponse
ListCharacterRosterListCharacterRosterProjectionRequestListCharacterRosterProjectionResponse
ApplyCharacterMutationApplyCharacterMutationRequestApplyCharacterMutationResponse

Top

sirloin/v5/sirloin.proto

AddMediaToCollectionRequest

FieldTypeLabelDescription
user_idstring
collection_idstring
media_idsstringrepeated

AddMediaToCollectionResponse

Character

Character contains the details of a character.

FieldTypeLabelDescription
character_idstring
character_namestringoptional
character_genderGender
character_typeCharacterType
character_instagram_handlestringoptional
character_twitter_handlestringoptional
character_statusCharacterStatus
character_image_urlstringoptional
character_reference_triggered_atstringoptional
character_filterCharacterImageFilteroptional
character_hair_colorstringoptional
character_hair_lengthstringoptional
character_hair_stylestringoptional
character_model_strictnessint32optional
character_dataset_imagesCharacterDatasetImagerepeated
character_model_strictness_levelsint32repeated
character_body_typestringoptional
character_is_tattoosbooloptional
character_is_bblbooloptional
character_is_flirtybooloptional
character_is_glassesbooloptional
character_feedbackstringoptional
character_is_verifiedbooloptional
character_model_typeCharacterModelType
is_nsfwbool
character_images_availableint32optional
character_videos_availableint32optional
character_last_used_atstringoptional
selected_pack_idstringoptional
selected_example_idstringoptional
requested_welcome_images_countint32
welcome_eligiblebool
character_foxy_handlestringoptional
is_custom_vibool
custom_vi_evidence_pathsstringrepeated
another_social_profilestringoptional
creation_sourcestringoptional

CharacterDatasetImage

FieldTypeLabelDescription
pathstring
urlstring
checkedbool
failure_reasonCharacterDatasetImageFailureReasonrepeated
warning_reasonCharacterDatasetImageFailureReasonrepeated
path_finalstring
statusCharacterDatasetImageStatus
manual_review_eligiblebool
reference_dataset_image_idstring
rejection_reasonCharacterLikenessRejectionReason
rejection_notestring

Collection

Collection is a user-owned, named grouping of media items (FOXY-363).

FieldTypeLabelDescription
collection_idstring
user_idstring
namestring
descriptionstringoptional
is_publicbool
created_atstring
updated_atstring
media_countint32media_count is the number of media items in the collection.
cover_urlstringoptionalcover_url is a preview image (the most recently added item), if any.

CompleteWorkflowMediaRequest

FieldTypeLabelDescription
parent_media_idstringVisible parent media row created when the generation request started.
execution_idstringWorkflow execution ID returned at dispatch time; used for idempotency and correlation with the parent media row.
workflow_namestringWorkflow storage name expected on the parent media row.
statusWorkflowMediaCompletionStatusFinal workflow status; succeeded requires at least one output.
outputsWorkflowMediaOutputrepeatedGenerated media outputs to materialize as child rows after completion.
errorstringFailure detail for diagnostics when status is failed.

CompleteWorkflowMediaResponse

ContentDumpAvailability

How much of one media type the pool could actually supply.

Per type because the shortfall is reported per type (“only 7 new photos left”); a single total cannot say which type came up short.

FieldTypeLabelDescription
media_typeMediaType
requestedint32
availableint32
searchContentDumpSearchHow the search for this media type went. Sirloin logs the same numbers server-side; they travel so a client can say why a dump came up short in its own console, where the person seeing the thin result is looking.

Diagnostic only — nothing here changes what is offered or charged. |

ContentDumpPick

One example a dump would run, with what it will cost.

An id rather than the example itself: the dump never shows a user its picks, and dispatch re-reads each row from this id, so serialising the example here would be work discarded on every keystroke of a debounced quote.

FieldTypeLabelDescription
example_idstring
costint32
media_typeMediaType

ContentDumpSearch

What one media type’s pool walk cost and found. A short result has several causes that look identical from outside: the categories hold nothing recent, the user has already been given everything in them, or the examples exist but cannot be dispatched. These separate them.

FieldTypeLabelDescription
weeks_reachedint32How far back the window had to open. Hitting the 52-week cap means the search ran out of road rather than out of appetite.
examples_scannedint32How far down the ranking the search read inside that window — the number of top-ranked examples the last query asked for, not a rung number. 50 means it read the top 50 and stopped; 200 means it went four times deeper looking for something usable.
queriesint32Database round trips the walk cost.
consideredint32Every distinct candidate seen, before the dispatchability check.
undispatchableint32How many of those dispatch would have refused. A large number here with a small result means the pool is there but unusable — a content problem rather than a thin one.
already_dumpedint32Examples withheld because this user already received them from a dump.

CopyReferenceDatasetImageRequest

CopyReferenceDatasetImageRequest carries the source path of an existing dataset image and the character it should be copied into.

FieldTypeLabelDescription
user_idstring
source_pathstring
target_character_idstring

CopyReferenceDatasetImageResponse

CopyReferenceDatasetImageResponse returns the new collection path on the target character. The caller is expected to follow up with VerifyCharacterReferenceDatasetImage on this path.

FieldTypeLabelDescription
target_pathstring

CreateCharacterRequest

CreateCharacterRequest contains the user_id of the user and the character details.

FieldTypeLabelDescription
user_idstring
genderGender
character_namestringoptional
character_instagram_handlestringoptional
character_twitter_handlestringoptional
character_reference_idstringoptional
character_model_typeCharacterModelTypeoptionalDeprecated. Deprecated: Defaults to kitsune.
selected_pack_idstringoptional
selected_example_idstringoptional
is_nsfwbool
character_foxy_handlestringoptional
is_custom_vibool

CreateCharacterResponse

CreateCharacterResponse is returned when a character is created.

FieldTypeLabelDescription
character_idstring

CreateCollectionRequest

FieldTypeLabelDescription
user_idstring
namestring
descriptionstringoptional
is_publicbool

CreateCollectionResponse

FieldTypeLabelDescription
collectionCollection

CreateMediaInputUploadRequest

FieldTypeLabelDescription
user_idstringUser that owns the hidden input media record.
character_idstringCharacter the eventual workflow generation belongs to.
media_typeMediaTypeType of input media to upload; currently image or video.
mime_typestringClient-provided MIME type used to validate the upload and choose extension.
file_namestringOriginal file name for diagnostics; storage paths are generated server-side.
catalog_item_idstringGeneration catalog item whose input contract requested this upload.
input_keystringNormalized workflow input key this upload will satisfy.

CreateMediaInputUploadResponse

FieldTypeLabelDescription
media_idstringHidden media.media ID to pass in GenerateMedia.generation_input_media after the client PUT succeeds. The row is not marked AVAILABLE until GenerateMedia confirms the object exists in storage.
upload_urlstringPresigned S3 PUT URL where the client uploads the input bytes.
object_pathstringDurable S3 object key persisted on the hidden media row for replay.

DeleteCharacterReferenceDatasetImageRequest

DeleteCharacterReferenceDatasetImageRequest contains the user_id, character_id, and path of the reference dataset image to delete.

FieldTypeLabelDescription
user_idstring
character_idstring
pathstring

DeleteCharacterReferenceDatasetImageResponse

DeleteCharacterReferenceDatasetImageResponse is returned when the reference dataset image is deleted.

DeleteCharacterRequest

DeleteCharacterRequest contains the user_id and character_id of the character to delete.

FieldTypeLabelDescription
user_idstring
character_idstring

DeleteCharacterResponse

DeleteCharacterResponse is returned when a character is deleted.

DeleteCollectionRequest

FieldTypeLabelDescription
user_idstring
collection_idstring

DeleteCollectionResponse

GenerateMediaBatchItemResult

Outcome of one example in a batch. ok false is an expected result, not a transport error: the example could not start (unresolvable workflow, insufficient credits, past-due payment) while the rest of the batch ran.

FieldTypeLabelDescription
example_idstring
okbool
errorstringStable, client-safe reason when ok is false. Never carries upstream detail.
mediaMediarepeatedMedia rows created for this example. Empty when ok is false.

GenerateMediaBatchRequest

FieldTypeLabelDescription
user_idstringOwner of the generations and of the character.
character_idstringCharacter every example in the batch generates for.
example_idstringrepeatedExamples to run, in the order the caller wants them reported back.
batch_idstringoptionalGroups the resulting media rows. See GenerateMediaRequest.batch_id.
generation_surfaceGenerationSurfaceoptionalMarks every row this batch creates. See GenerateMediaRequest.generation_surface — set once here rather than per item, since a batch comes from exactly one surface.

GenerateMediaBatchResponse

FieldTypeLabelDescription
resultsGenerateMediaBatchItemResultrepeatedOne entry per requested example, in request order.

GenerateMediaRequest

GenerateMediaRequest contains the user_id, character_id, and optional media_pack_id and custom_text.

FieldTypeLabelDescription
user_idstring
character_idstring
custom_textstringoptional
example_idstringoptional
video_durationint32optionalDuration in seconds for video media
source_media_idstringoptional
video_promptstringoptionalPrompt for video generation
countint32optionalNumber of media items to generate, defaults to 1
aspect_ratioAspectRatiooptional
with_audiobooloptionalIf true, the media will have audio
is_nsfwbooloptionalWhether the generated media should be NSFW
media_typeMediaTypeoptionalType of media to generate
workflow_namestringoptionalWorkflow name for pricing + dispatch (internal only)
generation_catalog_idstringoptionalApp-facing catalog item ID for workflow-backed generation. Sirloin resolves this to workflow_name so clients do not depend on workflow storage names.
generation_inputs_jsonstringoptionalJSON object of scalar workflow inputs keyed by normalized contract input name. Sirloin merges hidden upload references into this object.
generation_input_mediaGenerationInputMediarepeatedHidden uploaded media inputs created by CreateMediaInputUpload and passed into the workflow execution payload. Sirloin verifies each hidden upload exists in storage before marking it AVAILABLE and dispatching generation.
generation_axesGenerationCatalogAxisValuerepeatedSelected axis tuple for faceted catalog items. Sirloin resolves generation_catalog_id (the family id) plus these axes to a single workflow_name before dispatch.
batch_idstringoptionalGroups the media rows produced by one multi-select submit, so a batch can be reassembled from the rows themselves instead of inferred from insert timestamps. Absent on single generations.

Must be a UUID: it is stored in a uuid column, and a malformed or nil value is logged and dropped rather than rejected, since losing the grouping must not cost the caller its generation. Sirloin resolves it against nothing — it only has to be unique per submit. | | generation_surface | GenerationSurface | optional | Which surface asked for this generation, when that is not an ordinary create flow. Recorded on the media row so a surface can be excluded from popularity rankings and counted afterwards.

Deliberately not folded into request_tier: that field carries the billing plan and is matched by substring in the worker throttle, so a surface marker inside it would silently change concurrency limits. |

GenerateMediaResponse

GenerateMediaResponse contains the media_id and media_estimated_wait_time.

FieldTypeLabelDescription
mediaMediarepeated

GenerationCatalogAxis

GenerationCatalogAxis is a family-level filter/identifier.

FieldTypeLabelDescription
keystringAxis key, e.g. “character_image_model” or “is_nsfw”.
display_namestringUser-facing label for the axis control.
control_kindGenerationCatalogAxisControlKindHow clients should render the axis control.
optionsGenerationCatalogAxisOptionrepeatedSelectable values in display order.
default_valuestringValue preselected when the family loads.

GenerationCatalogAxisOption

GenerationCatalogAxisOption is one selectable value of an axis.

FieldTypeLabelDescription
valuestringCanonical axis value, e.g. “likeness”.
display_namestringUser-facing label for the option.
availableboolFalse when no variant covers this value (a grid hole).
unavailable_reasonsstringrepeatedReasons this option is present but not selectable.
descriptionstringOne-line description shown under the option name.
nsfw_descriptionstringoptionalNSFW-mode variant of description. Clients show it instead of description while the family’s is_nsfw axis is selected “true”; unset means no NSFW-specific copy and description applies in both modes.

GenerationCatalogAxisValue

GenerationCatalogAxisValue is one (axis_key, value) pair.

FieldTypeLabelDescription
axis_keystring
valuestring

GenerationCatalogItem

FieldTypeLabelDescription
idstringStable Sirloin catalog item ID used by GenerateMedia.
namestringInternal workflow storage name, included for operator diagnostics.
display_namestringUser-facing generation mode label derived from the published workflow.
descriptionstringUser-facing workflow description when provided by workflow authors.
contract_jsonstringNormalized media-generation contract JSON with renderable inputs, outputs, compatibility flags, and warnings derived from the published workflow.
availableboolTrue when Sirloin can dispatch and app clients can render the contract.
unavailable_reasonsstringrepeatedReasons the workflow is published but unavailable in app generation UIs.
priceGenerationCatalogPriceWorkflow-defined price with Sirloin fallback defaults filled in.
axesGenerationCatalogAxisrepeatedFamily-level filter/identifier axes for faceted selection. Empty for singleton (non-faceted) catalog items.
variantsGenerationCatalogVariantrepeatedConcrete workflow variants addressed by an axis tuple. Empty for singletons.
is_nsfwbooloptionalServer-resolved 18+ rating derived from the workflow’s explicitness level. Meaningful for singleton items (no variants); faceted items carry the rating per variant. Authoritative over any client-side axis derivation. Optional so clients can distinguish unset (older server) from false and fall back to axis derivation.
show_on_create_pageboolFennec-authored switch for whether the create page shows this family’s feature tile. Display-only and pass-through: Sirloin never filters on it, a hidden family still resolves and dispatches, and unpublishing the family remains the hard kill switch. Only the newer create-page surfaces read it.

GenerationCatalogPrice

FieldTypeLabelDescription
base_priceint32Base credit cost. A workflow is wholly SFW or NSFW, so this already reflects the rating (no NSFW multiplier). Final cost: image = base_price, video = base_price × duration(s), carousel = base_price × carousel size.

GenerationCatalogVariant

GenerationCatalogVariant is a family plus an axis tuple resolving to one concrete workflow.

FieldTypeLabelDescription
axis_valuesGenerationCatalogAxisValuerepeatedThe axis tuple that selects this variant.
contract_jsonstringNormalized media-generation contract JSON with axis keys already stripped.
availableboolTrue when Sirloin can dispatch and clients can render this variant.
unavailable_reasonsstringrepeatedReasons this variant is published but unavailable.
priceGenerationCatalogPriceWorkflow-defined price for this variant.
workflow_namestringConcrete brain workflow name this variant resolves to. Lets a client map a standalone example (authored with no family_key) back to its workflow’s contract even when the catalog collapsed that workflow into this family, so the example can dispatch the concrete workflow by name (empty axes).
is_nsfwbooloptionalServer-resolved 18+ rating derived from the member workflow’s explicitness level. Authoritative over the is_nsfw axis value: it stays correct even for families with no is_nsfw axis (e.g. all-NSFW families). Optional so clients can distinguish unset (older server) from false and fall back to axis derivation.

GenerationInputMedia

FieldTypeLabelDescription
input_keystringNormalized workflow contract input key this media should satisfy.
media_idstringHidden media.media ID returned by CreateMediaInputUpload. GenerateMedia fails precondition if the referenced upload object is not present in storage yet.
media_typeMediaTypeMedia type of the uploaded input; currently image or video.

GetCharacterReferenceDatasetUploadURLsRequest

GetCharacterReferenceDatasetUploadURLsRequest contains the user_id and character_id of the character to get signed URLs for.

FieldTypeLabelDescription
user_idstring
character_idstring
prefixstring
amountint32optional
prefixesstringrepeatedOptional prefixes for multiple images

GetCharacterReferenceDatasetUploadURLsResponse

GetCharacterReferenceDatasetUploadURLsResponse contains the signed URLs to upload reference dataset images.

FieldTypeLabelDescription
character_dataset_imagesCharacterDatasetImagerepeated

GetCharacterReferenceImageUploadURLRequest

GetCharacterReferenceImageUploadURLRequest contains the user_id and character_id of the character to get a signed URL for.

FieldTypeLabelDescription
user_idstring
character_idstring

GetCharacterReferenceImageUploadURLResponse

GetCharacterReferenceImageUploadURLResponse contains the signed URL to upload a reference image.

FieldTypeLabelDescription
character_reference_image_upload_urlstring

GetCustomViEvidenceUploadURLRequest

GetCustomViEvidenceUploadURLRequest carries the user, target character, and the file extension to suffix the generated object key with.

FieldTypeLabelDescription
user_idstring
character_idstring
file_extensionstringFile extension without leading dot (e.g. “png”, “pdf”).

GetCustomViEvidenceUploadURLResponse

GetCustomViEvidenceUploadURLResponse returns the presigned PUT URL and the fully-qualified object path the FE should later attach to the character.

FieldTypeLabelDescription
upload_urlstring
pathstring

GetInstagramProfileRequest

GetInstagramProfileRequest contains the Instagram handle to look up.

FieldTypeLabelDescription
handlestring

GetInstagramProfileResponse

GetInstagramProfileResponse contains the public Instagram profile data.

FieldTypeLabelDescription
display_namestring
profile_image_base64string
is_privatebool

GetShopCharacterRequest

FieldTypeLabelDescription
character_idstring
user_idstring

GetShopCharacterResponse

FieldTypeLabelDescription
characterShopCharacter
recommended_charactersShopCharacterrepeated

GetUserProfileRequest

FieldTypeLabelDescription
user_idstring

GetUserProfileResponse

FieldTypeLabelDescription
profileUserProfile

ListAllMediaRequest

ListAllMediaRequest lists all of a user’s media across every character. Mirrors ListMediaRequest minus character_id (cross-character gallery).

FieldTypeLabelDescription
user_idstring
media_idsstringrepeated
media_statusesMediaStatusrepeated
pageint32
limitint32
filterListMediaFilter
skip_totalbool
collection_idstringoptionalcollection_id, when set, restricts results to the media in that collection (FOXY-363). The collection must belong to the requesting user.
character_idstringoptionalcharacter_id, when set, restricts results to a single character — the cross-character gallery’s “Characters” filter (FOXY-360).

ListAvailableCharactersRequest

FieldTypeLabelDescription
cursorstring
limitint32
searchstring
sort_byShopCharacterSortBy
sort_directionShopSortDirection
ethnicity_filterstringrepeated
body_type_filterstringrepeated
hair_color_filterstringrepeated
eye_color_filterstringrepeated
breast_size_filterstringrepeated
gender_filterGenderrepeated
price_tier_minint32optional
price_tier_maxint32optional
hair_style_filterstringrepeated
hair_length_filterstringrepeated
age_minint32optional
age_maxint32optional
is_tattoosbooloptional
is_bblbooloptional
is_glassesbooloptional
user_idstring

ListAvailableCharactersResponse

FieldTypeLabelDescription
charactersShopCharacterrepeated
next_cursorstring
has_morebool

ListCharactersFilter

ListCharactersFilter contains optional filters for listing characters.

FieldTypeLabelDescription
idstringoptionalFilter by character id

ListCharactersRequest

ListCharactersRequest contains the user_id of the user.

FieldTypeLabelDescription
user_idstring
filterListCharactersFilter

ListCharactersResponse

ListCharactersResponse contains a list of characters for the user.

FieldTypeLabelDescription
charactersCharacterrepeated

ListCollectionsRequest

FieldTypeLabelDescription
user_idstring

ListCollectionsResponse

FieldTypeLabelDescription
collectionsCollectionrepeated

ListGenerationCatalogRequest

FieldTypeLabelDescription
user_idstringUser whose available generation catalog should be listed.

ListGenerationCatalogResponse

FieldTypeLabelDescription
itemsGenerationCatalogItemrepeatedPublished workflow-backed generation modes, including unavailable entries so clients can render disabled choices with reasons.

ListMediaExamplesRequest

FieldTypeLabelDescription
user_idstring
filterListMediaExamplesRequestFilteroptional
pageint32
limitint32

ListMediaExamplesRequestFilter

FieldTypeLabelDescription
searchstringoptional
media_typeMediaTypeoptional
media_tag_idstringrepeated
kitsune_onlybooloptionalIf true, only return Kitsune media examples
welcome_onlybooloptionalIf true, only return welcome examples and tags
nsfw_disabledbooloptionalIf true, exclude NSFW examples even if user has KYC
media_example_idstringoptionalIf set, return only the example with this id

ListMediaExamplesResponse

FieldTypeLabelDescription
examplesMediaExamplerepeated
tagsMediaTagrepeated
packsMediaPackrepeated
totalint32

ListMediaFilter

FieldTypeLabelDescription
orderMediaOrder
date_fromstringHalf-open created_at range [date_from, date_to), RFC3339. Empty = no bound.
date_tostring
display_typeMediaDisplayType
text_searchstring
media_typeMediaTypeoptional
exclude_nsfwbooloptionalexclude_nsfw drops 18+ rows from the result set. Applied in SQL so paging stays correct: a client that filtered the page it received would return short pages and eventually skip rows. Unset = no rating filter (legacy).

ListMediaRequest

ListMediaRequest contains the user_id, character_id, and optional page, limit, and filter.

FieldTypeLabelDescription
user_idstring
character_idstring
media_idsstringrepeated
media_statusesMediaStatusrepeated
pageint32
limitint32
filterListMediaFilter
skip_totalboolskip_total opts out of the expensive COUNT(*) on the hot path. When set, the response omits total (left at 0) and relies on has_more for pagination.

ListMediaResponse

ListMediaResponse contains a list of available and pending media for the character.

FieldTypeLabelDescription
mediaMediarepeated
totalint32
has_moreboolhas_more indicates whether more media exist beyond the current page. Always populated; preferred over total when skip_total is set on the request.

ListMediaTagsRequest

FieldTypeLabelDescription
user_idstring
media_typeMediaTypeA category is listed when it holds content of the type asked for, so this is what decides whether a video-only category appears at all. Exactly one of media_type or media_types must be set.
nsfw_disabledbool
media_typesMediaTyperepeatedFor surfaces that offer several media types at once: a category is listed when it holds content of ANY of them. A dump takes photos, videos and carousels in one submit, so asking per type would hide each type’s categories from the other two.

ListMediaTagsResponse

FieldTypeLabelDescription
tagsMediaTagrepeated

Media

Media contains the details of a media.

FieldTypeLabelDescription
media_idstring
media_typeMediaType
media_created_atstring
media_image_urlstring
media_video_urlstring
media_thumbnail_urlstring
media_video_preview_urlstring
media_custom_textstringoptional
media_estimated_wait_timeint32optional
media_generation_started_atstringoptional
media_statusMediaStatus
media_is_favoritebool
media_is_archivedbool
media_feedbackstringoptional
media_example_idstringoptional
media_source_idstringoptionalID of the source media, if any
media_video_promptstringoptionalPrompt for video generation
media_source_urlstringoptionalURL of the source media, if any
media_is_eligible_for_free_editbool
media_aspect_ratioAspectRatio
media_has_audioboolIf true, the media has audio
media_is_nsfwboolWhether the media is NSFW
media_carousel_itemsMediarepeatedIf carousel, ordered items (first is main)
media_controlsMediaExampleControls
media_failure_reasonMediaFailureReason
media_character_idstringoptionalCharacter context for the cross-character gallery (ListAllMedia). The id is always set; name/foxy_handle are populated when the character relation is loaded (FOXY-372/360).
media_character_namestringoptional
media_character_foxy_handlestringoptional
media_workflow_namestringoptional
media_source_is_inputboolTrue when this media’s source row is a hidden generation input upload (INTERNAL_INPUT scope) rather than a real gallery original. Lets clients tell “I was edited from that picture” apart from “I was generated using an upload the user never sees”, which otherwise look identical because both populate media_source_id and media_source_url.
media_family_keystringoptionalThe generation-catalog family this media was dispatched through (faceted dispatch only). Recorded at create time so gallery re-use can reopen the same product surface even after the family’s member workflows change — deriving it from media_workflow_name breaks the moment a family swaps members.

MediaExample

FieldTypeLabelDescription
media_example_idstring
media_example_typestring
media_typeMediaType
media_image_urlstring
media_video_urlstring
media_video_thumbnail_urlstring
media_video_preview_urlstring
media_custom_textstring
media_locationstring
media_tagsstringrepeated
character_model_typesCharacterModelTyperepeated
media_aspect_ratioAspectRatio
media_explicitness_levelMediaExplicitnessLevel
media_image_urlsstringrepeated
media_controlsMediaExampleControls
workflow_namestringoptional
family_keystringoptional
workflow_contractstringoptionalJSON: sirloin-derived MediaGenerationContract ({ inputs, outputs, compatibility }), same shape as GenerationCatalogItem.contract_json.
workflow_base_priceint32optionalDerived from the workflow pricing block.
source_variantstringoptionalJSON: source variant axis tuple (family-backed examples)
input_valuesstringoptionalJSON: workflow trigger inputs the example was generated with
input_overrides_by_workflowstringoptionalJSON: live config-driven flags per workflow the example can run as (own + family members): { [workflowName]: { [inputKey]: { visible, editable } } }.

MediaExampleControls

FieldTypeLabelDescription
durationint32repeated
price_base_multiplierfloat

MediaPack

FieldTypeLabelDescription
pack_idstring
pack_namestring
examplesMediaExamplerepeated

MediaTag

FieldTypeLabelDescription
media_tag_idstring
media_tag_namestring
media_tag_image_urlstring
media_tag_orderint32
media_tag_is_welcomebool
media_tag_parent_idstringSet when this category sits under another one. Explore lists parent-less tags as chips and a parent’s children as subcategory tiles inside it.
media_tag_explicitness_levelMediaExplicitnessLevelThe category’s own rating, so consumers can tell an adult category from a general one directly. Without it the only way to know was to request the catalogue twice — once unfiltered, once SFW-only — and treat the difference as adult, which fails open: a category present in both lists reads as general and silently skips the age gate.
media_tag_has_own_contentboolTrue when examples are tagged on this category itself. A parent that only holds subcategories is false: it is listed as a shelf, but it is not a choice of its own next to the children it contains.
media_tag_is_video_onlyboolTrue when this category is meant for video and holds nothing else. Set in fennec rather than inferred from current inventory, which would flip the moment one stray photo is tagged and says nothing about what the category is for. Surfaces offering more than one media type use it to label the category instead of hiding it.

NudifyReferenceItem

FieldTypeLabelDescription
typestring
pathstring

NudifyReferenceResultItem

FieldTypeLabelDescription
typestring
pathstring
nudified_pathstring

NudifyReferencesRequest

FieldTypeLabelDescription
itemsNudifyReferenceItemrepeatedExactly 3 items; sirloin handler enforces len(items) == 3.
bust_sizestring
genitalia_stylestring
user_idstringSet by brisket from the authenticated session. Sirloin verifies that every item path belongs to a character owned by this user before forwarding to brain so the eventual nudify-results output can’t be a nudification of someone else’s photo.

NudifyReferencesResponse

FieldTypeLabelDescription
itemsNudifyReferenceResultItemrepeated

PreviewContentDumpRequest

FieldTypeLabelDescription
user_idstring
character_idstring
tag_idsstringrepeatedThe categories to draw from, required in both modes. A dice roll is expanded to every offered category by the client, so what a roll may draw from lives in one place rather than being duplicated here.

Empty is rejected: it is a client that failed to resolve its categories, not an instruction to pick from everything. | | image_count | int32 | | | | video_count | int32 | | | | carousel_count | int32 | | | | nsfw | bool | | Which pool to draw from. Not the platform’s additive nsfw_disabled: 18+ here means NSFW only, and its absence means NSFW is excluded even for a user entitled to it, so a category dump never returns 18+ content. |

PreviewContentDumpResponse

FieldTypeLabelDescription
picksContentDumpPickrepeated
total_costint32
availabilityContentDumpAvailabilityrepeated
used_tag_idsstringrepeatedWhich of the requested categories actually produced a pick. A dump drawn from several packs can end up taking everything from one of them without saying so — the shortfall is reported per media type, and a pack that contributed nothing looks identical to one that contributed its share.

PurchaseShopCharacterRequest

FieldTypeLabelDescription
user_idstring
reservation_tokenstring

PurchaseShopCharacterResponse

FieldTypeLabelDescription
character_idstring
credits_chargedint32

ReleaseReservationRequest

FieldTypeLabelDescription
reservation_tokenstring
user_idstring

ReleaseReservationResponse

RemoveMediaFromCollectionRequest

FieldTypeLabelDescription
user_idstring
collection_idstring
media_idsstringrepeated

RemoveMediaFromCollectionResponse

RequestCharacterLikenessManualReviewImage

FieldTypeLabelDescription
pathstring
path_finalstringoptional
etagstringoptional

RequestCharacterLikenessManualReviewRequest

FieldTypeLabelDescription
user_idstring
character_idstring
imagesRequestCharacterLikenessManualReviewImagerepeated

RequestCharacterLikenessManualReviewResponse

FieldTypeLabelDescription
resultsRequestCharacterLikenessManualReviewResultrepeated

RequestCharacterLikenessManualReviewResult

FieldTypeLabelDescription
pathstring
statusCharacterDatasetImageStatus
reference_dataset_image_idstring
errorstringoptional

RequestWelcomePicsRequest

FieldTypeLabelDescription
user_idstring
character_idstring

RequestWelcomePicsResponse

FieldTypeLabelDescription
requested_countint32

ReserveCharacterRequest

FieldTypeLabelDescription
user_idstring
character_idstring

ReserveCharacterResponse

FieldTypeLabelDescription
reservation_tokenstring
expires_atstringRFC3339

ResetKYCVerificationRequest

ResetKYCVerificationRequest contains the user_id of the user to reset KYC for.

FieldTypeLabelDescription
user_idstring

ResetKYCVerificationResponse

ResetKYCVerificationResponse is returned when account KYC is reset.

SelectCharacterReferenceCandidateResponse

SelectCharacterReferenceCandidateResponse is returned when a character reference candidate is selected.

SetMediaDownloadedRequest

FieldTypeLabelDescription
user_idstring
media_idstring

SetMediaDownloadedResponse

ShopCharacter

ShopCharacter represents a virtual influencer in the shop catalogue.

FieldTypeLabelDescription
character_idstring
character_namestring
character_genderGender
availability_statusShopCharacterAvailabilityStatus
price_tierint32
ethnicitystring
body_typestring
hair_colorstring
hair_stylestring
hair_lengthstring
eye_colorstring
breast_sizestring
is_tattoosbool
is_bblbool
is_glassesbool
ageint32
catalogue_image_urlsstringrepeated
creditsint32
catalogue_video_urlstringfield 19 removed (was currency)
character_model_typeCharacterModelType
reference_image_urlstring
reserved_by_mebool
is_free_claim_eligiblebool
catalogue_video_thumbnail_urlstring

StartKYCVerificationRequest

StartKYCVerificationRequest contains the user_id of the user to start KYC for.

FieldTypeLabelDescription
user_idstring
character_namestringoptional
character_typeCharacterTypeoptional
purposeKycVerificationPurpose

StartKYCVerificationResponse

StartKYCVerificationResponse contains a verification URL and the verification session ID from the KYC provider.

FieldTypeLabelDescription
verification_urlstring
verification_idstring

SubmitFeedbackRequest

FieldTypeLabelDescription
user_idstring
media_idstring
feedbackstring

SubmitFeedbackResponse

ToggleMediaArchivedRequest

FieldTypeLabelDescription
user_idstring
media_idstring
is_archivedbool

ToggleMediaArchivedResponse

ToggleMediaFavoriteRequest

FieldTypeLabelDescription
user_idstring
media_idstring
is_favoritebool

ToggleMediaFavoriteResponse

TriggerCharacterReferenceImageUploadedRequest

TriggerCharacterReferenceImageUploadedRequest contains the user_id and character_id of the character to trigger processing of the uploaded reference image.

FieldTypeLabelDescription
user_idstring
character_idstring
kyc_image_pathstringoptionalOptional path to KYC image. Temporary until we fetch the image serverside.

TriggerCharacterReferenceImageUploadedResponse

TriggerCharacterReferenceImageUploadedResponse is returned when the processing of the uploaded reference image is triggered.

UpdateCharacterCustomViVerificationRequest

FieldTypeLabelDescription
user_idstring
character_idstring
character_instagram_handlestring
character_twitter_handlestring
another_social_profilestring
creation_sourcestring
custom_vi_evidence_pathsstringrepeatedFull replacement of the character’s evidence paths array. Pass the canonical list the user ended the form with.

UpdateCharacterCustomViVerificationResponse

UpdateCharacterReferenceDatasetImage

UpdateCharacterReferenceDatasetRequest carries updated dataset image metadata.

FieldTypeLabelDescription
image_typestring
path_finalstring
verified_manuallybool
path_rawstring

UpdateCharacterReferenceDatasetRequest

FieldTypeLabelDescription
user_idstring
character_idstring
imagesUpdateCharacterReferenceDatasetImagerepeated

UpdateCharacterReferenceDatasetResponse

UpdateCharacterReferenceDatasetResponse is returned once dataset swap succeeds.

UpdateCharacterRequest

UpdateCharacterRequest contains the user_id, character_id, and updated character details.

FieldTypeLabelDescription
user_idstring
character_idstring
character_namestringoptional
character_instagram_handlestringoptional
character_twitter_handlestringoptional
genderGenderoptional
character_filterCharacterImageFilteroptional
character_hair_colorstringoptional
character_hair_lengthstringoptional
character_hair_stylestringoptional
character_model_strictnessint32optional
character_body_typestringoptional
character_is_tattoosbooloptional
character_is_bblbooloptional
character_is_flirtybooloptional
character_is_glassesbooloptional
character_feedbackstringoptional
character_is_verifiedbooloptionalBypasses verification. Non-Prod only.
selected_pack_idstringoptional
selected_example_idstringoptional
kyc_image_pathstringoptionalOptional path to KYC image. Temporary until we fetch the image serverside.
character_foxy_handlestringoptional

UpdateCharacterResponse

UpdateCharacterResponse is returned when a character is updated.

UpdateCollectionRequest

FieldTypeLabelDescription
user_idstring
collection_idstring
namestringoptionalOnly the provided fields are updated (partial update).
descriptionstringoptional
is_publicbooloptional

UpdateCollectionResponse

FieldTypeLabelDescription
collectionCollection

UpdateUserProfileRequest

FieldTypeLabelDescription
user_idstring
emailstring
nsfw_enabledbooloptional
nsfw_age_confirmedbooloptional

UpdateUserProfileResponse

FieldTypeLabelDescription
profileUserProfile

UserProfile

FieldTypeLabelDescription
user_idstring
emailstring
nsfw_enabledbool
nsfw_age_confirmedboolTrue once the user has confirmed they are 18 or older. Stored per account so the confirmation is asked once, not per device or per session.
nsfw_age_verifiedboolTrue when the account’s age is already established, either by that confirmation or by a completed identity check. Ask for confirmation only when this is false: a KYC-verified user has already proved their age with a government document, so prompting them again asks for less than they gave. This is the same rule the media serve path applies.

VerifyCharacterReferenceDatasetImageRequest

VerifyCharacterReferenceDatasetImageRequest contains the user_id, character_id, and path of the reference dataset image to verify.

FieldTypeLabelDescription
user_idstring
character_idstring
pathstring
include_all_checksbooloptionalIf true, all checks will be performed, otherwise only the basic

VerifyCharacterReferenceDatasetImageResponse

VerifyCharacterReferenceDatasetImageResponse is returned when the reference dataset image is verified.

FieldTypeLabelDescription
character_dataset_imageCharacterDatasetImage

VerifyMediaInputSelfLikenessRequest

FieldTypeLabelDescription
user_idstringUser that must own both the uploaded input and the character.
character_idstringCharacter whose reference face the upload is compared against.
media_idstringHidden media.media ID returned by CreateMediaInputUpload. The uploaded object must already exist in storage.

VerifyMediaInputSelfLikenessResponse

FieldTypeLabelDescription
verdictSelfLikenessVerdictOutcome of the comparison.
similarityfloatCosine similarity between the two faces, 0 when no comparison ran. Diagnostics only: the verdict already applies the threshold.
thresholdfloatSimilarity threshold the verdict was computed against. Diagnostics only.

WorkflowMediaOutput

FieldTypeLabelDescription
output_keystringStable output key from the normalized workflow contract.
media_typeMediaTypeGenerated media type; currently image or video.
storage_pathstringDurable storage path for the generated media.
thumbnail_pathstringOptional thumbnail storage path for future gallery previews.
metadata_jsonstringOptional JSON metadata copied into the child media controls field.

AspectRatio

NameNumberDescription
ASPECT_RATIO_4_50
ASPECT_RATIO_9_161
ASPECT_RATIO_16_92
ASPECT_RATIO_1_13
ASPECT_RATIO_4_34
ASPECT_RATIO_3_45

CharacterDatasetImageFailureReason

NameNumberDescription
CHARACTER_DATASET_IMAGE_FAILURE_REASON_UNSPECIFIED0
CHARACTER_DATASET_IMAGE_FAILURE_REASON_RESOLUTION1
CHARACTER_DATASET_IMAGE_FAILURE_REASON_GRAYSCALE2
CHARACTER_DATASET_IMAGE_FAILURE_REASON_MORE_THAN_ONE_PERSON3
CHARACTER_DATASET_IMAGE_FAILURE_REASON_FACE_DETECTION_FAILED4
CHARACTER_DATASET_IMAGE_FAILURE_REASON_SUNGLASSES_ON_FACE5
CHARACTER_DATASET_IMAGE_FAILURE_REASON_FACE_SHARPNESS6
CHARACTER_DATASET_IMAGE_FAILURE_REASON_TOO_BRIGHT7
CHARACTER_DATASET_IMAGE_FAILURE_REASON_TOO_DARK8
CHARACTER_DATASET_IMAGE_FAILURE_REASON_VISIBLE_NIPPLES9
CHARACTER_DATASET_IMAGE_FAILURE_REASON_CROSSED_LIMBS10
CHARACTER_DATASET_IMAGE_FAILURE_REASON_IMAGE_ENCODING11
CHARACTER_DATASET_IMAGE_FAILURE_REASON_DUPLICATE12
CHARACTER_DATASET_IMAGE_FAILURE_REASON_HANDS_NEAR_FACE13
CHARACTER_DATASET_IMAGE_FAILURE_REASON_LYING_DOWN14
CHARACTER_DATASET_IMAGE_FAILURE_REASON_KNEELING15
CHARACTER_DATASET_IMAGE_FAILURE_REASON_PHONE_OVER_FACE16
CHARACTER_DATASET_IMAGE_FAILURE_REASON_TEXT_DENSITY17
CHARACTER_DATASET_IMAGE_FAILURE_REASON_QUALITY_NOISE18
CHARACTER_DATASET_IMAGE_FAILURE_REASON_NOT_A_FULL_BODY_IMAGE19
CHARACTER_DATASET_IMAGE_FAILURE_REASON_NO_FACE_DETECTED20
CHARACTER_DATASET_IMAGE_FAILURE_REASON_FACE_NOT_FRONTAL21
CHARACTER_DATASET_IMAGE_FAILURE_REASON_FACE_NOT_EYE_LEVEL22
CHARACTER_DATASET_IMAGE_FAILURE_REASON_FACE_NOT_NEUTRAL_EXPRESSION_OR_TEETH_VISIBLE23
CHARACTER_DATASET_IMAGE_FAILURE_REASON_FACE_NOT_CLEAR24
CHARACTER_DATASET_IMAGE_FAILURE_REASON_SUNGLASSES_NOT_ALLOWED25
CHARACTER_DATASET_IMAGE_FAILURE_REASON_BELOW_HEAD_TO_SHOULDER26
CHARACTER_DATASET_IMAGE_FAILURE_REASON_NOT_A_PORTRAIT_IMAGE27
CHARACTER_DATASET_IMAGE_FAILURE_REASON_SMALL_RESOLUTION28
CHARACTER_DATASET_IMAGE_FAILURE_REASON_NUDITY_DETECTED29
CHARACTER_DATASET_IMAGE_FAILURE_REASON_UNDERAGE_DETECTED30
CHARACTER_DATASET_IMAGE_FAILURE_REASON_FACE_TOO_SMALL31
CHARACTER_DATASET_IMAGE_FAILURE_REASON_NOT_A_FRONTAL_POSE32
CHARACTER_DATASET_IMAGE_FAILURE_REASON_NOT_ARMS_DOWN33
CHARACTER_DATASET_IMAGE_FAILURE_REASON_BELOW_HEAD_TO_BUST34
CHARACTER_DATASET_IMAGE_FAILURE_REASON_HIGH_OR_LOW_ANGLE_SELFIE35
CHARACTER_DATASET_IMAGE_FAILURE_REASON_AI_GENERATED_IMAGE36
CHARACTER_DATASET_IMAGE_FAILURE_REASON_SCREENGRAB37
CHARACTER_DATASET_IMAGE_FAILURE_REASON_BREASTS_NOT_REVEALED38
CHARACTER_DATASET_IMAGE_FAILURE_REASON_NUDITY_MISSING39
CHARACTER_DATASET_IMAGE_FAILURE_REASON_FACE_NOT_MATCHING_REFERENCE40
CHARACTER_DATASET_IMAGE_FAILURE_REASON_CELEBRITY_DETECTED41
CHARACTER_DATASET_IMAGE_FAILURE_REASON_ILLEGAL_CONTENT_DETECTED42
CHARACTER_DATASET_IMAGE_FAILURE_REASON_OFFENSIVE_CONTENT_DETECTED43
CHARACTER_DATASET_IMAGE_FAILURE_REASON_MODERATION_FLAGGED44

CharacterDatasetImageStatus

NameNumberDescription
CHARACTER_DATASET_IMAGE_STATUS_UNSPECIFIED0
CHARACTER_DATASET_IMAGE_STATUS_REVIEW1
CHARACTER_DATASET_IMAGE_STATUS_SELECTED2
CHARACTER_DATASET_IMAGE_STATUS_SUPERSEDED3
CHARACTER_DATASET_IMAGE_STATUS_REJECTED4

CharacterImageFilter

buf:lint:ignore ENUM_VALUE_PREFIX

NameNumberDescription
CHARACTER_IMAGE_FITLER_UNSPECIFIED0
NATURAL1
FILTER2

CharacterLikenessRejectionReason

NameNumberDescription
CHARACTER_LIKENESS_REJECTION_REASON_UNSPECIFIED0
CHARACTER_LIKENESS_REJECTION_REASON_NEEDS_PROOF_OF_CREATION1
CHARACTER_LIKENESS_REJECTION_REASON_REAL_IMAGES_OF_SOMEONE_ELSE2
CHARACTER_LIKENESS_REJECTION_REASON_UNUSABLE_FOR_GENERATION3
CHARACTER_LIKENESS_REJECTION_REASON_OTHER4

CharacterModelType

NameNumberDescription
CHARACTER_MODEL_TYPE_UNSPECIFIED0
CHARACTER_MODEL_TYPE_GFY1Go F Yourself character
CHARACTER_MODEL_TYPE_KITSUNE2Kitsune character

CharacterStatus

NameNumberDescription
CHARACTER_STATUS_UNSPECIFIED0
CHARACTER_STATUS_PENDING1
CHARACTER_STATUS_TRAINING2
CHARACTER_STATUS_AVAILABLE3
CHARACTER_STATUS_FAILED4

CharacterType

NameNumberDescription
CHARACTER_TYPE_UNSPECIFIED0
CHARACTER_TYPE_REAL1
CHARACTER_TYPE_VIRTUAL2

Gender

buf:lint:ignore ENUM_VALUE_PREFIX

NameNumberDescription
GENDER_UNSPECIFIED0
FEMALE1
MALE2

GenerationCatalogAxisControlKind

GenerationCatalogAxisControlKind tells clients how to render an axis.

NameNumberDescription
GENERATION_CATALOG_AXIS_CONTROL_KIND_UNSPECIFIED0
GENERATION_CATALOG_AXIS_CONTROL_KIND_DROPDOWN1
GENERATION_CATALOG_AXIS_CONTROL_KIND_TOGGLE2

GenerationCatalogContractFieldType

GenerationCatalogContractFieldType is the proto-owned vocabulary for generic workflow-backed generation inputs and outputs rendered by clients. Contract JSON stores these enum value names so unknown or mistyped kinds do not silently become app-specific string literals.

NameNumberDescription
GENERATION_CATALOG_CONTRACT_FIELD_TYPE_UNSPECIFIED0
GENERATION_CATALOG_CONTRACT_FIELD_TYPE_TEXT1
GENERATION_CATALOG_CONTRACT_FIELD_TYPE_IMAGE_ARRAY2
GENERATION_CATALOG_CONTRACT_FIELD_TYPE_VIDEO_ARRAY3
GENERATION_CATALOG_CONTRACT_FIELD_TYPE_CHARACTER_ID_ARRAY4

GenerationSurface

GenerationSurface identifies the product surface behind a generation. Absent means an ordinary create flow, which is why there is an explicit unspecified member.

Named “surface” rather than “source” because a media row already has two unrelated sources: source_id, the parent row an edit derives from, and source_variant, its faceted axis tuple.

NameNumberDescription
GENERATION_SURFACE_UNSPECIFIED0
GENERATION_SURFACE_CONTENT_DUMP1

KycVerificationPurpose

NameNumberDescription
KYC_VERIFICATION_PURPOSE_UNSPECIFIED0
KYC_VERIFICATION_PURPOSE_NSFW_ONBOARDING1
KYC_VERIFICATION_PURPOSE_CELEBRITY_DETECTED2

MediaDisplayType

buf:lint:ignore ENUM_VALUE_PREFIX

NameNumberDescription
MEDIA_DISPLAY_TYPE_UNSPECIFIED0
DEFAULT1
FAVORITES_ONLY2
ARCHIVE_ONLY3

MediaExplicitnessLevel

NameNumberDescription
MEDIA_EXPLICITNESS_LEVEL_UNSPECIFIED0
MEDIA_EXPLICITNESS_LEVEL_SFW1
MEDIA_EXPLICITNESS_LEVEL_NSFW2
MEDIA_EXPLICITNESS_LEVEL_EXPLICIT3
MEDIA_EXPLICITNESS_LEVEL_SSFW4

MediaFailureReason

NameNumberDescription
MEDIA_FAILURE_REASON_UNSPECIFIED0
MEDIA_FAILURE_REASON_UNDERAGE_DETECTED1
MEDIA_FAILURE_REASON_CELEBRITY_DETECTED2
MEDIA_FAILURE_REASON_NUDITY_DETECTED3
MEDIA_FAILURE_REASON_ILLEGAL_CONTENT_DETECTED4
MEDIA_FAILURE_REASON_OFFENSIVE_CONTENT_DETECTED5
MEDIA_FAILURE_REASON_MODERATION_FLAGGED6

MediaOrder

NameNumberDescription
MEDIA_ORDER_UNSPECIFIED0
MEDIA_ORDER_NEWEST1
MEDIA_ORDER_OLDEST2

MediaStatus

NameNumberDescription
MEDIA_STATUS_UNSPECIFIED0
MEDIA_STATUS_AVAILABLE1
MEDIA_STATUS_PENDING2
MEDIA_STATUS_GENERATING3
MEDIA_STATUS_FAILED4

MediaType

NameNumberDescription
MEDIA_TYPE_UNSPECIFIED0
MEDIA_TYPE_IMAGE1
MEDIA_TYPE_VIDEO2
MEDIA_TYPE_CAROUSEL3

SelfLikenessVerdict

SelfLikenessVerdict is the outcome of comparing an uploaded workflow input against a character’s reference face. Only MISMATCH denies the edit; every other non-match value means the check could not conclude, so the client must never present it as “this is not you”.

NameNumberDescription
SELF_LIKENESS_VERDICT_UNSPECIFIED0
SELF_LIKENESS_VERDICT_MATCH1Both faces were read and they are the same person. Unlock the form.
SELF_LIKENESS_VERDICT_MISMATCH2Both faces were read and they are different people. Expected result, not an error: deny the edit with a clear message and charge nothing.
SELF_LIKENESS_VERDICT_NO_FACE_DETECTED3No usable face was found in the uploaded image. Ask for a clearer photo.
SELF_LIKENESS_VERDICT_UNAVAILABLE4The check could not run: the face model was unavailable, Brain errored, or the character has no usable reference face. Retryable, never a denial.

ShopCharacterAvailabilityStatus

NameNumberDescription
SHOP_CHARACTER_AVAILABILITY_STATUS_UNSPECIFIED0
SHOP_CHARACTER_AVAILABILITY_STATUS_AVAILABLE1
SHOP_CHARACTER_AVAILABILITY_STATUS_RESERVED2
SHOP_CHARACTER_AVAILABILITY_STATUS_SOLD3

ShopCharacterSortBy

NameNumberDescription
SHOP_CHARACTER_SORT_BY_UNSPECIFIED0
SHOP_CHARACTER_SORT_BY_PRICE_TIER1
SHOP_CHARACTER_SORT_BY_CREATED_AT2
SHOP_CHARACTER_SORT_BY_NAME3

ShopSortDirection

NameNumberDescription
SHOP_SORT_DIRECTION_UNSPECIFIED0
SHOP_SORT_DIRECTION_ASC1
SHOP_SORT_DIRECTION_DESC2

WorkflowMediaCompletionStatus

NameNumberDescription
WORKFLOW_MEDIA_COMPLETION_STATUS_UNSPECIFIED0
WORKFLOW_MEDIA_COMPLETION_STATUS_SUCCEEDED1
WORKFLOW_MEDIA_COMPLETION_STATUS_FAILED2

SirloinService

Sirloin Service

The service is used for internal communication within the Sirloin service.

Character management

Method NameRequest TypeResponse TypeDescription
CreateCharacterCreateCharacterRequestCreateCharacterResponseCreateCharacter creates a new character for the user. The character_id is unique.
UpdateCharacterUpdateCharacterRequestUpdateCharacterResponseUpdateCharacter updates an existing character for the user. The character_id is unique.
GetCharacterReferenceImageUploadURLGetCharacterReferenceImageUploadURLRequestGetCharacterReferenceImageUploadURLResponseGetCharacterReferenceImageUploadURL returns a signed URL to upload a reference image for the character.
GetCharacterReferenceDatasetUploadURLsGetCharacterReferenceDatasetUploadURLsRequestGetCharacterReferenceDatasetUploadURLsResponseGetCharacterReferenceDatasetUploadURLs returns a list of signed URLs to upload reference dataset images for the character.
VerifyCharacterReferenceDatasetImageVerifyCharacterReferenceDatasetImageRequestVerifyCharacterReferenceDatasetImageResponseVerifyCharacterReferenceDatasetImage verifies the uploaded reference dataset image.
RequestCharacterLikenessManualReviewRequestCharacterLikenessManualReviewRequestRequestCharacterLikenessManualReviewResponseRequestCharacterLikenessManualReview requests manual review for uploaded reference dataset images that failed only likeness verification.
CopyReferenceDatasetImageCopyReferenceDatasetImageRequestCopyReferenceDatasetImageResponseCopyReferenceDatasetImage server-side copies an existing reference dataset image into the target character’s collection path. Used by NudifyMe to import a source SFW character’s images into the NSFW character being built so subsequent verify/score side effects (brain quarantine on failure) only affect the copy, never the source.
DeleteCharacterReferenceDatasetImageDeleteCharacterReferenceDatasetImageRequestDeleteCharacterReferenceDatasetImageResponseDeleteCharacterReferenceDatasetImage deletes the reference dataset image.
UpdateCharacterReferenceDatasetUpdateCharacterReferenceDatasetRequestUpdateCharacterReferenceDatasetResponseUpdateCharacterReferenceDataset updates the active reference dataset images for a character.
TriggerCharacterReferenceImageUploadedTriggerCharacterReferenceImageUploadedRequestTriggerCharacterReferenceImageUploadedResponseTriggerCharacterReferenceImageUploaded triggers the processing of the uploaded reference image.
ListCharactersListCharactersRequestListCharactersResponseListCharacters returns a list of characters for the user.
DeleteCharacterDeleteCharacterRequestDeleteCharacterResponseDeleteCharacter deletes a character for the user.
GetInstagramProfileGetInstagramProfileRequestGetInstagramProfileResponseGetInstagramProfile fetches public profile data from Instagram. Used to prefill character name and profile picture during onboarding.
GetCustomViEvidenceUploadURLGetCustomViEvidenceUploadURLRequestGetCustomViEvidenceUploadURLResponseGetCustomViEvidenceUploadURL returns a presigned PUT URL for uploading a custom-VI verification evidence file (screenshot, PDF, etc.) to R2 under a common per-user prefix. The FE PUTs the file directly; the resulting path is attached to the character via UpdateCharacterCustomViVerification when the user finishes the form.
UpdateCharacterCustomViVerificationUpdateCharacterCustomViVerificationRequestUpdateCharacterCustomViVerificationResponseUpdateCharacterCustomViVerification stores the custom-VI verification form data on the character in one shot: socials, free-form creation source, and the final list of evidence file paths uploaded to R2. The evidence paths array is a full replacement, not an append.
StartKYCVerificationStartKYCVerificationRequestStartKYCVerificationResponseStartKYCVerification creates (or re-creates) a KYC verification session for the account and returns a verification URL usable by the client UI.
ResetKYCVerificationResetKYCVerificationRequestResetKYCVerificationResponseResetKYCVerification resets account-level KYC when the user has no successful 18+ generations.
GenerateMediaGenerateMediaRequestGenerateMediaResponseGenerateMedia generates media for the character.
GenerateMediaBatchGenerateMediaBatchRequestGenerateMediaBatchResponseGenerateMediaBatch runs a list of examples exactly as they were authored.

The caller sends example ids and nothing else: Sirloin loads each example, resolves the workflow from the stored row, and uses that row’s own input values as the trigger. Clients therefore never assemble — or are trusted for — a dispatch payload, and the per-example round trips happen here rather than one HTTP request per item.

A failing example never fails the batch. Each item reports its own outcome in request order, so callers can retry only what did not start. | | PreviewContentDump | PreviewContentDumpRequest | PreviewContentDumpResponse | PreviewContentDump picks the examples a content dump would run and prices them. Read-only: nothing is charged, enqueued or written, so a client may call it on every settings change.

Each example carries its own price, so a total cannot be derived from the requested counts alone — it exists only once the picks are known. The same pricing path charges at dispatch, so the quote and the bill agree. | | ListGenerationCatalog | ListGenerationCatalogRequest | ListGenerationCatalogResponse | ListGenerationCatalog returns published workflow-backed generation modes that Sirloin can expose to app clients, including pricing, compatibility, and normalized input/output contracts. | | CreateMediaInputUpload | CreateMediaInputUploadRequest | CreateMediaInputUploadResponse | CreateMediaInputUpload creates a hidden durable media record and presigned upload URL for workflow input files before the visible generation request is submitted. The hidden row remains pending-upload until GenerateMedia confirms the object exists in storage. | | VerifyMediaInputSelfLikeness | VerifyMediaInputSelfLikenessRequest | VerifyMediaInputSelfLikenessResponse | VerifyMediaInputSelfLikeness compares an uploaded workflow input image against the character’s own frontal reference face. Users may only edit photos of themselves, so clients call this after the upload PUT succeeds and before unlocking the edit form. Read-only and free: no credits are spent, no generation is dispatched, and no rows are written.

This is face matching only. Protected-set moderation (CSAM, celebrity, illegal content) stays in the workflow and is not covered here. | | CompleteWorkflowMedia | CompleteWorkflowMediaRequest | CompleteWorkflowMediaResponse | CompleteWorkflowMedia was the internal engine-to-Sirloin completion callback for the retired legacy workflow engine. The server no longer implements it (returns Unimplemented); the RPC is retained for wire compatibility only. | | ListMedia | ListMediaRequest | ListMediaResponse | ListMedia returns a list of available and pending media for the character. | | ListAllMedia | ListAllMediaRequest | ListMediaResponse | ListAllMedia returns a list of the user’s media across ALL of their characters (no character scope). Same filters/pagination as ListMedia. | | ToggleMediaFavorite | ToggleMediaFavoriteRequest | ToggleMediaFavoriteResponse | ToggleMediaFavorite toggles the favorite status of a media item. | | ToggleMediaArchived | ToggleMediaArchivedRequest | ToggleMediaArchivedResponse | ToggleMediaArchived toggles the archive status of a media item. | | SubmitFeedback | SubmitFeedbackRequest | SubmitFeedbackResponse | SubmitFeedback submits feedback for the media item. | | SetMediaDownloaded | SetMediaDownloadedRequest | SetMediaDownloadedResponse | SetMediaDownloaded toggles the downloaded status of a media item. | | NudifyReferences | NudifyReferencesRequest | NudifyReferencesResponse | NudifyReferences nudifies a fixed batch of exactly 3 reference images. Proxies to brain via HTTP; sirloin owns the camelCase ↔ snake_case translation to brain. | | ListMediaExamples | ListMediaExamplesRequest | ListMediaExamplesResponse | Lists MediaExamples returns a list of available media examples. | | ListMediaTags | ListMediaTagsRequest | ListMediaTagsResponse | ListMediaTags returns a list of tags for a given media type. | | RequestWelcomePics | RequestWelcomePicsRequest | RequestWelcomePicsResponse | RequestWelcomePics requests a batch of welcome pics for a character. | | GetUserProfile | GetUserProfileRequest | GetUserProfileResponse | GetUserProfile returns the user’s profile settings. | | UpdateUserProfile | UpdateUserProfileRequest | UpdateUserProfileResponse | UpdateUserProfile creates or updates the user’s profile settings.

Shop VI -------------------- | | ListAvailableCharacters | ListAvailableCharactersRequest | ListAvailableCharactersResponse | ListAvailableCharacters returns a paginated catalogue of virtual influencers available for purchase, with attribute filters and sorting. | | GetShopCharacter | GetShopCharacterRequest | GetShopCharacterResponse | GetShopCharacter returns full details of a single shop VI including attributes, catalogue media, and price. | | ReserveCharacter | ReserveCharacterRequest | ReserveCharacterResponse | ReserveCharacter acquires a time-limited purchase lock on a VI. Returns ALREADY_EXISTS if the character is already reserved. | | PurchaseShopCharacter | PurchaseShopCharacterRequest | PurchaseShopCharacterResponse | PurchaseShopCharacter purchases a reserved shop VI character using credits. The reservation must be valid and the user must have sufficient credits. | | ReleaseReservation | ReleaseReservationRequest | ReleaseReservationResponse | ReleaseReservation releases an expired or cancelled reservation. | | CreateCollection | CreateCollectionRequest | CreateCollectionResponse | CreateCollection creates a new (empty) media collection for the user. | | UpdateCollection | UpdateCollectionRequest | UpdateCollectionResponse | UpdateCollection updates a collection’s name/description/visibility. | | DeleteCollection | DeleteCollectionRequest | DeleteCollectionResponse | DeleteCollection deletes a collection (membership rows are removed too; the underlying media is untouched). | | ListCollections | ListCollectionsRequest | ListCollectionsResponse | ListCollections returns the user’s collections with item counts and a cover preview. | | AddMediaToCollection | AddMediaToCollectionRequest | AddMediaToCollectionResponse | AddMediaToCollection adds one or more media items to a collection (idempotent — re-adding an existing item is a no-op). | | RemoveMediaFromCollection | RemoveMediaFromCollectionRequest | RemoveMediaFromCollectionResponse | RemoveMediaFromCollection removes one or more media items from a collection (the media itself is not deleted). |

Top

sirloin/v5/strip.proto

GrowthDataPoint

FieldTypeLabelDescription
datestringDate in format “YYYY-MM-DD”
countint32Count for that date

StripAuditLog

FieldTypeLabelDescription
idstring
created_atstring
user_idstring
user_emailstring
actionstring
entity_typestring
entity_idstring
changesstringJSON string
metadatastringJSON string

StripBypassCharacterOnboardingChecksRequest

FieldTypeLabelDescription
character_idstring
admin_user_idstring
admin_user_emailstring

StripBypassCharacterOnboardingChecksResponse

FieldTypeLabelDescription
bypass_onboarding_checks_untilstring

StripBypassUserKYCRequest

FieldTypeLabelDescription
user_idstring
admin_user_idstring
admin_user_emailstring

StripBypassUserKYCResponse

FieldTypeLabelDescription
ondato_verification_idstring
kyc_statusstring

StripCharacter

FieldTypeLabelDescription
idstring
user_idstring
user_emailstring
namestring
created_atstring
updated_atstring
deleted_atstring
genderstring
model_typestring
instagram_handlestring
twitter_handlestring
statusstring
reference_image_urlstring
reference_image_agestring
ethnicitystring
hair_colorstring
hair_stylestring
hair_lengthstring
media_countint32Count of generated media for this character
is_nsfwboolWhether the character is NSFW
reference_dataset_imagesStripCharacterDatasetImagerepeated
ondato_verification_completedboolWhether KYC verification is completed
character_typestringCHARACTER_TYPE_REAL or CHARACTER_TYPE_VIRTUAL
catalogue_image_urlsstringrepeatedSigned URLs for VI catalogue images
catalogue_video_urlstringSigned URL for VI catalogue video
catalogue_video_thumbnail_urlstringSigned URL for VI catalogue video thumbnail
foxy_handlestring
bypass_onboarding_checks_untilstringoptional
ondato_verification_idstring
ondato_kyc_identification_idstring

StripCharacterDatasetImage

FieldTypeLabelDescription
idstring
character_idstring
image_urlstring
created_atstring

StripCreateCharacterRequest

FieldTypeLabelDescription
user_idstring
namestring
genderstring
model_typestring
admin_user_idstring
admin_user_emailstring
is_nsfwboolWhether the character is NSFW
foxy_handlestring

StripCreateCharacterResponse

StripCreateClerkUserRequest

FieldTypeLabelDescription
emailstring
rolestringOptional: assign role immediately after creation
admin_user_idstring
admin_user_emailstring

StripCreateClerkUserResponse

FieldTypeLabelDescription
user_idstring
emailstring
already_existedbooltrue when an existing Clerk user was reused instead of creating a duplicate

StripDatasetImageWithCharacter

FieldTypeLabelDescription
idstring
character_idstring
image_urlstring
created_atstring
character_namestringCharacter info
user_emailstring
character_statusstring
character_genderstring
character_model_typestring
character_created_atstring
character_updated_atstring

StripDeleteCharacterRequest

FieldTypeLabelDescription
character_idstring
admin_user_idstring
admin_user_emailstring
refresh_characters_requestStripListCharactersRequest

StripDeleteCharacterResponse

FieldTypeLabelDescription
charactersStripCharacterrepeated
refresh_succeededbool

StripDeleteClerkUserRequest

FieldTypeLabelDescription
user_idstringClerk user id to delete
admin_user_idstring
admin_user_emailstring

StripDeleteClerkUserResponse

StripDeleteFilterPresetRequest

FieldTypeLabelDescription
admin_user_idstring
idstring

StripDeleteFilterPresetResponse

FieldTypeLabelDescription
deletedbool

StripDeleteUserRoleRequest

FieldTypeLabelDescription
user_idstring
admin_user_idstring
admin_user_emailstring

StripDeleteUserRoleResponse

StripFailMediaRequest

FieldTypeLabelDescription
media_idstring
admin_user_idstring
admin_user_emailstring
refresh_media_requestStripListMediaRequest

StripFailMediaResponse

FieldTypeLabelDescription
mediaStripMediarepeated
has_morebool
refresh_succeededbool

StripFilterPreset

Saved filter preset messages

FieldTypeLabelDescription
idstring
admin_user_idstring
list_typestring
namestring
filter_jsonstring
sharedbool

StripFoxy360Artifact

FieldTypeLabelDescription
idstring
run_idstring
typestring
contentstring
urlstring
created_atstring

StripFoxy360CreateThreadRequest

FieldTypeLabelDescription
user_idstring

StripFoxy360CreateThreadResponse

FieldTypeLabelDescription
threadStripFoxy360Thread

StripFoxy360GetRunRequest

FieldTypeLabelDescription
run_idstring

StripFoxy360GetRunResponse

FieldTypeLabelDescription
runStripFoxy360Run

StripFoxy360ListArtifactsRequest

FieldTypeLabelDescription
run_idstring
limitint32

StripFoxy360ListArtifactsResponse

FieldTypeLabelDescription
artifactsStripFoxy360Artifactrepeated

StripFoxy360ListMessagesRequest

FieldTypeLabelDescription
thread_idstring
limitint32

StripFoxy360ListMessagesResponse

FieldTypeLabelDescription
messagesStripFoxy360Messagerepeated

StripFoxy360Message

FieldTypeLabelDescription
idstring
thread_idstring
rolestring
contentstring
run_idstring
created_atstring

StripFoxy360Run

FieldTypeLabelDescription
idstring
thread_idstring
statusstring
created_atstring
completed_atstring

StripFoxy360SendMessageRequest

FieldTypeLabelDescription
thread_idstring
rolestring
contentstring

StripFoxy360SendMessageResponse

FieldTypeLabelDescription
messageStripFoxy360Message
runStripFoxy360Run

StripFoxy360Thread

FieldTypeLabelDescription
idstring
user_idstring
created_atstring

StripGetAuditLogRequest

FieldTypeLabelDescription
audit_log_idstring

StripGetAuditLogResponse

FieldTypeLabelDescription
audit_logStripAuditLog

StripGetDashboardStatsRequest

Dashboard statistics messages

FieldTypeLabelDescription
growth_daysint32Number of days to include in growth data
top_admins_limitint32Number of top admins to return

StripGetDashboardStatsResponse

FieldTypeLabelDescription
total_usersint32User statistics
active_usersint32
total_charactersint32Character statistics
active_charactersint32
total_mediaint32Media statistics
processed_mediaint32
user_growthGrowthDataPointrepeatedGrowth data
character_growthGrowthDataPointrepeated
media_growthGrowthDataPointrepeated
top_usersTopUserActivityrepeatedTop users by media generation (past 7 days)

StripGetSchemaRequest

StripGetSchemaResponse

FieldTypeLabelDescription
tablesStripSchemaTablerepeated

StripGetUserRoleRequest

FieldTypeLabelDescription
user_idstring

StripGetUserRoleResponse

FieldTypeLabelDescription
rolestringEmpty if no role assigned

StripLikenessEvidenceFile

FieldTypeLabelDescription
pathstring
urlstring
file_namestring

StripLikenessHistoryCharacter

FieldTypeLabelDescription
character_idstring
character_namestring
user_emailstring
selected_countint32
rejected_countint32
superseded_countint32
slotsStripLikenessHistorySlotrepeated

StripLikenessHistoryEvent

FieldTypeLabelDescription
actionstringUPLOADED / APPROVED / REJECTED / SUPERSEDED
from_statusstring
to_statusstring
reviewer_emailstring
occurred_atstringRFC3339
reasonstringraw rejection reason enum code, empty unless REJECTED
reason_notestringoptional free-text note captured at rejection

StripLikenessHistorySlot

FieldTypeLabelDescription
slot_tokenstringface_frontal, full_body, *_nsfw, empty if unrecognized
current_statusstringSELECTED / REJECTED / SUPERSEDED
image_urlstring
eventsStripLikenessHistoryEventrepeatedchronological, oldest first

StripLikenessRejectionReasonOption

FieldTypeLabelDescription
valueStripLikenessRejectionReason
codestring
labelstring
requires_notebool

StripLikenessReviewItem

FieldTypeLabelDescription
idstring
character_idstring
character_namestring
user_idstring
user_emailstring
image_urlstring
upload_pathstring
version_pathstring
created_atstring
statusstring
kyc_image_urlstring
reference_image_urlstring
is_nsfwbool
instagram_handlestring
twitter_handlestring
another_social_profilestring
creation_sourcestring
evidence_filesStripLikenessEvidenceFilerepeated
has_historyboolCharacter already has resolved likeness decisions visible on the history tab
revisionint64

StripListAuditLogsRequest

FieldTypeLabelDescription
cursorstring
limitint32
searchstring
sort_byStripListAuditLogsSortBy
sort_directionSortDirection
action_filterstringOptional: filter by specific action
entity_type_filterstringOptional: filter by entity type

StripListAuditLogsResponse

FieldTypeLabelDescription
audit_logsStripAuditLogrepeated
next_cursorstring
has_morebool

StripListAvailableCharactersRequest

FieldTypeLabelDescription
cursorstring
limitint32
searchstring
sort_bystring
sort_directionSortDirection
ethnicity_filterstringrepeated
body_type_filterstringrepeated
hair_color_filterstringrepeated
eye_color_filterstringrepeated
breast_size_filterstringrepeated
gender_filterstringrepeated
price_tier_minint32optional
price_tier_maxint32optional
hair_style_filterstringrepeated
hair_length_filterstringrepeated
age_minint32optional
age_maxint32optional
is_tattoosbooloptional
is_bblbooloptional
is_glassesbooloptional

StripListAvailableCharactersResponse

FieldTypeLabelDescription
charactersStripShopCharacterrepeated
next_cursorstring
has_morebool

StripListCharactersRequest

FieldTypeLabelDescription
cursorstring
limitint32
searchstring
sort_byStripListCharactersSortBy
sort_directionSortDirection
character_idstring
status_filterstringFilter fields

CHARACTER_STATUS_AVAILABLE, CHARACTER_STATUS_ACTIVE, etc. | | gender_filter | string | | CHARACTER_MALE, CHARACTER_FEMALE, CHARACTER_OTHER | | model_type_filter | string | | CHARACTER_MODEL_TYPE_REALISTIC, CHARACTER_MODEL_TYPE_ANIME, etc. | | created_from | string | | Date filter (YYYY-MM-DD format) | | created_to | string | | Date filter (YYYY-MM-DD format) | | updated_from | string | | Date filter (YYYY-MM-DD format) | | updated_to | string | | Date filter (YYYY-MM-DD format) | | has_media | bool | | Activity filter

Filter by characters that have media | | filter_has_media | bool | | Whether to apply has_media filter | | user_id | string | | Filter by user ID | | character_type_filter | string | | CHARACTER_TYPE_REAL, CHARACTER_TYPE_VIRTUAL |

StripListCharactersResponse

FieldTypeLabelDescription
charactersStripCharacterrepeated

StripListDatasetImagesRequest

FieldTypeLabelDescription
cursorstring
limitint32
searchstringSearch by character name, user email
sort_byStripListDatasetImagesSortBy
sort_directionSortDirection
status_filterstringFilter fields

CHARACTER_STATUS_AVAILABLE, CHARACTER_STATUS_ACTIVE, etc. | | gender_filter | string | | CHARACTER_MALE, CHARACTER_FEMALE, CHARACTER_OTHER | | model_type_filter | string | | CHARACTER_MODEL_TYPE_REALISTIC, CHARACTER_MODEL_TYPE_ANIME, etc. | | created_from | string | | Date filter (YYYY-MM-DD format) - image created date | | created_to | string | | Date filter (YYYY-MM-DD format) - image created date |

StripListDatasetImagesResponse

FieldTypeLabelDescription
imagesStripDatasetImageWithCharacterrepeated
has_morebool

StripListFilterPresetsRequest

FieldTypeLabelDescription
admin_user_idstring
list_typestring

StripListFilterPresetsResponse

FieldTypeLabelDescription
presetsStripFilterPresetrepeated

StripListLikenessHistoryRequest

FieldTypeLabelDescription
cursorstring
limitint32
searchstringSearch by character name, user email, character ID

StripListLikenessHistoryResponse

FieldTypeLabelDescription
charactersStripLikenessHistoryCharacterrepeated
has_morebool
next_cursorstring

StripListLikenessReviewsRequest

FieldTypeLabelDescription
cursorstring
limitint32
searchstringSearch by character name, user email, character ID

StripListLikenessReviewsResponse

FieldTypeLabelDescription
reviewsStripLikenessReviewItemrepeated
has_morebool
next_cursorstring
rejection_reasonsStripLikenessRejectionReasonOptionrepeated
rejection_reason_catalog_versionstring

StripListMediaRequest

FieldTypeLabelDescription
cursorstring
limitint32
searchstring
sort_byStripListMediaSortBy
sort_directionSortDirection
media_idstring
type_filterstringFilter fields

MEDIA_TYPE_IMAGE, MEDIA_TYPE_VIDEO | | status_filter | string | | MEDIA_STATUS_AVAILABLE, MEDIA_STATUS_PENDING, etc. | | created_from | string | | Date filter (YYYY-MM-DD format) | | created_to | string | | Date filter (YYYY-MM-DD format) | | generation_mode_filter | string | | “edit”, “signature”, “basic”, “custom_text” |

StripListMediaResponse

FieldTypeLabelDescription
mediaStripMediarepeated
has_morebool

StripListPopularCategoriesRequest

Popular categories (tags) with usage statistics

FieldTypeLabelDescription
created_fromstringTime range filters for media.created_at

Date filter (YYYY-MM-DD format) | | created_to | string | | Date filter (YYYY-MM-DD format) | | usage_type | StripPopularUsageType | | Usage type filter

Filter by usage type (welcome vs normal) | | limit | int32 | | Limit the number of categories returned

Default 20 | | explicitness_level | string | | Explicitness level filter

Filter by explicitness level (e.g., “MEDIA_EXPLICITNESS_LEVEL_SFW”) | | media_type_filter | string | | Media type filter

IMAGE, VIDEO, or CAROUSEL |

StripListPopularCategoriesResponse

FieldTypeLabelDescription
categoriesStripPopularCategoryrepeated

StripListPopularExamplesRequest

FieldTypeLabelDescription
cursorstring
limitint32
searchstring
sort_byStripListPopularExamplesSortBy
sort_directionSortDirection
created_fromstringTime range filters for media.created_at (not example.created_at)

Date filter (YYYY-MM-DD format) | | created_to | string | | Date filter (YYYY-MM-DD format) | | tag_id | string | | Tag/category filter

Filter examples by tag/category ID | | usage_type | StripPopularUsageType | | Usage type filter

Filter by usage type (welcome vs normal) | | explicitness_level | string | | Explicitness level filter

Filter by explicitness level (e.g., “MEDIA_EXPLICITNESS_LEVEL_SFW”) | | media_type_filter | string | | Media type filter

IMAGE, VIDEO, or CAROUSEL |

StripListPopularExamplesResponse

FieldTypeLabelDescription
examplesStripPopularExamplerepeated
has_morebool

StripListUserRolesRequest

FieldTypeLabelDescription
limitint32
cursorstring
searchstringSearch by email
role_filterstringFilter by specific role

StripListUserRolesResponse

FieldTypeLabelDescription
rolesStripUserRolerepeated
next_cursorstring
has_morebool

StripListUsersRequest

FieldTypeLabelDescription
cursorstring
limitint32
searchstring
sort_byStripListUsersSortBy
sort_directionSortDirection
user_idstring
status_filterUserStatusFilterAdvanced filters
created_fromstringRFC3339 format
created_tostringRFC3339 format
credits_minint32
credits_maxint32
has_charactersbooltrue = with characters, false = no filter
filter_has_charactersbooltrue = apply has_characters filter
has_mediabooltrue = with media, false = no filter
filter_has_mediabooltrue = apply has_media filter
has_reportsbooltrue = with reports, false = no filter
filter_has_reportsbooltrue = apply has_reports filter

StripListUsersResponse

FieldTypeLabelDescription
usersStripUserrepeated

StripLogAuditRequest

FieldTypeLabelDescription
user_idstring
user_emailstring
actionstring
entity_typestring
entity_idstring
changesstringJSON string with before/after values
metadatastringJSON string with additional context

StripLogAuditResponse

FieldTypeLabelDescription
audit_log_idstring

StripMedia

FieldTypeLabelDescription
idstring
user_idstring
user_emailstring
character_idstring
character_namestring
created_atstring
deleted_atstring
typestring
statusstring
image_urlstring
video_urlstring
thumbnail_urlstring
video_preview_urlstring
custom_textstring
example_idstring
source_media_idstring
user_feedbackstring
workflow_namestringoptional

StripPopularCategory

FieldTypeLabelDescription
idstring
namestring
image_urlstring
usage_countint32Total usage count for examples in this category
example_countint32Number of examples in this category

StripPopularExample

FieldTypeLabelDescription
idstring
typestringExample type
media_typestringIMAGE or VIDEO
image_urlstring
video_urlstring
thumbnail_urlstring
video_preview_urlstring
custom_textstring
locationstring
descriptionstring
created_atstring
usage_countint32Number of media items generated from this example
tag_idsstringrepeated
tag_namesstringrepeated
workflow_namestringoptionalWorkflow used to derive the customer-facing model label

StripResolveLikenessReviewRequest

FieldTypeLabelDescription
review_idstring
resolutionStripLikenessReviewResolution
admin_user_idstring
admin_user_emailstring
notestringoptional
rejection_reasonStripLikenessRejectionReason
metadataRequestMetadata

StripResolveLikenessReviewResponse

FieldTypeLabelDescription
statusstring
revisionint64

StripRunReadonlyQueryRequest

FieldTypeLabelDescription
querystring
limitint32
offsetint32

StripRunReadonlyQueryResponse

FieldTypeLabelDescription
rows_jsonstringrepeated
limitint32
offsetint32

StripSaveFilterPresetRequest

FieldTypeLabelDescription
admin_user_idstring
list_typestring
namestring
filter_jsonstring
sharedbool

StripSchemaColumn

FieldTypeLabelDescription
namestring
data_typestring
is_nullablebool

StripSchemaTable

FieldTypeLabelDescription
schema_namestring
table_namestring
columnsStripSchemaColumnrepeated

StripSetUserRoleRequest

FieldTypeLabelDescription
user_idstring
user_emailstring
rolestring
admin_user_idstring
admin_user_emailstring

StripSetUserRoleResponse

StripShopCharacter

FieldTypeLabelDescription
character_idstring
character_namestring
character_genderstring
availability_statusstring
price_tierint32
ethnicitystring
body_typestring
hair_colorstring
hair_stylestring
hair_lengthstring
eye_colorstring
breast_sizestring
is_tattoosbool
is_bblbool
is_glassesbool
ageint32
catalogue_image_urlsstringrepeated

StripSyncUserOndatoVerificationRequest

FieldTypeLabelDescription
user_idstring
admin_user_idstring
admin_user_emailstring

StripSyncUserOndatoVerificationResponse

FieldTypeLabelDescription
changedbool
approvedbool
statusstring
status_reasonstring
retryablebool

StripUpdateCharacterRequest

FieldTypeLabelDescription
character_idstring
namestring
genderstring
instagram_handlestring
twitter_handlestring
user_idstring
admin_user_idstring
admin_user_emailstring
is_nsfwboolWhether the character is NSFW
foxy_handlestring

StripUpdateCharacterResponse

StripUpdateUserProcessorsRequest

FieldTypeLabelDescription
user_idstring
admin_user_idstring
admin_user_emailstring
sfw_processorstring
nsfw_processorstring

StripUpdateUserProcessorsResponse

StripUpdateUserRequest

FieldTypeLabelDescription
user_idstring
remaining_creditsint32
admin_user_idstring
admin_user_emailstring
standard_creditsint32
full_access_creditsint32

StripUpdateUserResponse

StripUser

FieldTypeLabelDescription
idstring
emailstring
remaining_creditsint32
characters_countint32
media_countint32
reported_media_countint32
created_atstring
cancelled_atstring
cancelled_reasonstring
referral_codestring
standard_creditsint32
full_access_creditsint32
ondato_verification_idstring
ondato_kyc_identification_idstring
kyc_statusstring
kyc_status_reasonstring
sfw_processorstring
nsfw_processorstring
kyc_bypass_activebool
kyc_bypass_set_atstring

StripUserRole

FieldTypeLabelDescription
idstring
user_idstring
user_emailstring
rolestring
created_atstring
updated_atstring
created_by_emailstring

TopUserActivity

FieldTypeLabelDescription
user_idstring
emailstring
media_countint32
top_tagsstringrepeatedTop 3 favorite categories/tags

SortDirection

NameNumberDescription
SORT_DIRECTION_UNSPECIFIED0
SORT_DIRECTION_ASC1
SORT_DIRECTION_DESC2

StripLikenessRejectionReason

NameNumberDescription
STRIP_LIKENESS_REJECTION_REASON_UNSPECIFIED0
STRIP_LIKENESS_REJECTION_REASON_NEEDS_PROOF_OF_CREATION1
STRIP_LIKENESS_REJECTION_REASON_REAL_IMAGES_OF_SOMEONE_ELSE2
STRIP_LIKENESS_REJECTION_REASON_UNUSABLE_FOR_GENERATION3
STRIP_LIKENESS_REJECTION_REASON_OTHER4

StripLikenessReviewResolution

NameNumberDescription
STRIP_LIKENESS_REVIEW_RESOLUTION_UNSPECIFIED0
STRIP_LIKENESS_REVIEW_RESOLUTION_APPROVED1
STRIP_LIKENESS_REVIEW_RESOLUTION_REJECTED2

StripListAuditLogsSortBy

NameNumberDescription
LIST_AUDIT_LOGS_SORT_BY_UNSPECIFIED0
LIST_AUDIT_LOGS_SORT_BY_CREATED_AT1
LIST_AUDIT_LOGS_SORT_BY_USER_ID2
LIST_AUDIT_LOGS_SORT_BY_ACTION3
LIST_AUDIT_LOGS_SORT_BY_ENTITY_TYPE4

StripListCharactersSortBy

NameNumberDescription
LIST_CHARACTERS_SORT_BY_UNSPECIFIED0
LIST_CHARACTERS_SORT_BY_CREATED_AT1
LIST_CHARACTERS_SORT_BY_UPDATED_AT2
LIST_CHARACTERS_SORT_BY_DELETED_AT3
LIST_CHARACTERS_SORT_BY_NAME4
LIST_CHARACTERS_SORT_BY_GENDER5
LIST_CHARACTERS_SORT_BY_MODEL_TYPE6
LIST_CHARACTERS_SORT_BY_INSTAGRAM_HANDLE7
LIST_CHARACTERS_SORT_BY_TWITTER_HANDLE8
LIST_CHARACTERS_SORT_BY_STATUS9
LIST_CHARACTERS_SORT_BY_REFERENCE_IMAGE_URL10
LIST_CHARACTERS_SORT_BY_REFERENCE_IMAGE_AGE11
LIST_CHARACTERS_SORT_BY_ETHNICITY12
LIST_CHARACTERS_SORT_BY_HAIR_COLOR13
LIST_CHARACTERS_SORT_BY_HAIR_STYLE14
LIST_CHARACTERS_SORT_BY_HAIR_LENGTH15

StripListDatasetImagesSortBy

Dataset images listing (direct query, not through characters)

NameNumberDescription
LIST_DATASET_IMAGES_SORT_BY_UNSPECIFIED0
LIST_DATASET_IMAGES_SORT_BY_CREATED_AT1
LIST_DATASET_IMAGES_SORT_BY_CHARACTER_NAME2

StripListMediaSortBy

NameNumberDescription
LIST_MEDIA_SORT_BY_UNSPECIFIED0
LIST_MEDIA_SORT_BY_CREATED_AT1
LIST_MEDIA_SORT_BY_DELETED_AT2
LIST_MEDIA_SORT_BY_STATUS3
LIST_MEDIA_SORT_BY_TYPE4
LIST_MEDIA_SORT_BY_USER_EMAIL5
LIST_MEDIA_SORT_BY_CHARACTER_NAME6

StripListPopularExamplesSortBy

NameNumberDescription
LIST_POPULAR_EXAMPLES_SORT_BY_UNSPECIFIED0
LIST_POPULAR_EXAMPLES_SORT_BY_USAGE_COUNT1
LIST_POPULAR_EXAMPLES_SORT_BY_CREATED_AT2

StripListUsersSortBy

NameNumberDescription
LIST_USERS_SORT_BY_UNSPECIFIED0
LIST_USERS_SORT_BY_CREATED_AT1
LIST_USERS_SORT_BY_UPDATED_AT2
LIST_USERS_SORT_BY_CANCELLED_AT3
LIST_USERS_SORT_BY_REFERRAL_CODE4

StripPopularUsageType

NameNumberDescription
POPULAR_USAGE_TYPE_UNSPECIFIED0All usage
POPULAR_USAGE_TYPE_WELCOME1cost = 0
POPULAR_USAGE_TYPE_NORMAL2cost > 0, excluding content-dump rows

UserStatusFilter

NameNumberDescription
USER_STATUS_FILTER_UNSPECIFIED0
USER_STATUS_FILTER_ALL1
USER_STATUS_FILTER_ACTIVE2
USER_STATUS_FILTER_INACTIVE3
USER_STATUS_FILTER_CANCELLED4

StripService

Method NameRequest TypeResponse TypeDescription
StripListUsersStripListUsersRequestStripListUsersResponse
StripUpdateUserStripUpdateUserRequestStripUpdateUserResponse
StripUpdateUserProcessorsStripUpdateUserProcessorsRequestStripUpdateUserProcessorsResponse
StripBypassUserKYCStripBypassUserKYCRequestStripBypassUserKYCResponse
StripSyncUserOndatoVerificationStripSyncUserOndatoVerificationRequestStripSyncUserOndatoVerificationResponse
StripListCharactersStripListCharactersRequestStripListCharactersResponse
StripUpdateCharacterStripUpdateCharacterRequestStripUpdateCharacterResponse
StripBypassCharacterOnboardingChecksStripBypassCharacterOnboardingChecksRequestStripBypassCharacterOnboardingChecksResponse
StripCreateCharacterStripCreateCharacterRequestStripCreateCharacterResponse
StripDeleteCharacterStripDeleteCharacterRequestStripDeleteCharacterResponse
StripListMediaStripListMediaRequestStripListMediaResponse
StripFailMediaStripFailMediaRequestStripFailMediaResponse
StripListPopularExamplesStripListPopularExamplesRequestStripListPopularExamplesResponse
StripListPopularCategoriesStripListPopularCategoriesRequestStripListPopularCategoriesResponse
StripListDatasetImagesStripListDatasetImagesRequestStripListDatasetImagesResponse
StripListLikenessReviewsStripListLikenessReviewsRequestStripListLikenessReviewsResponse
StripResolveLikenessReviewStripResolveLikenessReviewRequestStripResolveLikenessReviewResponse
StripListLikenessHistoryStripListLikenessHistoryRequestStripListLikenessHistoryResponse
StripLogAuditStripLogAuditRequestStripLogAuditResponse
StripListAuditLogsStripListAuditLogsRequestStripListAuditLogsResponse
StripGetAuditLogStripGetAuditLogRequestStripGetAuditLogResponse
StripSaveFilterPresetStripSaveFilterPresetRequestStripFilterPresetSaved filter presets for admin list views
StripListFilterPresetsStripListFilterPresetsRequestStripListFilterPresetsResponse
StripDeleteFilterPresetStripDeleteFilterPresetRequestStripDeleteFilterPresetResponse
StripGetDashboardStatsStripGetDashboardStatsRequestStripGetDashboardStatsResponseDashboard statistics
StripGetSchemaStripGetSchemaRequestStripGetSchemaResponse
StripRunReadonlyQueryStripRunReadonlyQueryRequestStripRunReadonlyQueryResponse
StripGetUserRoleStripGetUserRoleRequestStripGetUserRoleResponseRole management (RBAC)
StripListUserRolesStripListUserRolesRequestStripListUserRolesResponse
StripSetUserRoleStripSetUserRoleRequestStripSetUserRoleResponse
StripDeleteUserRoleStripDeleteUserRoleRequestStripDeleteUserRoleResponse
StripCreateClerkUserStripCreateClerkUserRequestStripCreateClerkUserResponseClerk user management (content-team onboarding)
StripDeleteClerkUserStripDeleteClerkUserRequestStripDeleteClerkUserResponse
StripFoxy360CreateThreadStripFoxy360CreateThreadRequestStripFoxy360CreateThreadResponseFoxy360 run/thread/message/artifact retrieval
StripFoxy360SendMessageStripFoxy360SendMessageRequestStripFoxy360SendMessageResponse
StripFoxy360GetRunStripFoxy360GetRunRequestStripFoxy360GetRunResponse
StripFoxy360ListMessagesStripFoxy360ListMessagesRequestStripFoxy360ListMessagesResponse
StripFoxy360ListArtifactsStripFoxy360ListArtifactsRequestStripFoxy360ListArtifactsResponse
StripListAvailableCharactersStripListAvailableCharactersRequestStripListAvailableCharactersResponseShop VI catalogue

Scalar Value Types

.proto TypeNotesC++JavaPythonGoC#PHPRuby
doubledoubledoublefloatfloat64doublefloatFloat
floatfloatfloatfloatfloat32floatfloatFloat
int32Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead.int32intintint32intintegerBignum or Fixnum (as required)
int64Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead.int64longint/longint64longinteger/stringBignum
uint32Uses variable-length encoding.uint32intint/longuint32uintintegerBignum or Fixnum (as required)
uint64Uses variable-length encoding.uint64longint/longuint64ulonginteger/stringBignum or Fixnum (as required)
sint32Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s.int32intintint32intintegerBignum or Fixnum (as required)
sint64Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s.int64longint/longint64longinteger/stringBignum
fixed32Always four bytes. More efficient than uint32 if values are often greater than 2^28.uint32intintuint32uintintegerBignum or Fixnum (as required)
fixed64Always eight bytes. More efficient than uint64 if values are often greater than 2^56.uint64longint/longuint64ulonginteger/stringBignum
sfixed32Always four bytes.int32intintint32intintegerBignum or Fixnum (as required)
sfixed64Always eight bytes.int64longint/longint64longinteger/stringBignum
boolboolbooleanbooleanboolboolbooleanTrueClass/FalseClass
stringA string must always contain UTF-8 encoded or 7-bit ASCII text.stringStringstr/unicodestringstringstringString (UTF-8)
bytesMay contain any arbitrary sequence of bytes.stringByteStringstr[]byteByteStringstringString (ASCII-8BIT)