ApiKey represents API key metadata returned to clients.
| Field | Type | Label | Description |
| id | string | id is the unique identifier of the API key record. |
|
| name | string | name is a client-defined label for the API key. |
|
| key_prefix | string | key_prefix is the non-secret prefix used for lookup and display. |
|
| created_at | google.protobuf.Timestamp | created_at is when the API key was created. |
|
| last_used | google.protobuf.Timestamp | optional | last_used is when the API key was most recently used. |
AudioUpload contains raw audio bytes provided by the client for upload.
| Field | Type | Label | Description |
| data | bytes | data is the raw binary payload of the audio file. |
|
| mime_type | string | mime_type is the audio media type, for example "audio/mpeg". |
AuthenticateRequest contains login credentials.
| Field | Type | Label | Description |
| string | email is the account email used for authentication. |
||
| password | string | password is the plaintext password supplied for verification. |
AuthenticateResponse reports authentication status and user context.
| Field | Type | Label | Description |
| success | bool | success indicates whether authentication succeeded. |
|
| user | User | optional | user is set when authentication succeeds and user data is returned. |
CreateApiKeyRequest creates a named API key for a user.
| Field | Type | Label | Description |
| user_id | string |
|
|
| name | string |
|
CreateApiKeyResponse returns key metadata and a one-time raw key value.
| Field | Type | Label | Description |
| api_key | ApiKey |
|
|
| raw_key | string | raw_key is only returned at creation time and should be stored securely. |
CreateNoteRequest defines payload required to create a note.
| Field | Type | Label | Description |
| user_id | string | user_id is the target user identifier. |
|
| content | string | content is the note body text to store. |
|
| tags | string | repeated | tags are initial tag names to associate with the note. |
| images | ImageUpload | repeated | images are image files to attach during note creation. |
| audios | AudioUpload | repeated | audios are audio files to attach during note creation. |
CreateNoteResponse returns the created note.
| Field | Type | Label | Description |
| note | Note |
|
DeleteAccountRequest permanently deletes a user and all of their data.
| Field | Type | Label | Description |
| user_id | string | user_id is the account to delete. |
|
| password | string | password is the account's current password; required unless called with M2M auth. |
DeleteAccountResponse reports the outcome of an account deletion.
| Field | Type | Label | Description |
| success | bool | success is true when the account no longer exists. |
DeleteApiKeyRequest identifies an API key to revoke.
| Field | Type | Label | Description |
| user_id | string |
|
|
| key_id | string |
|
DeleteApiKeyResponse reports whether an API key deletion occurred.
| Field | Type | Label | Description |
| success | bool |
|
DeleteNoteRequest identifies a note to delete.
| Field | Type | Label | Description |
| user_id | string | user_id is the target user identifier. |
|
| id | string | id is the unique identifier of the note to delete. |
DeleteNoteResponse reports whether a note deletion occurred.
| Field | Type | Label | Description |
| success | bool |
|
ExportDataRequest requests a full export of a user's data.
| Field | Type | Label | Description |
| user_id | string | user_id is the account to export. |
ExportDataResponse is one item of a streamed data export. The stream sends
the user first, then profile_image_url if the user has an uploaded profile
image, then every tag, then every note in creation order. Media
URLs are signed GCS URLs that expire one hour after they are streamed.
| Field | Type | Label | Description |
| user | User | user is the account profile and settings. |
|
| tag | Tag | tag is one of the user's tags. |
|
| note | Note | note is one note with its tags and media. |
|
| profile_image_url | string | profile_image_url is a signed URL for the uploaded profile image. |
GetNoteRequest identifies a note to fetch by id.
| Field | Type | Label | Description |
| user_id | string | user_id is the target user identifier. |
|
| id | string | id is the unique identifier of the note to fetch. |
GetNoteResponse returns the requested note when found.
| Field | Type | Label | Description |
| note | Note |
|
GetProfileImageURLRequest resolves a stored avatar key to a URL.
| Field | Type | Label | Description |
| key | string | key is the storage object key returned in User.image. |
|
| user_id | string | user_id selects whose avatar to resolve. M2M callers that omit it must pass a "profiles/{userId}/..." key, whose owner segment is used. API key callers may only resolve their own. |
GetProfileImageURLResponse returns a short-lived URL for the image.
| Field | Type | Label | Description |
| url | string |
|
GetRandomNotesRequest requests a random sample of notes.
| Field | Type | Label | Description |
| user_id | string | user_id is the target user identifier. |
|
| count | int32 | count is the number of random notes requested. |
GetRandomNotesResponse returns a random sample of notes.
| Field | Type | Label | Description |
| notes | Note | repeated |
|
GetStatsRequest requests aggregate statistics.
| Field | Type | Label | Description |
| user_id | string | user_id scopes stats to a single user. Empty returns global stats for M2M callers and the authenticated user's stats otherwise. |
GetStatsResponse contains aggregate note and tag metrics.
| Field | Type | Label | Description |
| total_blips | int64 | total_blips is the total number of notes. |
|
| unique_tags | int64 | unique_tags is the number of distinct tags. |
|
| words_written | int64 | words_written is the total word count across matching notes. |
GetUserByStripeCustomerIdRequest fetches a user by Stripe customer id.
| Field | Type | Label | Description |
| stripe_customer_id | string |
|
GetUserByStripeCustomerIdResponse returns the matching user when found.
| Field | Type | Label | Description |
| user | User | optional |
|
GetUserRequest fetches a user by id.
| Field | Type | Label | Description |
| user_id | string |
|
GetUserResponse returns a user record.
| Field | Type | Label | Description |
| user | User |
|
GetUserSettingsRequest fetches mutable user settings fields.
| Field | Type | Label | Description |
| user_id | string |
|
GetUserSettingsResponse returns settings on the User message.
| Field | Type | Label | Description |
| user | User |
|
ImageUpload contains raw image bytes provided by the client for upload.
| Field | Type | Label | Description |
| data | bytes | data is the raw binary payload of the image file. |
|
| mime_type | string | mime_type is the image media type, for example "image/jpeg". |
ListApiKeysRequest requests API keys for a user.
| Field | Type | Label | Description |
| user_id | string |
|
ListApiKeysResponse returns all API key metadata for a user.
| Field | Type | Label | Description |
| api_keys | ApiKey | repeated |
|
ListNotesRequest defines filters and pagination for listing notes.
user_id is currently accepted for compatibility but is expected to match the
authenticated principal from server auth context.
| Field | Type | Label | Description |
| user_id | string | user_id is the target user identifier. |
|
| search | string | search is free-text search input and may include tag: filters. |
|
| tags | string | repeated | tags are additional tag names to filter by. |
| start_date | string | start_date is an inclusive lower bound timestamp in ISO 8601 format. |
|
| end_date | string | end_date is an inclusive upper bound timestamp in ISO 8601 format. |
|
| limit | int32 | limit is the maximum number of results to return. |
|
| offset | int32 | offset is the number of results to skip before returning rows. |
ListNotesResponse returns a page of notes and paging metadata.
| Field | Type | Label | Description |
| notes | Note | repeated | notes is the requested page of notes. |
| total | int32 | total is the total result count across all pages. |
|
| limit | int32 | limit echoes the effective page size. |
|
| offset | int32 | offset echoes the page offset. |
ListTagsRequest requests all tags for a user.
| Field | Type | Label | Description |
| user_id | string | user_id is the target user identifier. |
ListTagsResponse returns all tags for a user.
| Field | Type | Label | Description |
| tags | Tag | repeated |
|
Note represents a user-authored note and its associated metadata.
| Field | Type | Label | Description |
| id | string | id is the unique identifier of the note. |
|
| content | string | content is the note body text. |
|
| tags | string | repeated | tags lists normalized tag names associated with the note. |
| created_at | google.protobuf.Timestamp | created_at is when the note was created. |
|
| updated_at | google.protobuf.Timestamp | updated_at is when the note was last modified. |
|
| images | NoteImage | repeated | images lists image attachments associated with the note. |
| audios | NoteAudio | repeated | audios lists audio attachments associated with the note. |
NoteAudio represents an audio attachment associated with a note.
| Field | Type | Label | Description |
| id | string | id is the unique identifier of the note audio attachment. |
|
| url | string | url is the publicly accessible URL for the stored audio object. |
|
| transcribed_text | string | transcribed_text contains transcription output when available. |
|
| mime_type | string | mime_type is the media type of the stored audio. |
|
| created_at | google.protobuf.Timestamp | created_at is when the audio attachment was created. |
NoteImage represents an image attachment associated with a note.
| Field | Type | Label | Description |
| id | string | id is the unique identifier of the note image. |
|
| url | string | url is the publicly accessible URL for the stored image object. |
|
| extracted_text | string | extracted_text contains OCR output for the image when available. |
|
| mime_type | string | mime_type is the media type of the stored image. |
|
| created_at | google.protobuf.Timestamp | created_at is when the image attachment was created. |
RegisterRequest contains account registration credentials.
| Field | Type | Label | Description |
| string | email is the unique email for the new account. |
||
| password | string | password is the plaintext password supplied at registration. |
RegisterResponse returns the created user record.
| Field | Type | Label | Description |
| user | User |
|
Tag represents a user tag and optional usage count in list responses.
| Field | Type | Label | Description |
| id | string | id is the unique identifier of the tag. |
|
| name | string | name is the normalized tag name. |
|
| count | int32 | count is the number of notes currently using the tag. |
|
| created_at | google.protobuf.Timestamp | created_at is when the tag was created. |
UpdateNoteRequest defines partial note updates and attachment additions.
| Field | Type | Label | Description |
| user_id | string | user_id is the target user identifier. |
|
| id | string | id is the unique identifier of the note to update. |
|
| content | string | optional | content updates the note body when provided. |
| tags | string | repeated | tags is the tag list used when update_tags is true. |
| update_tags | bool | update_tags controls whether existing tags are replaced from tags. |
|
| add_images | ImageUpload | repeated | add_images appends new image attachments to the note. |
| add_audios | AudioUpload | repeated | add_audios appends new audio attachments to the note. |
UpdateNoteResponse returns the updated note.
| Field | Type | Label | Description |
| note | Note |
|
UpdateUserSettingsRequest updates profile and integration settings.
| Field | Type | Label | Description |
| user_id | string |
|
|
| notion_key | string | optional |
|
| name | string | optional |
|
| password | string | optional |
|
| notion_database_name | string | optional |
|
| profile_image_upload | ImageUpload | optional |
|
| clear_profile_image | bool | optional |
|
| current_password | string | optional | Required when password is set; must match the stored password. |
| ai_enabled | bool | optional | ai_enabled opts the user in or out of AI processing when set. |
UpdateUserSettingsResponse returns the updated user settings view.
| Field | Type | Label | Description |
| user | User |
|
UpdateUserStripeCustomerRequest updates customer-level Stripe profile
fields (name, billing address) synced from Stripe webhook events.
All optional fields are only persisted when set; pass an empty/null value
to leave the existing column unchanged. Empty strings explicitly clear
the field.
| Field | Type | Label | Description |
| user_id | string |
|
|
| name | string | optional | name is the customer's display name on the Stripe customer record. |
| billing_line1 | string | optional | billing_line1 is the first line of the billing address. |
| billing_line2 | string | optional | billing_line2 is the second line of the billing address. |
| billing_city | string | optional | billing_city is the city of the billing address. |
| billing_state | string | optional | billing_state is the state or region of the billing address. |
| billing_postal_code | string | optional | billing_postal_code is the postal code of the billing address. |
| billing_country | string | optional | billing_country is the ISO-3166-1 alpha-2 country code. |
| stripe_event_id | string | optional | Non-empty IDs are deduplicated globally across both Stripe update RPCs. |
UpdateUserStripeCustomerResponse returns the updated user record.
| Field | Type | Label | Description |
| user | User |
|
UpdateUserSubscriptionRequest updates subscription billing fields.
Optional fields are only persisted when set; pass an empty/null value to
leave the existing column unchanged. cancel_at_period_end is always written.
| Field | Type | Label | Description |
| user_id | string |
|
|
| subscription_status | string |
|
|
| stripe_customer_id | string | optional |
|
| subscription_end | google.protobuf.Timestamp | optional |
|
| stripe_subscription_id | string | optional | stripe_subscription_id sets the Stripe subscription resource id. |
| stripe_price_id | string | optional | stripe_price_id sets the Stripe price id the user is subscribed to. |
| cancel_at_period_end | bool | cancel_at_period_end sets whether the subscription will cancel at the end of the current billing period. |
|
| current_period_start | google.protobuf.Timestamp | optional | current_period_start sets the start of the current billing period. |
| stripe_event_id | string | optional | Non-empty IDs are deduplicated globally across both Stripe update RPCs. |
| expected_stripe_customer_id | string | optional | When non-empty, the update applies only if the user's stored Stripe customer id still equals this value, checked atomically with the write. On mismatch nothing is written, stripe_event_id is not recorded, and the RPC returns FAILED_PRECONDITION. |
UpdateUserSubscriptionResponse returns the updated user record.
| Field | Type | Label | Description |
| user | User |
|
User represents account profile and subscription settings.
| Field | Type | Label | Description |
| id | string | id is the unique identifier of the user. |
|
| string | email is the user's primary login email. |
||
| name | string | optional | name is the user's display name when set. |
| image | string | optional | image is the storage object key for the user's avatar. Resolve it to a URL via UserSettingsService.GetProfileImageURL — never use directly as an <img src>. |
| subscription_status | string | subscription_status is the billing tier, such as "free" or "pro". |
|
| subscription_end | google.protobuf.Timestamp | optional | subscription_end is when the current subscription period ends. |
| created_at | google.protobuf.Timestamp | created_at is when the user account was created. |
|
| stripe_customer_id | string | optional | stripe_customer_id links the user to a Stripe customer record. |
| notion_key | string | optional | notion_key is write-only and is never populated in responses; see has_notion_key. |
| updated_at | google.protobuf.Timestamp | updated_at is when the user record was last updated. |
|
| disabled | bool | disabled reports whether account access is currently disabled. |
|
| disabled_reason | DisabledReason | optional | disabled_reason explains why the account is disabled when disabled is true. |
| notion_database_name | string | optional | notion_database_name is the Notion database used for sync. |
| stripe_subscription_id | string | optional | stripe_subscription_id is the Stripe subscription resource id. |
| stripe_price_id | string | optional | stripe_price_id is the Stripe price the user is currently subscribed to. |
| cancel_at_period_end | bool | cancel_at_period_end reports whether the subscription will cancel at the end of the current billing period. |
|
| current_period_start | google.protobuf.Timestamp | optional | current_period_start is the start of the current billing period. |
| billing_line1 | string | optional | billing_line1 is the first line of the user's billing address. |
| billing_line2 | string | optional | billing_line2 is the second line of the user's billing address. |
| billing_city | string | optional | billing_city is the city of the user's billing address. |
| billing_state | string | optional | billing_state is the state or region of the user's billing address. |
| billing_postal_code | string | optional | billing_postal_code is the postal code of the user's billing address. |
| billing_country | string | optional | billing_country is the ISO-3166-1 alpha-2 country code of the user's billing address. |
| has_notion_key | bool | has_notion_key reports whether a Notion API token is stored. The token itself is never returned. |
|
| ai_enabled | bool | ai_enabled reports whether the user opted in to AI processing such as tag generation, OCR, and audio transcription. Defaults to false. |
|
| billing_provider | string | optional | billing_provider names the billing system that owns the user's subscription, such as "stripe" or "play". It is unset for users that have never subscribed. |
VerifyApiKeyRequest verifies a raw API key value.
| Field | Type | Label | Description |
| raw_key | string |
|
VerifyApiKeyResponse reports verification status and associated user.
| Field | Type | Label | Description |
| valid | bool |
|
|
| user_id | string | optional |
|
VerifyPlayPurchaseRequest submits a Google Play subscription purchase for
verification.
| Field | Type | Label | Description |
| purchase_token | string | purchase_token is the token returned by Google Play Billing for the purchase. |
|
| product_id | string | product_id is the Google Play subscription product id that was purchased. |
VerifyPlayPurchaseResponse returns the user after the purchase is applied.
| Field | Type | Label | Description |
| user | User | user is the caller's account with its updated subscription state. |
DisabledReason describes why an account was disabled.
| Name | Number | Description |
| UNSPECIFIED | 0 | UNSPECIFIED indicates no disable reason was provided. |
| TERMS_VIOLATION | 1 | TERMS_VIOLATION indicates the account was disabled for policy violations. |
| SECURITY_CONCERN | 2 | SECURITY_CONCERN indicates suspicious or unsafe account activity. |
| USER_REQUEST | 3 | USER_REQUEST indicates the user requested account disablement. |
| PAYMENT_ISSUE | 4 | PAYMENT_ISSUE indicates account disablement due to billing problems. |
| OTHER | 5 | OTHER indicates a disable reason not covered by predefined values. |
AccountService manages whole-account operations.
| Method Name | Request Type | Response Type | Description |
| DeleteAccount | DeleteAccountRequest | DeleteAccountResponse | DeleteAccount disables the account and revokes its API keys, cancels billing, deletes stored media, and removes all account data. If a step after the disable fails, the user is signed out and an M2M (support) call with the same user_id completes the deletion. |
| ExportData | ExportDataRequest | ExportDataResponse stream | ExportData streams all of the caller's data. |
ApiKeysService manages API key lifecycle and verification.
| Method Name | Request Type | Response Type | Description |
| CreateApiKey | CreateApiKeyRequest | CreateApiKeyResponse | CreateApiKey creates a new API key. |
| ListApiKeys | ListApiKeysRequest | ListApiKeysResponse | ListApiKeys lists API keys for a user. |
| DeleteApiKey | DeleteApiKeyRequest | DeleteApiKeyResponse | DeleteApiKey revokes an API key. |
| VerifyApiKey | VerifyApiKeyRequest | VerifyApiKeyResponse | VerifyApiKey validates an API key and resolves its user. |
AuthService manages user auth, identity lookups, and subscription updates.
| Method Name | Request Type | Response Type | Description |
| Register | RegisterRequest | RegisterResponse | Register creates a new user account. |
| Authenticate | AuthenticateRequest | AuthenticateResponse | Authenticate validates credentials and returns user context. |
| Login | AuthenticateRequest | CreateApiKeyResponse | Login validates credentials and issues a revocable user API key for a native client. The raw key is returned only once; use VerifyApiKey/GetUser to restore user context. |
| GetUser | GetUserRequest | GetUserResponse | GetUser fetches a user by id. |
| GetUserByStripeCustomerId | GetUserByStripeCustomerIdRequest | GetUserByStripeCustomerIdResponse | GetUserByStripeCustomerId fetches a user by Stripe customer id. |
| UpdateUserSubscription | UpdateUserSubscriptionRequest | UpdateUserSubscriptionResponse | UpdateUserSubscription updates billing-related subscription state. |
| UpdateUserStripeCustomer | UpdateUserStripeCustomerRequest | UpdateUserStripeCustomerResponse | UpdateUserStripeCustomer syncs Stripe customer profile fields (name, billing address) from Stripe webhook events. |
BillingService handles subscriptions purchased outside Stripe.
| Method Name | Request Type | Response Type | Description |
| VerifyPlayPurchase | VerifyPlayPurchaseRequest | VerifyPlayPurchaseResponse | VerifyPlayPurchase verifies a Google Play subscription purchase with Google and applies it to the authenticated user's account. |
NotesService manages note CRUD, attachment uploads, and note queries.
| Method Name | Request Type | Response Type | Description |
| ListNotes | ListNotesRequest | ListNotesResponse | ListNotes returns notes matching filters and pagination options. |
| CreateNote | CreateNoteRequest | CreateNoteResponse | CreateNote creates a new note with optional tags and attachments. |
| GetNote | GetNoteRequest | GetNoteResponse | GetNote returns one note by id. |
| UpdateNote | UpdateNoteRequest | UpdateNoteResponse | UpdateNote updates note content, tags, and adds attachments. |
| DeleteNote | DeleteNoteRequest | DeleteNoteResponse | DeleteNote deletes one note by id. |
| GetRandomNotes | GetRandomNotesRequest | GetRandomNotesResponse | GetRandomNotes returns a random sample of notes. |
StatsService provides aggregate usage metrics.
| Method Name | Request Type | Response Type | Description |
| GetStats | GetStatsRequest | GetStatsResponse | GetStats returns aggregate note, tag, and word-count statistics. |
TagsService provides tag listing for notes.
| Method Name | Request Type | Response Type | Description |
| ListTags | ListTagsRequest | ListTagsResponse | ListTags returns all tags for a user. |
UserSettingsService reads and updates profile and integration settings.
| Method Name | Request Type | Response Type | Description |
| GetUserSettings | GetUserSettingsRequest | GetUserSettingsResponse | GetUserSettings returns settings represented in the User message. |
| UpdateUserSettings | UpdateUserSettingsRequest | UpdateUserSettingsResponse | UpdateUserSettings updates mutable user settings fields. |
| GetProfileImageURL | GetProfileImageURLRequest | GetProfileImageURLResponse | GetProfileImageURL resolves a profile image key to a short-lived URL. |
| .proto Type | Notes | C++ | Java | Python | Go | C# | PHP | Ruby |
| double | double | double | float | float64 | double | float | Float | |
| float | float | float | float | float32 | float | float | Float | |
| int32 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) |
| int64 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. | int64 | long | int/long | int64 | long | integer/string | Bignum |
| uint32 | Uses variable-length encoding. | uint32 | int | int/long | uint32 | uint | integer | Bignum or Fixnum (as required) |
| uint64 | Uses variable-length encoding. | uint64 | long | int/long | uint64 | ulong | integer/string | Bignum or Fixnum (as required) |
| sint32 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) |
| sint64 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. | int64 | long | int/long | int64 | long | integer/string | Bignum |
| fixed32 | Always four bytes. More efficient than uint32 if values are often greater than 2^28. | uint32 | int | int | uint32 | uint | integer | Bignum or Fixnum (as required) |
| fixed64 | Always eight bytes. More efficient than uint64 if values are often greater than 2^56. | uint64 | long | int/long | uint64 | ulong | integer/string | Bignum |
| sfixed32 | Always four bytes. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) |
| sfixed64 | Always eight bytes. | int64 | long | int/long | int64 | long | integer/string | Bignum |
| bool | bool | boolean | boolean | bool | bool | boolean | TrueClass/FalseClass | |
| string | A string must always contain UTF-8 encoded or 7-bit ASCII text. | string | String | str/unicode | string | string | string | String (UTF-8) |
| bytes | May contain any arbitrary sequence of bytes. | string | ByteString | str | []byte | ByteString | string | String (ASCII-8BIT) |