# components.schemas.CursorListResponseProjectPIIFindingDTO.properties.pagination.description
Pagination cursors for fetching adjacent pages.

# components.schemas.CursorListResponsePublicV1ProjectListItem.properties.pagination.description
Pagination cursors for fetching adjacent pages.

# components.schemas.CursorListResponseV1ProjectCollaborator.properties.pagination.description
Pagination cursors for fetching adjacent pages.

# components.schemas.CursorListResponseV1SecurityScanSummary.properties.pagination.description
Pagination cursors for fetching adjacent pages.

# components.schemas.CursorListResponseV1WorkspaceMember.properties.pagination.description
Pagination cursors for fetching adjacent pages.

# components.schemas.GetMeWorkspace.properties.role.description
Caller's role in the workspace. One of: owner, admin, member, viewer, collaborator. More values may be added; clients must tolerate unknown values.

# components.schemas.ListData.properties.label.description
Human-readable name of this breakdown dimension.

# components.schemas.ListDataPoint.properties.value.description
Count of visits or events attributed to this item.

# components.schemas.ListsGroup.properties.country.description
Breakdown of traffic by visitor country.

# components.schemas.ListsGroup.properties.source.description
Breakdown of traffic by referral source.

# components.schemas.Pagination.properties.has_more.description
Whether more results are available beyond this page

# components.schemas.Pagination.properties.next_cursor.description
Cursor for the next page; null when there are no more results

# components.schemas.ProjectPIIFindingDTO.properties.chat_message_id.description
Trajectory event ID for chat-source labels

# components.schemas.ProjectPIIFindingDTO.properties.chat_upload_id.description
Uploaded file ID for upload-source labels

# components.schemas.ProjectPIIFindingDTO.properties.likelihood.description
DLP likelihood: VERY_UNLIKELY, UNLIKELY, POSSIBLE, LIKELY, or VERY_LIKELY

# components.schemas.ProjectPIIFindingDTO.properties.scan_id.description
Workflow scan run ID that recorded the label

# components.schemas.ProjectPIIFindingDTO.properties.source.description
Where the PII was detected: chat, upload, cloud_storage, or cloud_sql

# components.schemas.ProjectPIIFindingDTO.properties.storage_path.description
Cloud storage object path for cloud_storage labels

# components.schemas.ProjectTrendResponse.properties.currentVisitors.description
Number of visitors currently active on the site.

# components.schemas.PublicV1CreateProjectResponse.properties.description.description
Description supplied by the caller on create or update

# components.schemas.PublicV1CreateProjectResponse.properties.description.examples[]
A landing page for Acme with a hero, features, and pricing.

# components.schemas.PublicV1CreateProjectResponse.properties.job_id.description
Remix job ID for tracking progress when source_project_id is provided

# components.schemas.PublicV1CreateProjectResponse.properties.message_id.description
User message ID, present when initial_message was provided

# components.schemas.PublicV1CreateProjectResponse.properties.preview_url.description
Static-preview URL for the project, on the workspace's branded host when it has one. Resolves once the first build completes. Absent on remix creates, which return job_id before the project exists.

# components.schemas.PublicV1CreateProjectResponse.properties.status.description
Provisioning status of the project, not agent build progress. 'completed' means the project scaffold was created, and is set before the agent has finished the initial message, so the code at that point is often an empty starter page. To check whether the agent finished building, poll GET /v1/messages/{message_id}. One of: in_progress, completed, failed. More values may be added; clients must tolerate unknown values.

# components.schemas.PublicV1CreateProjectResponse.properties.visibility.description
Project visibility: draft, private, workspace_view, public

# components.schemas.PublicV1ErrorEnvelope.description
Standard error envelope returned by every public API error response.

# components.schemas.PublicV1ErrorEnvelope.properties.detail.description
Optional human-readable explanation specific to this occurrence: remediation guidance on handler errors, the validation summary on request-validation errors.

# components.schemas.PublicV1ErrorEnvelope.properties.errors.description
Optional field-level error details on validation failures.

# components.schemas.PublicV1ErrorEnvelope.properties.props.description
Optional error-type-specific properties, present on some errors (for example sso_reauth_required includes the workspace and its SSO providers).

# components.schemas.PublicV1ErrorEnvelope.properties.request_id.description
Identifier of this request, echoed from the X-Request-Id response header. Quote it when reporting a failure.

# components.schemas.PublicV1ErrorEnvelope.properties.title.description
Short human-readable summary, safe to surface to an end user. May change between occurrences; do not machine-consume.

# components.schemas.PublicV1ErrorEnvelope.properties.type.description
Stable machine-readable error type in snake_case. Clients may switch on it; new types are additive.

# components.schemas.PublicV1PatchProjectBody.properties.description.description
Project description. Does not affect generated_description, which the agent maintains on its own.

# components.schemas.PublicV1PatchProjectBody.properties.description.examples[]
A landing page for my SaaS product with a hero, features, and pricing.

# components.schemas.PublicV1ProjectAnalyticsBody.properties.lists.description
Top pages, sources, devices, and countries. Present when series=historical.

# components.schemas.PublicV1ProjectAnalyticsBody.properties.timeSeries.description
Historical metrics over time. Present when series=historical.

# components.schemas.PublicV1ProjectAnalyticsBody.properties.trend.description
Real-time visitor trend. Present when series=trend.

# components.schemas.PublicV1ProjectCreateInputBody.properties.description.examples[]
A landing page for my SaaS product with a hero, features, and pricing.

# components.schemas.PublicV1ProjectCreateInputBody.properties.ephemeral_files.description
Deprecated (ENT-3330): both create-time file fields are slated for removal in favor of a unified attachment mechanism, but this is still the only supported way to attach uploads on create meanwhile. Ephemeral file references returned by POST /v1/files/ephemeral-upload-url; requires initial_message. file_id is the full "ephemeral/{user_id}/{uuid}" path; file_name/mime_type/type are carried through to the promoted file ref so the chat renderer keeps image-vs-file distinction. Copied into the new project's bucket and attached to the initial message after the project is created.

# components.schemas.PublicV1ProjectCreateInputBody.properties.file_urls.description
Public HTTPS image or HTML file URLs to fetch server-side and attach to the initial message. Currently supports JPEG, PNG, WebP, and HTML.

# components.schemas.PublicV1ProjectCreateInputBody.properties.files.description
Deprecated (ENT-3330): both create-time file fields are slated for removal in favor of a unified attachment mechanism; use ephemeral_files meanwhile. Pre-uploaded user-scoped file references ("{user_id}/{uuid}/{name}" from the deprecated POST /v1/files/upload-url endpoint), attached in place without copying; requires initial_message.

# components.schemas.PublicV1ProjectCreateInputBody.properties.headless.description
Headless mode for the initial message (no human-in-the-loop or interactive tools). Most workspaces run headless by default; setting false requires interactive API access for the workspace and is rejected with 403 otherwise.

# components.schemas.PublicV1ProjectCreateInputBody.properties.initial_message.description
Initial chat message to send after creation

# components.schemas.PublicV1ProjectCreateInputBody.properties.initial_message.examples[]
A landing page for my SaaS product with a hero, features, and pricing.

# components.schemas.PublicV1ProjectCreateInputBody.properties.sandbox_template.description
Sandbox runtime template for the new project. Omit for the default stack; requires a workspace with access to the requested template.

# components.schemas.PublicV1ProjectCreateInputBody.properties.selected_libraries.description
Design system library projects to connect to the new project

# components.schemas.PublicV1ProjectCreateInputBody.properties.source_project_id.description
Ignored when null, empty, or whitespace. Set a non-empty value to remix from a source project.

# components.schemas.PublicV1ProjectCreateInputBody.properties.template_project_id.description
Template project ID to clone from (from list_template_projects)

# components.schemas.PublicV1ProjectCreateInputBody.properties.visibility.description
Project visibility: draft, private, workspace_view, public

# components.schemas.PublicV1ProjectListItem.properties.description.description
Description supplied by the caller on create or update.

# components.schemas.PublicV1ProjectListItem.properties.description.examples[]
Marketing landing page for Acme's product launch.

# components.schemas.PublicV1ProjectListItem.properties.generated_description.description
AI-written summary of what the project does. Absent until the agent has completed a response for the project.

# components.schemas.PublicV1ProjectListItem.properties.generated_description.examples[]
A landing page for Acme with a hero, features, and pricing.

# components.schemas.PublicV1ProjectListItem.properties.project_type.description
Project type. One of: project, library. Absent on older projects. More values may be added; clients must tolerate unknown values.

# components.schemas.PublicV1ProjectListItem.properties.publish_visibility.description
Published visibility. One of: public, private. More values may be added; clients must tolerate unknown values.

# components.schemas.PublicV1ProjectListItem.properties.status.description
Provisioning status of the project, not agent build progress. 'completed' means the project scaffold was created, and is set before the agent has finished the initial message, so the code at that point is often an empty starter page. To check whether the agent finished building, poll GET /v1/messages/{message_id}. One of: in_progress, completed, failed. More values may be added; clients must tolerate unknown values.

# components.schemas.PublicV1ProjectListItem.properties.visibility.description
Project visibility: draft, private, workspace_view, or public.

# components.schemas.PublicV1ProjectRemixInputBody.properties.description.examples[]
A landing page for my SaaS product with a hero, features, and pricing.

# components.schemas.PublicV1ProjectRemixInputBody.properties.include_custom_knowledge.description
Whether remix-style creation should copy custom knowledge

# components.schemas.PublicV1ProjectRemixInputBody.properties.include_history.description
Whether remix-style creation should include chat history

# components.schemas.PublicV1ProjectRemixInputBody.properties.initial_message.description
Initial chat message to send after remix

# components.schemas.PublicV1ProjectRemixInputBody.properties.initial_message.examples[]
A landing page for my SaaS product with a hero, features, and pricing.

# components.schemas.PublicV1ProjectRemixInputBody.properties.remix_mode.description
How to apply message_id: before starts before the message, including includes that message's completed turn. Defaults to including.

# components.schemas.PublicV1ProjectRemixInputBody.properties.skip_initial_remix_message.description
Suppress the default remix success message

# components.schemas.PublicV1ProjectRemixInputBody.properties.source_project_id.description
Source project ID for remix-style creation

# components.schemas.PublicV1PublishProjectInputBody.properties.audience.description
Complete set of group/user grants for visibility 'custom': replaces existing group and user grants, an empty list removes them all, omit to keep the current audience. Grants managed in the UI (org access, email invites) are preserved. Only valid with visibility 'custom'.

# components.schemas.PublicV1PublishProjectInputBody.properties.visibility.description
Who can view the published app: public (anyone with the link), workspace (workspace members only), or custom (only the groups/users in audience). Omit to keep the project's current setting. Clients must tolerate new values.

# components.schemas.PublicV1PublishProjectResponse.properties.visibility.description
Resolved visibility of the published app

# components.schemas.PublicV1PublishStatusResponse.properties.error_class.description
Failure class when status is error: transient (a retry may succeed) or a user_* class (fix the project before republishing). Clients must tolerate new values.

# components.schemas.PublicV1PublishStatusResponse.properties.error_code.description
Machine-readable failure cause when one is recognized. Present only when status is error.

# components.schemas.PublicV1PublishStatusResponse.properties.error_message.description
Human-readable failure reason. Present only when status is error.

# components.schemas.PublicV1PublishStatusResponse.properties.status.description
Deployment status: running (still building or deploying), completed (published — url is set), error (failed — error_message explains why), or unknown. Clients must tolerate new values.

# components.schemas.PublicV1PublishStatusResponse.properties.url.description
Published project URL. Set once status is completed.

# components.schemas.PublicV1UpdatePublishSettingsInputBody.properties.audience.description
Complete set of group/user grants for visibility 'custom': replaces existing group and user grants, an empty list removes them all, omit to keep the current audience. Grants managed in the UI (org access, email invites) are preserved. Only valid with visibility 'custom'.

# components.schemas.PublicV1UpdatePublishSettingsInputBody.properties.is_published.description
Set to false to take the published app offline; visibility and audience settings are kept and apply again on the next publish. true is rejected: publishing requires a deploy via POST /v1/projects/{project_id}/publish.

# components.schemas.PublicV1UpdatePublishSettingsInputBody.properties.visibility.description
Who can view the published app: public (anyone with the link), workspace (workspace members only), or custom (only the groups/users in audience). Omit to leave visibility unchanged. Clients must tolerate new values.

# components.schemas.PublicV1UpdatePublishSettingsResponse.properties.is_published.description
Whether the project is currently published

# components.schemas.PublicV1UpdatePublishSettingsResponse.properties.visibility.description
Resolved visibility of the published app

# components.schemas.PublicV1Workspace.properties.description.examples[]
Marketing site and internal tools for Acme.

# components.schemas.PublicV1Workspace.properties.plan.description
Plan tier. One of: free, pro, business, enterprise. More values may be added; clients must tolerate unknown values.

# components.schemas.PublicV1WorkspaceMember.properties.role.description
Caller's role in the workspace. One of: owner, admin, member, viewer, collaborator. More values may be added; clients must tolerate unknown values.

# components.schemas.PublicV1WorkspaceWithMembership.properties.description.examples[]
Marketing site and internal tools for Acme.

# components.schemas.PublicV1WorkspaceWithMembership.properties.plan.description
Plan tier. One of: free, pro, business, enterprise. More values may be added; clients must tolerate unknown values.

# components.schemas.TimeSeriesData.properties.data.description
Per-bucket values ordered by date, one entry per bucket in the range (bucket size set by the granularity parameter).

# components.schemas.TimeSeriesData.properties.total.description
Period-level aggregate for this metric over the requested range. How it is computed (sum, ratio, or average) and its unit depend on the metric — see the metric field's description.

# components.schemas.TimeSeriesDataPoint.properties.date.description
Bucket start as "YYYY-MM-DD HH:MM:SS" in UTC.

# components.schemas.TimeSeriesDataPoint.properties.value.description
Metric value for this bucket. Unit matches the parent metric — see its description.

# components.schemas.TimeSeriesGroup.properties.bounceRate.description
Bounce rate as a percentage (0-100). Each data point is that bucket's rate; total is the mean across buckets that had at least one visitor.

# components.schemas.TimeSeriesGroup.properties.pageviews.description
Page views. Each data point is that bucket's page-view count; total is the sum over the requested range.

# components.schemas.TimeSeriesGroup.properties.pageviewsPerVisit.description
Page views per visit. Each data point is that bucket's ratio; total is total page views divided by total visitors over the range (not the mean of the per-bucket ratios).

# components.schemas.TimeSeriesGroup.properties.sessionDuration.description
Average session duration in seconds. Each data point is the mean session length for that bucket; total is the mean of the per-bucket values across buckets that had at least one visitor, rounded to whole seconds (it is not a sum).

# components.schemas.TimeSeriesGroup.properties.visitors.description
Unique visitors. Each data point is that bucket's visitor count; total is the sum over the requested range.

# components.schemas.TrendDataPoint.properties.time.description
Bucket start as "YYYY-MM-DD HH:MM:SS" in UTC.

# components.schemas.TrendDataPoint.properties.visits.description
Number of visits recorded in this bucket.

# components.schemas.V1BillingBulkSetMemberCreditLimitInputBody.properties.members.description
Per-member limits to apply (1-1000 entries). Use the workspace default (PATCH /v1/workspaces/{workspace_id}/settings) to cap everyone at once.

# components.schemas.V1BillingCreditLimitRow.properties.monthly_credit_limit.description
Explicit monthly credit cap for this member. Absent means no per-member cap is set and the member inherits the workspace default.

# components.schemas.V1BillingCreditLimitRow.properties.user_id.description
Member the cap applies to. Join GET /v1/workspaces/{workspace_id}/members for display metadata.

# components.schemas.V1BillingCreditLimitsBody.properties.default_monthly_credit_limit.description
Workspace default cap applied to members without an explicit per-member limit. Absent when unset (members are bounded only by the workspace balance).

# components.schemas.V1BillingCreditLimitsBody.properties.pagination.description
Pagination cursors for fetching adjacent pages.

# components.schemas.V1BillingPeriod.properties.end.description
Exclusive end of the period these credit figures cover (RFC3339, UTC).

# components.schemas.V1BillingPeriod.properties.start.description
Inclusive start of the period these credit figures cover (RFC3339, UTC).

# components.schemas.V1BillingUsageBody.properties.entity_count.description
Number of grouped entities across all pages; group_by queries only.

# components.schemas.V1BillingUsageBody.properties.pagination.description
Pagination cursors for fetching adjacent pages.

# components.schemas.V1BillingUsageBody.properties.period.description
The resolved window these rows cover, echoed so callers can see what the server applied.

# components.schemas.V1BillingUsageBody.properties.workspace_total.description
Total matching credits across the whole window — same on every page, not just this page's rows.

# components.schemas.V1BillingUsagePeriod.properties.end.description
Inclusive end of the covered window (YYYY-MM-DD, UTC).

# components.schemas.V1BillingUsagePeriod.properties.group_by.description
Grouping dimension the rows use; group_by queries only.

# components.schemas.V1BillingUsagePeriod.properties.interval.description
Bucket size the rows use; interval queries only.

# components.schemas.V1BillingUsagePeriod.properties.start.description
Inclusive start of the covered window (YYYY-MM-DD, UTC).

# components.schemas.V1BillingUsageRow.properties.connectors.description
Connector credits, e.g. Google Maps requests.

# components.schemas.V1BillingUsageRow.properties.connectors_breakdown.description
Per-connector breakdown. Interval buckets only.

# components.schemas.V1BillingUsageRow.properties.database_breakdown.description
Database server/storage breakdown. Interval buckets only.

# components.schemas.V1BillingUsageRow.properties.display_name.description
Member display name. Present on member-attributed rows (group_by=member, or a query filtered to one user_id) when the caller also holds the members:read scope.

# components.schemas.V1BillingUsageRow.properties.email.description
Member email as stored on the workspace membership (not the user's primary/personal email). Present on member-attributed rows when the caller also holds the members:read scope.

# components.schemas.V1BillingUsageRow.properties.functions.description
Compute credits from functions and workers.

# components.schemas.V1BillingUsageRow.properties.gateway_models.description
Per-model AI Gateway breakdown. Interval buckets only.

# components.schemas.V1BillingUsageRow.properties.period_end.description
Inclusive row end (YYYY-MM-DD, UTC), clamped to the requested window at the edges.

# components.schemas.V1BillingUsageRow.properties.period_start.description
Inclusive row start (YYYY-MM-DD, UTC). Present on interval buckets and the aggregate row.

# components.schemas.V1BillingUsageRow.properties.project_id.description
Project this row aggregates (group_by=project). Join /v1/projects for the name.

# components.schemas.V1BillingUsageRow.properties.run.description
Run-time credits (sum of the per-category fields below).

# components.schemas.V1BillingUsageRow.properties.user_id.description
Member this row aggregates (group_by=member) or is filtered to (user_id).

# components.schemas.V1BulkMemberCreditLimitItem.properties.email.description
Member's workspace email (case-insensitive; the address on the workspace membership, not the user's personal email). Provide exactly one of user_id or email.

# components.schemas.V1BulkMemberCreditLimitItem.properties.monthly_credit_limit.description
A number (0 blocks all spend) to set the cap, or null to clear it (the member inherits the workspace default).

# components.schemas.V1BulkMemberCreditLimitItem.properties.user_id.description
Member user_id (from GET /v1/workspaces/{workspace_id}/members; active members only). Provide exactly one of user_id or email.

# components.schemas.V1BulkMemberCreditLimitResult.properties.email.description
Echoed when the item was addressed by email, so email-addressed results stay correlatable.

# components.schemas.V1BulkMemberCreditLimitResult.properties.user_id.description
The member this result is for (resolved from email when the item was addressed by email).

# components.schemas.V1BulkSetMemberCreditLimitOutputBody.properties.failed.description
Number that failed (see per-item error).

# components.schemas.V1CreateEmbedURLInputBody.properties.parent_origin.description
Exact HTTPS origin (scheme + host, no path) allowed to frame the static preview. The minted token only loads inside a frame served from this origin.

# components.schemas.V1CreateEmbedURLOutputBody.properties.embed_url.description
Origin-bound static-preview URL carrying a short-lived signed token (?__lovable_token=…). Load it in an iframe on the requested parent_origin.

# components.schemas.V1CreateEmbedURLOutputBody.properties.expires_at.description
When the embed URL token expires and stops loading the preview.

# components.schemas.V1CreditHistoryEntry.properties.credits_change.description
Signed change in Lovable credits: positive for grants, negative for expiries and debits.

# components.schemas.V1GetSecurityScanOutputBody.properties.findings.description
Security findings captured in this scan.

# components.schemas.V1GetSecurityScanOutputBody.properties.scanner_runs.description
Per-scanner execution records for this scan.

# components.schemas.V1MessageExportStatus.properties.completed_at.description
When the export reached a terminal state.

# components.schemas.V1MessageExportStatus.properties.download_url.description
One-hour signed URL for the ZIP archive, present while a completed export has not expired.

# components.schemas.V1MessageExportStatus.properties.message_count.description
Number of messages in a completed export.

# components.schemas.V1MessageExportStatus.properties.project_count.description
Number of projects represented in a completed export.

# components.schemas.V1ProjectCloudBody.properties.disk.description
Disk-space telemetry. Omitted while the measurement is temporarily unavailable; retry later.

# components.schemas.V1ProjectCloudBody.properties.environment.description
Cloud environment these values describe.

# components.schemas.V1ProjectCloudBody.properties.instance_tier_label.description
Human-readable tier name as shown in the editor (Tiny, Mini, Small, Medium, Large, X-Large, 2X-Large).

# components.schemas.V1ProjectCloudBody.properties.pause_reason.description
Why the instance was paused (e.g. credit_limit), when recorded. Only present on paused instances.

# components.schemas.V1ProjectCloudBody.properties.postgres_version.description
Postgres major/minor version. Omitted while the lookup is temporarily unavailable.

# components.schemas.V1ProjectCloudBody.properties.region.description
Region the database runs in. Omitted while the lookup is temporarily unavailable.

# components.schemas.V1ProjectCloudBody.properties.resource_pressure.description
CPU/memory/disk-IO pressure alerts over the trailing window. Omitted while the lookup is temporarily unavailable.

# components.schemas.V1ProjectCloudBody.properties.status.description
Database instance lifecycle status. INACTIVE means paused. Cached for up to a minute; omitted while the lookup is temporarily unavailable.

# components.schemas.V1ProjectCloudBody.properties.user_paused.description
True when a user (or the platform) explicitly paused this cloud instance.

# components.schemas.V1ProjectCloudDisk.properties.size_bytes.description
Provisioned size of the database volume in bytes.

# components.schemas.V1ProjectCloudDisk.properties.timestamp.description
When the platform measured these values. Measurements refresh periodically; use this to judge data age.

# components.schemas.V1ProjectCloudDisk.properties.used_bytes.description
Bytes used on the database volume, as last measured by the platform. Measures the whole managed volume, so it exceeds what SQL-level views (e.g. pg_database_size) can see.

# components.schemas.V1ProjectCloudResourcePressure.properties.resources.description
Per-resource pressure signals. Alerts reset when the instance is resized.

# components.schemas.V1ProjectCloudResourcePressure.properties.window_hours.description
Size of the trailing window these signals cover.

# components.schemas.V1ProjectCloudResourceSignal.properties.alert_hours.description
Hours within the window that raised a pressure alert.

# components.schemas.V1ProjectCloudResourceSignal.properties.latest_alert_at.description
Most recent pressure alert in the window, if any.

# components.schemas.V1ProjectCloudResourceSignal.properties.latest_value.description
Reported value of the most recent alert, if any.

# components.schemas.V1ProjectCloudResourceSignal.properties.resource_type.description
Resource under pressure: cpu, memory, or disk_io.

# components.schemas.V1ProjectCollaborator.properties.accepted_at.description
When the user accepted the project invitation. Null if the invite is still pending.

# components.schemas.V1ProjectCollaborator.properties.access_level.description
Access level: owner, admin, write, or read

# components.schemas.V1ProjectCollaborator.properties.display_name.description
Human-readable display name. Falls back to the email when the user has not set a display name.

# components.schemas.V1ProjectCollaborator.properties.email.description
Email address of the collaborator. Empty if the user has no resolvable email (e.g. deleted user records that were not filtered out, or service-account-like users without an email on file).

# components.schemas.V1ProjectCollaborator.properties.invited_at.description
When the user was invited to the project. Null for the project owner.

# components.schemas.V1ProjectCollaborator.properties.invited_by.description
User ID of the inviter. Empty for the project owner.

# components.schemas.V1ProjectCollaborator.properties.is_internal.description
True when the user is internal to the workspace: either a workspace member, or their email belongs to a domain the workspace has verified (typical SSO / JIT provisioning case). Useful for distinguishing internal vs. external collaborators in security reviews.

# components.schemas.V1ProjectCollaborator.properties.is_workspace_member.description
True when the user is a member of the project's workspace. False indicates an ad-hoc project collaborator who has no broader workspace access.

# components.schemas.V1ProjectResponse.properties.description.description
Description supplied by the caller on create or update.

# components.schemas.V1ProjectResponse.properties.description.examples[]
Marketing landing page for Acme's product launch.

# components.schemas.V1ProjectResponse.properties.generated_description.description
AI-written summary of what the project does. Absent until the agent has completed a response for the project.

# components.schemas.V1ProjectResponse.properties.generated_description.examples[]
A landing page for Acme with a hero, features, and pricing.

# components.schemas.V1ProjectResponse.properties.preview_url.description
Static-preview URL for the project, on the workspace's branded host when it has one. Resolves once the first build completes. Opening it requires a Lovable login unless the project is publicly remixable; to frame it from a third-party origin without one, mint an origin-bound token via POST /v1/projects/{project_id}/embed-url.

# components.schemas.V1ProjectResponse.properties.project_type.description
Project type. One of: project, library. Absent on older projects. More values may be added; clients must tolerate unknown values.

# components.schemas.V1ProjectResponse.properties.publish_visibility.description
Published visibility. One of: public, private. More values may be added; clients must tolerate unknown values.

# components.schemas.V1ProjectResponse.properties.status.description
Provisioning status of the project, not agent build progress. 'completed' means the project scaffold was created, and is set before the agent has finished the initial message, so the code at that point is often an empty starter page. To check whether the agent finished building, poll GET /v1/messages/{message_id}. One of: in_progress, completed, failed. More values may be added; clients must tolerate unknown values.

# components.schemas.V1ProjectResponse.properties.visibility.description
Project visibility: draft, private, workspace_view, or public.

# components.schemas.V1SecurityFinding.properties.created_at.description
When this finding was first recorded, UTC.

# components.schemas.V1SecurityFinding.properties.description.examples[]
A public table has row-level security disabled, exposing all rows to anonymous clients.

# components.schemas.V1SecurityFinding.properties.details.description
Raw scanner output (e.g. matched pattern fragments). May be empty due to access restrictions; use 'description' and 'metadata' for the user-facing summary.

# components.schemas.V1SecurityFinding.properties.first_seen_scan_id.description
Scan invocation ID where this finding was first seen.

# components.schemas.V1SecurityFinding.properties.link.description
Link to remediation guidance for this finding.

# components.schemas.V1SecurityFinding.properties.metadata.description
Scanner-specific metadata (file_path, line_number, package, cve, ...)

# components.schemas.V1SecurityFinding.properties.name.examples[]
Row-level security disabled on a public table

# components.schemas.V1SecurityFinding.properties.recurrence.description
Number of consecutive scans this finding has appeared in

# components.schemas.V1SecurityFinding.properties.remediation_difficulty.description
Estimated remediation effort (easy, medium, or hard).

# components.schemas.V1SecurityFinding.properties.scanner_name.description
Name of the scanner that produced this finding.

# components.schemas.V1SecurityFinding.properties.status.description
Finding status. One of: open, fixed, ignored. More values may be added; clients must tolerate unknown values.

# components.schemas.V1SecurityFinding.properties.updated_at.description
When this finding was last updated, UTC.

# components.schemas.V1SecurityScanActor.properties.email.description
Email of the user actor, when resolvable.

# components.schemas.V1SecurityScanActor.properties.id.description
Lovable user ID when the actor is a user.

# components.schemas.V1SecurityScanActor.properties.name.description
Display name of the user actor, when resolvable.

# components.schemas.V1SecurityScanActor.properties.type.description
Actor type. One of: user, system. More values may be added; clients must tolerate unknown values.

# components.schemas.V1SecurityScanSummary.properties.finished_at.description
When the scan finished, UTC; absent while still running.

# components.schemas.V1SecurityScanSummary.properties.status.description
Scan status. One of: running, completed, failed. More values may be added; clients must tolerate unknown values.

# components.schemas.V1SecurityScanSummary.properties.trigger_source.description
What triggered the scan. Known values include: workflow, user, ui_auto, aikido_import, app_mcp_deep_auto, hvt_scheduled, workspace_scheduled, enterprise_batch, gitsync_pull. More values may be added; clients must tolerate unknown values.

# components.schemas.V1SecurityScannerRun.properties.commit_sha.description
Commit at which this scanner actually ran (may differ from invocation commit on carry-forward)

# components.schemas.V1SecurityScannerRun.properties.finished_at.description
When this scanner finished, UTC; absent while still running.

# components.schemas.V1SecurityScannerRun.properties.status.description
Scanner run status. One of: succeeded, failed, skipped. More values may be added; clients must tolerate unknown values.

# components.schemas.V1StartMessageExportInputBody.properties.end_date.description
Exclusive RFC3339 end time. Defaults to the request time.

# components.schemas.V1StartMessageExportInputBody.properties.project_id.description
Export only messages from this project. The project must be visible to the caller. May be combined with user_id; both filters must match.

# components.schemas.V1StartMessageExportInputBody.properties.start_date.description
Inclusive RFC3339 start time. Defaults to 90 days before end_date.

# components.schemas.V1StartMessageExportInputBody.properties.user_id.description
Export only messages sent by this user. May be combined with project_id; both filters must match.

# components.schemas.V1TriggerSecurityScanResponseBody.properties.scan_id.description
Scan invocation ID. Poll GET /v1/projects/{project_id}/security-scans/{scan_id} for status (running | completed | failed) and findings.

# components.schemas.V1TriggerSecurityScanResponseBody.properties.status.description
One of: started, running, completed. More values may be added; clients must tolerate unknown values.

# components.schemas.V1UpdateWorkspaceSettingsNestedInputBody.properties.default_monthly_member_credit_limit.description
Default monthly credit cap applied to each member without an explicit per-member limit. Send a number >= 0 (0 blocks all member spend) to set it, or null to clear it (members are then bounded only by the workspace balance).

# components.schemas.V1WorkspaceAuditLogEntry.properties.action_description.description
Human-readable description of the action, derived from the action name (e.g. Workspace member added).

# components.schemas.V1WorkspaceAuditLogEntry.properties.actor_display_name.description
Display name of the actor at the time of the event.

# components.schemas.V1WorkspaceAuditLogEntry.properties.actor_id.description
User ID of the actor (or system actor ID for non-user actions).

# components.schemas.V1WorkspaceAuditLogEntry.properties.actor_type.description
Actor classification (user, scim, system).

# components.schemas.V1WorkspaceAuditLogEntry.properties.client_platform.description
First-party client the action came from (web, ios, android, desktop-app); absent when the caller sent no platform header.

# components.schemas.V1WorkspaceAuditLogEntry.properties.status_message.description
Optional message describing the failure cause when status is failed.

# components.schemas.V1WorkspaceAuditLogEntry.properties.target_display_name.description
Display name of the target at the time of the event.

# components.schemas.V1WorkspaceAuditLogEntry.properties.target_type.description
Type of the target resource (project, workspace, membership, etc.).

# components.schemas.V1WorkspaceAuditLogEntry.properties.trace_group_id.description
Group ID linking multi-event flows together.

# components.schemas.V1WorkspaceAuditLogsBody.properties.pagination.description
Pagination cursors for fetching adjacent pages.

# components.schemas.V1WorkspaceCreditHistoryBody.properties.pagination.description
Pagination cursors for fetching adjacent pages.

# components.schemas.V1WorkspaceCreditHistoryBody.properties.total.description
Total entry count, present only on the first page. Capped — see total_is_capped.

# components.schemas.V1WorkspaceCreditHistoryBody.properties.total_is_capped.description
True when total reached the count cap and the real total is higher.

# components.schemas.V1WorkspaceCreditsBody.properties.billing_period.description
The workspace billing cycle that total_billing_period_used covers.

# components.schemas.V1WorkspaceCreditsBody.properties.daily_remaining.description
Remaining credits from today's daily grants.

# components.schemas.V1WorkspaceCreditsBody.properties.expiring_grants.description
All future grant expiry groups sorted by date (excluding daily/overage).

# components.schemas.V1WorkspaceCreditsBody.properties.total_billing_period_used.description
Credits used in the current billing period (see billing_period for the exact window).

# components.schemas.V1WorkspaceCreditsBody.properties.total_granted.description
Total credits granted across all active grants.

# components.schemas.V1WorkspaceCreditsBody.properties.total_remaining.description
Total remaining credits across all active grants.

# components.schemas.V1WorkspaceCreditsExpiringGrant.properties.applicability.description
What the expiring credits apply to (e.g. build_time, cloud, ai_gateway).

# components.schemas.V1WorkspaceCreditsExpiringGrant.properties.grant_type.description
Display bucket: billing, rollover, topup, commitment, cashback, or granted.

# components.schemas.V1WorkspaceCreditsGrantTypeBalance.properties.grant_type.description
Display bucket: billing, daily, rollover, topup, commitment, cashback, or granted.

# components.schemas.V1WorkspaceInsightsBody.properties.as_of.description
Conservative workspace-wide freshness horizon for the risk rollups; individual project rollups may be newer.

# components.schemas.V1WorkspaceInsightsBody.properties.summary.description
KPI cards for the workspace security posture.

# components.schemas.V1WorkspaceInsightsFinding.properties.category.description
Finding category (e.g. data, access, exposure).

# components.schemas.V1WorkspaceInsightsFinding.properties.description.examples[]
A public table has row-level security disabled, exposing all rows to anonymous callers.

# components.schemas.V1WorkspaceInsightsFinding.properties.severity.description
Review priority: needs_review | review_recommended | no_review_needed.

# components.schemas.V1WorkspaceInsightsFinding.properties.title.examples[]
Row-level security disabled on a public table

# components.schemas.V1WorkspaceInsightsProject.properties.activity_group.description
Activity bucket: active, inactive, or dead.

# components.schemas.V1WorkspaceInsightsProject.properties.description.examples[]
Marketing landing page for the Q1 product launch.

# components.schemas.V1WorkspaceInsightsProject.properties.edit_count.description
Total edits over the project's lifetime.

# components.schemas.V1WorkspaceInsightsProject.properties.generated_description.examples[]
A single-page marketing site with a hero, feature grid, and signup form.

# components.schemas.V1WorkspaceInsightsProject.properties.last_security_scan_at.description
When the project was last security-scanned.

# components.schemas.V1WorkspaceInsightsProject.properties.matched_reason.description
The reason matching the single applied finding_id, when set.

# components.schemas.V1WorkspaceInsightsProject.properties.publish_visibility.description
Publishing status: external, workspace, or not_published.

# components.schemas.V1WorkspaceInsightsProject.properties.review_priority_explanation.description
Risk reasons explaining the review priority.

# components.schemas.V1WorkspaceInsightsProject.properties.signals.description
Per-project security and activity signals.

# components.schemas.V1WorkspaceInsightsProject.properties.visibility.description
Project visibility: public, private, or draft.

# components.schemas.V1WorkspaceInsightsProjectsBody.properties.activity_as_of.description
Per-family data horizons for the activity columns.

# components.schemas.V1WorkspaceInsightsProjectsBody.properties.applied_finding.description
The catalog finding applied as a filter, when exactly one finding_id is set.

# components.schemas.V1WorkspaceInsightsProjectsBody.properties.as_of.description
Conservative workspace-wide freshness horizon for the risk rollups; individual project rollups may be newer.

# components.schemas.V1WorkspaceInsightsProjectsBody.properties.pagination.description
Pagination cursors for fetching adjacent pages.

# components.schemas.V1WorkspaceInsightsProjectsBody.properties.total.description
Total matching projects across all pages.

# components.schemas.V1WorkspaceInsightsReason.properties.category.description
Risk-reason category (e.g. data, access, exposure).

# components.schemas.V1WorkspaceInsightsReason.properties.detail.description
Human-readable explanation of the risk reason.

# components.schemas.V1WorkspaceInsightsReason.properties.detail.examples[]
A public table exposes personal data to anonymous callers.

# components.schemas.V1WorkspaceInsightsReason.properties.severity.description
Review priority: needs_review | review_recommended | no_review_needed.

# components.schemas.V1WorkspaceInsightsReasonValues.properties.error_count.description
Number of error-level security findings.

# components.schemas.V1WorkspaceInsightsReasonValues.properties.shared_user_count.description
Number of users the project is shared with.

# components.schemas.V1WorkspaceInsightsReasonValues.properties.warning_count.description
Number of warning-level security findings.

# components.schemas.V1WorkspaceInsightsReviewPriority.properties.needs_review.description
Projects that need review (critical risk).

# components.schemas.V1WorkspaceInsightsReviewPriority.properties.no_review_needed.description
Projects that don't need review (low or minimal risk).

# components.schemas.V1WorkspaceInsightsReviewPriority.properties.review_recommended.description
Projects where review is recommended (high or medium risk).

# components.schemas.V1WorkspaceInsightsSignals.properties.error_count.description
Number of error-level security findings.

# components.schemas.V1WorkspaceInsightsSignals.properties.external_collaborators_known.description
Whether external-collaborator status could be determined.

# components.schemas.V1WorkspaceInsightsSignals.properties.has_chat_attachment.description
Whether the project has any chat attachments.

# components.schemas.V1WorkspaceInsightsSignals.properties.has_external_collaborators.description
Whether the project has collaborators outside the workspace.

# components.schemas.V1WorkspaceInsightsSignals.properties.has_pii.description
Whether the project has any detected PII.

# components.schemas.V1WorkspaceInsightsSignals.properties.has_project_asset.description
Whether the project has any uploaded assets.

# components.schemas.V1WorkspaceInsightsSignals.properties.is_orphaned.description
Whether the project has no active owner.

# components.schemas.V1WorkspaceInsightsSignals.properties.is_public_published.description
Whether the project is published to a public (external) audience.

# components.schemas.V1WorkspaceInsightsSignals.properties.lovable_cloud_enabled.description
Whether Lovable Cloud (Supabase) is enabled for the project.

# components.schemas.V1WorkspaceInsightsSignals.properties.overshared.description
Whether the project is shared more broadly than recommended.

# components.schemas.V1WorkspaceInsightsSignals.properties.shared_user_count.description
Number of users the project is shared with.

# components.schemas.V1WorkspaceInsightsSignals.properties.supabase_rls_enabled_table_count.description
Number of Supabase tables with row-level security enabled.

# components.schemas.V1WorkspaceInsightsSignals.properties.supabase_signals_fetched_at.description
When the Supabase signals were last fetched.

# components.schemas.V1WorkspaceInsightsSignals.properties.supply_chain_error_count.description
Number of error-level supply-chain findings.

# components.schemas.V1WorkspaceInsightsSignals.properties.supply_chain_info_count.description
Number of info-level supply-chain findings.

# components.schemas.V1WorkspaceInsightsSignals.properties.supply_chain_warning_count.description
Number of warning-level supply-chain findings.

# components.schemas.V1WorkspaceInsightsSignals.properties.warning_count.description
Number of warning-level security findings.

# components.schemas.V1WorkspaceInsightsStat.properties.delta_window.description
Human-readable window for delta_30d (e.g. "30 days").

# components.schemas.V1WorkspaceInsightsSummary.properties.externally_published.description
Projects published to an external (public) audience.

# components.schemas.V1WorkspaceInsightsSummary.properties.risk.description
Review-priority rollup across scored projects (needs_review / review_recommended / no_review_needed).

# components.schemas.V1WorkspaceMember.properties.display_name.description
User display name as stored on the membership.

# components.schemas.V1WorkspaceMember.properties.email.description
Member email as stored on the membership. For pending invites this is the invited email. May be absent on legacy membership rows.

# components.schemas.V1WorkspaceMember.properties.joined_at.description
When the user accepted the invitation. Absent on pending invites.

# components.schemas.V1WorkspaceMember.properties.monthly_credit_limit.description
Explicit monthly credit cap for this member. Absent means no per-member cap is set and the workspace default applies. Visible for yourself; visible for other members only with permission to view member usage.

# components.schemas.V1WorkspaceMember.properties.role.description
Workspace role. One of: owner, admin, member, viewer, collaborator.

# components.schemas.V1WorkspaceMember.properties.user_id.description
Stable opaque identifier for the entry. For active members this is the user ID; for pending invites this is the Spanner-generated membership row id (never an email-derived value).

# components.schemas.V1WorkspaceSettingsBody.properties.default_monthly_member_credit_limit.description
Default monthly credit cap applied to each member who has no explicit per-member limit. Absent when unset (members are bounded only by the workspace balance) or when the caller lacks permission to view workspace usage.

# components.schemas.V1WorkspaceSettingsBody.properties.default_project_visibility.description
Default visibility applied to new projects. One of: public, private, draft. Absent means the workspace effective default of private.

# components.schemas.V1WorkspaceSettingsBody.properties.enable_pii.description
Whether PII scanning is enabled across project resources.

# components.schemas.V1WorkspaceSettingsBody.properties.enforce_sso.description
Whether SSO is enforced for all members.

# components.schemas.V1WorkspaceSettingsBody.properties.num_seats.description
Workspace-specific seat limit when one has been explicitly configured. Absent when the workspace runs on its plan's default (Enterprise workspaces are typically unlimited unless a per-tenant cap is set).

# components.schemas.V1WorkspaceSettingsBody.properties.plan.description
Plan tier. One of: free, pro, business, enterprise. More values may be added; clients must tolerate unknown values.

# components.schemas.V1WorkspaceSettingsBody.properties.publishing_policy.description
Restriction on what publish visibilities are allowed: workspace_only or disabled. Absent means no restriction.

# components.schemas.V1WorkspaceUsageConnectorBreakdown.properties.credits.description
Credits attributed to this connector in the bucket.

# components.schemas.V1WorkspaceUsageDatabaseBreakdown.properties.credits.description
Credits attributed to this database subcategory in the bucket.

# components.schemas.V1WorkspaceUsageDatabaseBreakdown.properties.label.description
Display label for the database subcategory.

# components.schemas.V1WorkspaceUsageGatewayModel.properties.credits.description
Credits attributed to this model in the bucket.

# components.schemas.WorkspaceAnalyticsResponse.properties.timeSeries.description
Workspace-wide time-series metrics aggregated across all projects.

# info.description
**Media types:** this API speaks `application/json`. Message stream endpoints produce `text/event-stream` and require an `Accept` header compatible with it; no endpoint produces XML or any other representation. An `Accept` header that excludes what an endpoint produces is answered with `406` and `type: not_acceptable` — send a matching `Accept` header, send `*/*`, or omit the header.

## Rate limits

Every response carries `X-RateLimit-Limit` (the ceiling for the most constrained bucket that evaluated the request), `X-RateLimit-Remaining` (requests still available in the current window), and, when known, `X-RateLimit-Reset` (UTC epoch seconds until the window rolls off). A `429` also returns `Retry-After` when a retry delay can be computed.

For authenticated requests, limits are counted **per user**, not per workspace: a user's API keys and dashboard session normally share one bucket, and a workspace never pools the count across its users. A workspace's plan or overrides can raise the ceiling (and window) for its users. Individual endpoints can scope limits differently: some meter each API key separately (for example the database query endpoint), and some add per-IP, per-workspace, or global buckets. A request can therefore be evaluated by more than one bucket, and all three headers describe the most constrained one (closest to exhaustion), since that is the budget that binds your next request.

Limits use a sliding window, so `X-RateLimit-Remaining` reflects every request counted against the bucket over the trailing window, not just your most recent calls. It can drop by more than one between two consecutive requests when other in-window traffic shares the bucket, and it recovers as older requests age out.

# paths./v1/me.get.description
**Plan:** `All plans`

Returns the authenticated user's profile and workspaces.

# paths./v1/me.get.responses.200.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/me.get.responses.200.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/me.get.responses.200.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/me.get.responses.401.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/me.get.responses.401.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/me.get.responses.401.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/me.get.responses.403.content.application/json.example.title
You don't have the permissions to perform this action

# paths./v1/me.get.responses.403.description
The key or caller lacks the required scope or permission.

# paths./v1/me.get.responses.403.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/me.get.responses.403.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/me.get.responses.403.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/me.get.responses.406.content.application/json.example.title
This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.

# paths./v1/me.get.responses.406.description
The Accept header excludes every media type this endpoint produces.

# paths./v1/me.get.responses.406.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/me.get.responses.406.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/me.get.responses.406.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/me.get.responses.429.description
Too many requests. Retry after the interval in Retry-After when present.

# paths./v1/me.get.responses.429.headers.Retry-After.description
Seconds to wait before retrying. Present when the limiter can compute a retry delay.

# paths./v1/me.get.responses.429.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/me.get.responses.429.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/me.get.responses.429.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/me.get.responses.default.description
Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

# paths./v1/me.get.responses.default.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/me.get.responses.default.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/me.get.responses.default.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/me.get.x-codeSamples[].source
import { LovableClient } from "@lovable.dev/sdk";

const client = new LovableClient({
  apiKey: process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
});

const me = await client.me();
console.log(me);

# paths./v1/me.get.x-codeSamples[].source
curl --request GET \
  --url 'https://api.lovable.dev/v1/me' \
  --header 'Lovable-API-Key: lov_your-api-key'

# paths./v1/me.get.x-rateLimit.app_limiters[].description
Shared authenticated HTTP bucket for public API routes without a more specific limiter.

# paths./v1/workspaces.get.description
**Plan:** `All plans`

Returns workspaces the authenticated user belongs to with cursor pagination.

# paths./v1/workspaces.get.parameters[].description
Opaque pagination cursor returned by the previous page

# paths./v1/workspaces.get.parameters[].schema.description
Opaque pagination cursor returned by the previous page

# paths./v1/workspaces.get.responses.200.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces.get.responses.200.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces.get.responses.200.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces.get.responses.401.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces.get.responses.401.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces.get.responses.401.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces.get.responses.403.content.application/json.example.title
You don't have the permissions to perform this action

# paths./v1/workspaces.get.responses.403.description
The key or caller lacks the required scope or permission.

# paths./v1/workspaces.get.responses.403.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces.get.responses.403.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces.get.responses.403.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces.get.responses.406.content.application/json.example.title
This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.

# paths./v1/workspaces.get.responses.406.description
The Accept header excludes every media type this endpoint produces.

# paths./v1/workspaces.get.responses.406.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces.get.responses.406.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces.get.responses.406.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces.get.responses.429.description
Too many requests. Retry after the interval in Retry-After when present.

# paths./v1/workspaces.get.responses.429.headers.Retry-After.description
Seconds to wait before retrying. Present when the limiter can compute a retry delay.

# paths./v1/workspaces.get.responses.429.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces.get.responses.429.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces.get.responses.429.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces.get.responses.default.description
Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

# paths./v1/workspaces.get.responses.default.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces.get.responses.default.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces.get.responses.default.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces.get.x-codeSamples[].source
import { LovableClient } from "@lovable.dev/sdk";

const client = new LovableClient({
  apiKey: process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
});

const workspaces = await client.listWorkspaces({ limit: 20 });
console.log(workspaces);

# paths./v1/workspaces.get.x-codeSamples[].source
curl --request GET \
  --url 'https://api.lovable.dev/v1/workspaces' \
  --header 'Lovable-API-Key: lov_your-api-key'

# paths./v1/workspaces.get.x-rateLimit.app_limiters[].description
Shared authenticated HTTP bucket for public API routes without a more specific limiter.

# paths./v1/workspaces/{workspace_id}.get.description
**Plan:** `All plans`

Returns workspace details.

# paths./v1/workspaces/{workspace_id}.get.responses.200.content.application/json.schema.description
Workspace details, restricted to fields safe for external API consumers.

# paths./v1/workspaces/{workspace_id}.get.responses.200.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}.get.responses.200.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}.get.responses.200.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}.get.responses.401.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}.get.responses.401.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}.get.responses.401.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}.get.responses.403.content.application/json.example.title
You don't have the permissions to perform this action

# paths./v1/workspaces/{workspace_id}.get.responses.403.description
The key or caller lacks the required scope or permission.

# paths./v1/workspaces/{workspace_id}.get.responses.403.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}.get.responses.403.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}.get.responses.403.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}.get.responses.406.content.application/json.example.title
This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.

# paths./v1/workspaces/{workspace_id}.get.responses.406.description
The Accept header excludes every media type this endpoint produces.

# paths./v1/workspaces/{workspace_id}.get.responses.406.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}.get.responses.406.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}.get.responses.406.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}.get.responses.429.description
Too many requests. Retry after the interval in Retry-After when present.

# paths./v1/workspaces/{workspace_id}.get.responses.429.headers.Retry-After.description
Seconds to wait before retrying. Present when the limiter can compute a retry delay.

# paths./v1/workspaces/{workspace_id}.get.responses.429.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}.get.responses.429.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}.get.responses.429.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}.get.responses.default.description
Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

# paths./v1/workspaces/{workspace_id}.get.responses.default.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}.get.responses.default.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}.get.responses.default.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}.get.x-codeSamples[].source
import { LovableClient } from "@lovable.dev/sdk";

const client = new LovableClient({
  apiKey: process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
});

const workspace = await client.getWorkspace("workspace-id");
console.log(workspace);

# paths./v1/workspaces/{workspace_id}.get.x-codeSamples[].source
curl --request GET \
  --url 'https://api.lovable.dev/v1/workspaces/workspace-id' \
  --header 'Lovable-API-Key: lov_your-api-key'

# paths./v1/workspaces/{workspace_id}.get.x-rateLimit.app_limiters[].description
Shared authenticated HTTP bucket for public API routes without a more specific limiter.

# paths./v1/workspaces/{workspace_id}/settings.get.description
**Plan:** `Enterprise`

Returns a curated subset of the workspace's settings.

# paths./v1/workspaces/{workspace_id}/settings.get.responses.200.content.application/json.schema.description
Workspace settings, restricted to fields safe for external API consumers.

# paths./v1/workspaces/{workspace_id}/settings.get.responses.200.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/settings.get.responses.200.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/settings.get.responses.200.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/settings.get.responses.401.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/settings.get.responses.401.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/settings.get.responses.401.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/settings.get.responses.402.content.application/json.example.title
You need to upgrade your plan to access this feature

# paths./v1/workspaces/{workspace_id}/settings.get.responses.402.description
This operation or requested configuration requires a workspace plan that includes this feature.

# paths./v1/workspaces/{workspace_id}/settings.get.responses.402.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/settings.get.responses.402.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/settings.get.responses.402.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/settings.get.responses.403.content.application/json.example.title
You don't have the permissions to perform this action

# paths./v1/workspaces/{workspace_id}/settings.get.responses.403.description
The key or caller lacks the required scope or permission.

# paths./v1/workspaces/{workspace_id}/settings.get.responses.403.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/settings.get.responses.403.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/settings.get.responses.403.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/settings.get.responses.406.content.application/json.example.title
This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.

# paths./v1/workspaces/{workspace_id}/settings.get.responses.406.description
The Accept header excludes every media type this endpoint produces.

# paths./v1/workspaces/{workspace_id}/settings.get.responses.406.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/settings.get.responses.406.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/settings.get.responses.406.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/settings.get.responses.429.description
Too many requests. Retry after the interval in Retry-After when present.

# paths./v1/workspaces/{workspace_id}/settings.get.responses.429.headers.Retry-After.description
Seconds to wait before retrying. Present when the limiter can compute a retry delay.

# paths./v1/workspaces/{workspace_id}/settings.get.responses.429.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/settings.get.responses.429.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/settings.get.responses.429.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/settings.get.responses.default.description
Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

# paths./v1/workspaces/{workspace_id}/settings.get.responses.default.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/settings.get.responses.default.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/settings.get.responses.default.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/settings.get.x-codeSamples[].source
import { LovableClient } from "@lovable.dev/sdk";

const client = new LovableClient({
  apiKey: process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
});

const { data } = await client.typed.GET("/v1/workspaces/{workspace_id}/settings", {
  params: {
    path: {
      "workspace_id": "workspace-id",
    },
  },
});
console.log(data);

# paths./v1/workspaces/{workspace_id}/settings.get.x-codeSamples[].source
curl --request GET \
  --url 'https://api.lovable.dev/v1/workspaces/workspace-id/settings' \
  --header 'Lovable-API-Key: lov_your-api-key'

# paths./v1/workspaces/{workspace_id}/settings.get.x-rateLimit.app_limiters[].description
Shared authenticated HTTP bucket for public API routes without a more specific limiter.

# paths./v1/workspaces/{workspace_id}/settings.patch.description
**Plan:** `Enterprise`

Updates writable workspace settings. Currently supports the default per-member monthly credit limit.

# paths./v1/workspaces/{workspace_id}/settings.patch.responses.200.content.application/json.schema.description
Workspace settings, restricted to fields safe for external API consumers.

# paths./v1/workspaces/{workspace_id}/settings.patch.responses.200.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/settings.patch.responses.200.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/settings.patch.responses.200.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/settings.patch.responses.401.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/settings.patch.responses.401.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/settings.patch.responses.401.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/settings.patch.responses.402.content.application/json.example.title
You need to upgrade your plan to access this feature

# paths./v1/workspaces/{workspace_id}/settings.patch.responses.402.description
This operation or requested configuration requires a workspace plan that includes this feature.

# paths./v1/workspaces/{workspace_id}/settings.patch.responses.402.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/settings.patch.responses.402.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/settings.patch.responses.402.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/settings.patch.responses.403.content.application/json.example.title
You don't have the permissions to perform this action

# paths./v1/workspaces/{workspace_id}/settings.patch.responses.403.description
The key or caller lacks the required scope or permission.

# paths./v1/workspaces/{workspace_id}/settings.patch.responses.403.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/settings.patch.responses.403.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/settings.patch.responses.403.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/settings.patch.responses.406.content.application/json.example.title
This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.

# paths./v1/workspaces/{workspace_id}/settings.patch.responses.406.description
The Accept header excludes every media type this endpoint produces.

# paths./v1/workspaces/{workspace_id}/settings.patch.responses.406.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/settings.patch.responses.406.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/settings.patch.responses.406.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/settings.patch.responses.429.description
Too many requests. Retry after the interval in Retry-After when present.

# paths./v1/workspaces/{workspace_id}/settings.patch.responses.429.headers.Retry-After.description
Seconds to wait before retrying. Present when the limiter can compute a retry delay.

# paths./v1/workspaces/{workspace_id}/settings.patch.responses.429.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/settings.patch.responses.429.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/settings.patch.responses.429.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/settings.patch.responses.default.description
Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

# paths./v1/workspaces/{workspace_id}/settings.patch.responses.default.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/settings.patch.responses.default.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/settings.patch.responses.default.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/settings.patch.x-codeSamples[].source
import { LovableClient } from "@lovable.dev/sdk";

const client = new LovableClient({
  apiKey: process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
});

const { data } = await client.typed.PATCH("/v1/workspaces/{workspace_id}/settings", {
  params: {
    path: {
      "workspace_id": "workspace-id",
    },
  },
  body: {},
});
console.log(data);

# paths./v1/workspaces/{workspace_id}/settings.patch.x-codeSamples[].source
curl --request PATCH \
  --url 'https://api.lovable.dev/v1/workspaces/workspace-id/settings' \
  --header 'Lovable-API-Key: lov_your-api-key' \
  --header 'Content-Type: application/json' \
  --data '{}'

# paths./v1/workspaces/{workspace_id}/settings.patch.x-rateLimit.app_limiters[].description
Shared authenticated HTTP bucket for public API routes without a more specific limiter.

# paths./v1/projects/{project_id}/collaborators.get.description
**Plan:** `Enterprise`

Returns the users with direct access to this project.

# paths./v1/projects/{project_id}/collaborators.get.parameters[].description
Opaque pagination cursor returned by the previous page

# paths./v1/projects/{project_id}/collaborators.get.parameters[].schema.description
Opaque pagination cursor returned by the previous page

# paths./v1/projects/{project_id}/collaborators.get.responses.200.content.application/json.schema.description
Users with direct access to this project, stable-ordered with an opaque cursor. Pending email invites (users who do not yet have an account) are not included.

# paths./v1/projects/{project_id}/collaborators.get.responses.200.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/collaborators.get.responses.200.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/collaborators.get.responses.200.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/collaborators.get.responses.401.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/collaborators.get.responses.401.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/collaborators.get.responses.401.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/collaborators.get.responses.402.content.application/json.example.title
You need to upgrade your plan to access this feature

# paths./v1/projects/{project_id}/collaborators.get.responses.402.description
This operation or requested configuration requires a workspace plan that includes this feature.

# paths./v1/projects/{project_id}/collaborators.get.responses.402.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/collaborators.get.responses.402.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/collaborators.get.responses.402.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/collaborators.get.responses.403.content.application/json.example.title
You don't have the permissions to perform this action

# paths./v1/projects/{project_id}/collaborators.get.responses.403.description
The key or caller lacks the required scope or permission.

# paths./v1/projects/{project_id}/collaborators.get.responses.403.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/collaborators.get.responses.403.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/collaborators.get.responses.403.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/collaborators.get.responses.406.content.application/json.example.title
This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.

# paths./v1/projects/{project_id}/collaborators.get.responses.406.description
The Accept header excludes every media type this endpoint produces.

# paths./v1/projects/{project_id}/collaborators.get.responses.406.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/collaborators.get.responses.406.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/collaborators.get.responses.406.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/collaborators.get.responses.429.description
Too many requests. Retry after the interval in Retry-After when present.

# paths./v1/projects/{project_id}/collaborators.get.responses.429.headers.Retry-After.description
Seconds to wait before retrying. Present when the limiter can compute a retry delay.

# paths./v1/projects/{project_id}/collaborators.get.responses.429.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/collaborators.get.responses.429.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/collaborators.get.responses.429.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/collaborators.get.responses.default.description
Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

# paths./v1/projects/{project_id}/collaborators.get.responses.default.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/collaborators.get.responses.default.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/collaborators.get.responses.default.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/collaborators.get.x-codeSamples[].source
import { LovableClient } from "@lovable.dev/sdk";

const client = new LovableClient({
  apiKey: process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
});

const { data } = await client.typed.GET("/v1/projects/{project_id}/collaborators", {
  params: {
    path: {
      "project_id": "project-id",
    },
  },
});
console.log(data);

# paths./v1/projects/{project_id}/collaborators.get.x-codeSamples[].source
curl --request GET \
  --url 'https://api.lovable.dev/v1/projects/project-id/collaborators' \
  --header 'Lovable-API-Key: lov_your-api-key'

# paths./v1/projects/{project_id}/collaborators.get.x-rateLimit.app_limiters[].description
Shared authenticated HTTP bucket for public API routes without a more specific limiter.

# paths./v1/workspaces/{workspace_id}/members.get.description
**Plan:** `Enterprise`

Returns a paginated list of workspace members, filtered by role and status.

# paths./v1/workspaces/{workspace_id}/members.get.parameters[].description
Opaque cursor from a prior response. Omit on the first page.

# paths./v1/workspaces/{workspace_id}/members.get.parameters[].schema.description
Opaque cursor from a prior response. Omit on the first page.

# paths./v1/workspaces/{workspace_id}/members.get.parameters[].description
Substring filter applied to display name, username, and email tokens (matching the workspace member search backend).

# paths./v1/workspaces/{workspace_id}/members.get.parameters[].schema.description
Substring filter applied to display name, username, and email tokens (matching the workspace member search backend).

# paths./v1/workspaces/{workspace_id}/members.get.parameters[].description
Comma-separated role filter. Valid values: owner, admin, member, viewer, collaborator. Empty = all roles. Unknown values return 400.

# paths./v1/workspaces/{workspace_id}/members.get.parameters[].schema.description
Comma-separated role filter. Valid values: owner, admin, member, viewer, collaborator. Empty = all roles. Unknown values return 400.

# paths./v1/workspaces/{workspace_id}/members.get.parameters[].description
Filter by membership status. Default 'active' excludes pending invites.

# paths./v1/workspaces/{workspace_id}/members.get.parameters[].schema.description
Filter by membership status. Default 'active' excludes pending invites.

# paths./v1/workspaces/{workspace_id}/members.get.parameters[].description
Sort field. Defaults to relevance when query is set, otherwise role + recency.

# paths./v1/workspaces/{workspace_id}/members.get.parameters[].schema.description
Sort field. Defaults to relevance when query is set, otherwise role + recency.

# paths./v1/workspaces/{workspace_id}/members.get.parameters[].description
Sort direction. Only applied when sort_by is set; the default-sort case has a fixed direction baked into the underlying query.

# paths./v1/workspaces/{workspace_id}/members.get.parameters[].schema.description
Sort direction. Only applied when sort_by is set; the default-sort case has a fixed direction baked into the underlying query.

# paths./v1/workspaces/{workspace_id}/members.get.parameters[].description
Filter by SCIM provisioning status. Empty = all members, 'managed' = only SCIM-provisioned members, 'unmanaged' = only members not managed by SCIM.

# paths./v1/workspaces/{workspace_id}/members.get.parameters[].schema.description
Filter by SCIM provisioning status. Empty = all members, 'managed' = only SCIM-provisioned members, 'unmanaged' = only members not managed by SCIM.

# paths./v1/workspaces/{workspace_id}/members.get.responses.200.content.application/json.schema.description
Paginated workspace members. Per-user credit usage is intentionally omitted; use /usage/breakdown.

# paths./v1/workspaces/{workspace_id}/members.get.responses.200.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/members.get.responses.200.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/members.get.responses.200.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/members.get.responses.401.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/members.get.responses.401.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/members.get.responses.401.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/members.get.responses.402.content.application/json.example.title
You need to upgrade your plan to access this feature

# paths./v1/workspaces/{workspace_id}/members.get.responses.402.description
This operation or requested configuration requires a workspace plan that includes this feature.

# paths./v1/workspaces/{workspace_id}/members.get.responses.402.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/members.get.responses.402.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/members.get.responses.402.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/members.get.responses.403.content.application/json.example.title
You don't have the permissions to perform this action

# paths./v1/workspaces/{workspace_id}/members.get.responses.403.description
The key or caller lacks the required scope or permission.

# paths./v1/workspaces/{workspace_id}/members.get.responses.403.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/members.get.responses.403.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/members.get.responses.403.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/members.get.responses.406.content.application/json.example.title
This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.

# paths./v1/workspaces/{workspace_id}/members.get.responses.406.description
The Accept header excludes every media type this endpoint produces.

# paths./v1/workspaces/{workspace_id}/members.get.responses.406.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/members.get.responses.406.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/members.get.responses.406.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/members.get.responses.429.description
Too many requests. Retry after the interval in Retry-After when present.

# paths./v1/workspaces/{workspace_id}/members.get.responses.429.headers.Retry-After.description
Seconds to wait before retrying. Present when the limiter can compute a retry delay.

# paths./v1/workspaces/{workspace_id}/members.get.responses.429.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/members.get.responses.429.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/members.get.responses.429.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/members.get.responses.default.description
Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

# paths./v1/workspaces/{workspace_id}/members.get.responses.default.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/members.get.responses.default.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/members.get.responses.default.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/members.get.x-codeSamples[].source
import { LovableClient } from "@lovable.dev/sdk";

const client = new LovableClient({
  apiKey: process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
});

const { data } = await client.typed.GET("/v1/workspaces/{workspace_id}/members", {
  params: {
    path: {
      "workspace_id": "workspace-id",
    },
  },
});
console.log(data);

# paths./v1/workspaces/{workspace_id}/members.get.x-codeSamples[].source
curl --request GET \
  --url 'https://api.lovable.dev/v1/workspaces/workspace-id/members' \
  --header 'Lovable-API-Key: lov_your-api-key'

# paths./v1/workspaces/{workspace_id}/members.get.x-rateLimit.app_limiters[].description
Shared authenticated HTTP bucket for public API routes without a more specific limiter.

# paths./v1/projects.get.description
**Plan:** `All plans`

Returns projects in a workspace, sorted by last edited time descending then project ID ascending. Pass workspace_id as a query parameter.

# paths./v1/projects.get.parameters[].description
Filter by multiple folder IDs (comma-separated, takes precedence over folder_id)

# paths./v1/projects.get.parameters[].schema.description
Filter by multiple folder IDs (comma-separated, takes precedence over folder_id)

# paths./v1/projects.get.parameters[].description
Filter by project type. library returns design-system libraries; template returns non-library templates.

# paths./v1/projects.get.parameters[].schema.description
Filter by project type. library returns design-system libraries; template returns non-library templates.

# paths./v1/projects.get.parameters[].description
Opaque pagination cursor returned by the previous page

# paths./v1/projects.get.parameters[].schema.description
Opaque pagination cursor returned by the previous page

# paths./v1/projects.get.parameters[].description
Only return projects viewed by the current user

# paths./v1/projects.get.parameters[].schema.description
Only return projects viewed by the current user

# paths./v1/projects.get.parameters[].description
Which fields to search: empty for all (default), 'name' for project name only

# paths./v1/projects.get.parameters[].schema.description
Which fields to search: empty for all (default), 'name' for project name only

# paths./v1/projects.get.responses.200.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects.get.responses.200.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects.get.responses.200.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects.get.responses.401.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects.get.responses.401.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects.get.responses.401.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects.get.responses.403.content.application/json.example.title
You don't have the permissions to perform this action

# paths./v1/projects.get.responses.403.description
The key or caller lacks the required scope or permission.

# paths./v1/projects.get.responses.403.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects.get.responses.403.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects.get.responses.403.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects.get.responses.406.content.application/json.example.title
This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.

# paths./v1/projects.get.responses.406.description
The Accept header excludes every media type this endpoint produces.

# paths./v1/projects.get.responses.406.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects.get.responses.406.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects.get.responses.406.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects.get.responses.429.description
Too many requests. Retry after the interval in Retry-After when present.

# paths./v1/projects.get.responses.429.headers.Retry-After.description
Seconds to wait before retrying. Present when the limiter can compute a retry delay.

# paths./v1/projects.get.responses.429.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects.get.responses.429.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects.get.responses.429.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects.get.responses.default.description
Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

# paths./v1/projects.get.responses.default.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects.get.responses.default.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects.get.responses.default.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects.get.x-codeSamples[].source
import { LovableClient } from "@lovable.dev/sdk";

const client = new LovableClient({
  apiKey: process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
});

const { data } = await client.typed.GET("/v1/projects", {
  params: {
    query: {
      "workspace_id": "workspace-id",
    },
  },
});
console.log(data);

# paths./v1/projects.get.x-codeSamples[].source
curl --request GET \
  --url 'https://api.lovable.dev/v1/projects?workspace_id=workspace-id' \
  --header 'Lovable-API-Key: lov_your-api-key'

# paths./v1/projects.get.x-rateLimit.app_limiters[].description
Shared authenticated HTTP bucket for public API routes without a more specific limiter.

# paths./v1/projects.post.description
**Plan:** `All plans`

Creates a new project. Pass workspace_id in the request body.

# paths./v1/projects.post.responses.200.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects.post.responses.200.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects.post.responses.200.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects.post.responses.201.headers.Location.schema.description
Relative URL of the newly created project.

# paths./v1/projects.post.responses.201.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects.post.responses.201.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects.post.responses.201.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects.post.responses.202.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects.post.responses.202.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects.post.responses.202.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects.post.responses.401.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects.post.responses.401.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects.post.responses.401.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects.post.responses.402.content.application/json.example.title
You need to upgrade your plan to access this feature

# paths./v1/projects.post.responses.402.description
This operation or requested configuration requires a workspace plan that includes this feature.

# paths./v1/projects.post.responses.402.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects.post.responses.402.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects.post.responses.402.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects.post.responses.403.content.application/json.example.title
You don't have the permissions to perform this action

# paths./v1/projects.post.responses.403.description
The key or caller lacks the required scope or permission.

# paths./v1/projects.post.responses.403.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects.post.responses.403.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects.post.responses.403.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects.post.responses.406.content.application/json.example.title
This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.

# paths./v1/projects.post.responses.406.description
The Accept header excludes every media type this endpoint produces.

# paths./v1/projects.post.responses.406.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects.post.responses.406.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects.post.responses.406.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects.post.responses.429.description
Too many requests. Retry after the interval in Retry-After when present.

# paths./v1/projects.post.responses.429.headers.Retry-After.description
Seconds to wait before retrying. Present when the limiter can compute a retry delay.

# paths./v1/projects.post.responses.429.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects.post.responses.429.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects.post.responses.429.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects.post.responses.default.description
Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

# paths./v1/projects.post.responses.default.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects.post.responses.default.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects.post.responses.default.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects.post.x-codeSamples[].source
import { LovableClient } from "@lovable.dev/sdk";

const client = new LovableClient({
  apiKey: process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
});

const jobId = await client.remixProject("project-id", {
  workspaceId: "workspace-id",
  includeHistory: true,
});
console.log(jobId);

# paths./v1/projects.post.x-codeSamples[].source
curl --request POST \
  --url 'https://api.lovable.dev/v1/projects' \
  --header 'Lovable-API-Key: lov_your-api-key' \
  --header 'Content-Type: application/json' \
  --data '{}'

# paths./v1/projects.post.x-rateLimit.app_limiters[].description
Project creation bucket shared with app project creation flows.

# paths./v1/projects.post.x-rateLimit.app_limiters[].description
Shared chat/project-generation bucket used by app and public API agent work.

# paths./v1/projects.post.x-rateLimit.app_limiters[].description
Additional build-action bucket for free workspace MCP callers.

# paths./v1/projects.post.x-rateLimit.app_limiters[].notes[]
Applies only when the client source is MCP and the workspace tier is free.

# paths./v1/projects.post.x-rateLimit.app_limiters[].description
Additional per-user daily project-creation bucket for free workspace MCP callers, shared by fresh creates and remixes.

# paths./v1/projects.post.x-rateLimit.app_limiters[].notes[]
Applies only when the client source is MCP and the workspace tier is free.

# paths./v1/projects.post.x-rateLimit.app_limiters[].description
Shared authenticated HTTP bucket for public API routes without a more specific limiter.

# paths./v1/projects/{project_id}.delete.description
**Plan:** `All plans`

Soft-deletes a project. Repeated deletes are treated as successful.

# paths./v1/projects/{project_id}.delete.responses.204.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}.delete.responses.204.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}.delete.responses.204.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}.delete.responses.401.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}.delete.responses.401.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}.delete.responses.401.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}.delete.responses.403.content.application/json.example.title
You don't have the permissions to perform this action

# paths./v1/projects/{project_id}.delete.responses.403.description
The key or caller lacks the required scope or permission.

# paths./v1/projects/{project_id}.delete.responses.403.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}.delete.responses.403.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}.delete.responses.403.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}.delete.responses.406.content.application/json.example.title
This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.

# paths./v1/projects/{project_id}.delete.responses.406.description
The Accept header excludes every media type this endpoint produces.

# paths./v1/projects/{project_id}.delete.responses.406.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}.delete.responses.406.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}.delete.responses.406.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}.delete.responses.429.description
Too many requests. Retry after the interval in Retry-After when present.

# paths./v1/projects/{project_id}.delete.responses.429.headers.Retry-After.description
Seconds to wait before retrying. Present when the limiter can compute a retry delay.

# paths./v1/projects/{project_id}.delete.responses.429.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}.delete.responses.429.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}.delete.responses.429.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}.delete.responses.default.description
Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

# paths./v1/projects/{project_id}.delete.responses.default.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}.delete.responses.default.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}.delete.responses.default.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}.delete.x-codeSamples[].source
import { LovableClient } from "@lovable.dev/sdk";

const client = new LovableClient({
  apiKey: process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
});

const { data } = await client.typed.DELETE("/v1/projects/{project_id}", {
  params: {
    path: {
      "project_id": "project-id",
    },
  },
});
console.log(data);

# paths./v1/projects/{project_id}.delete.x-codeSamples[].source
curl --request DELETE \
  --url 'https://api.lovable.dev/v1/projects/project-id' \
  --header 'Lovable-API-Key: lov_your-api-key'

# paths./v1/projects/{project_id}.delete.x-rateLimit.app_limiters[].description
Shared authenticated HTTP bucket for public API routes without a more specific limiter.

# paths./v1/projects/{project_id}.get.description
**Plan:** `All plans`

Returns project details.

# paths./v1/projects/{project_id}.get.responses.200.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}.get.responses.200.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}.get.responses.200.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}.get.responses.401.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}.get.responses.401.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}.get.responses.401.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}.get.responses.403.content.application/json.example.title
You don't have the permissions to perform this action

# paths./v1/projects/{project_id}.get.responses.403.description
The key or caller lacks the required scope or permission.

# paths./v1/projects/{project_id}.get.responses.403.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}.get.responses.403.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}.get.responses.403.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}.get.responses.406.content.application/json.example.title
This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.

# paths./v1/projects/{project_id}.get.responses.406.description
The Accept header excludes every media type this endpoint produces.

# paths./v1/projects/{project_id}.get.responses.406.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}.get.responses.406.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}.get.responses.406.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}.get.responses.429.description
Too many requests. Retry after the interval in Retry-After when present.

# paths./v1/projects/{project_id}.get.responses.429.headers.Retry-After.description
Seconds to wait before retrying. Present when the limiter can compute a retry delay.

# paths./v1/projects/{project_id}.get.responses.429.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}.get.responses.429.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}.get.responses.429.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}.get.responses.default.description
Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

# paths./v1/projects/{project_id}.get.responses.default.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}.get.responses.default.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}.get.responses.default.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}.get.x-codeSamples[].source
import { LovableClient } from "@lovable.dev/sdk";

const client = new LovableClient({
  apiKey: process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
});

const project = await client.getProject("project-id");
console.log(project);

# paths./v1/projects/{project_id}.get.x-codeSamples[].source
curl --request GET \
  --url 'https://api.lovable.dev/v1/projects/project-id' \
  --header 'Lovable-API-Key: lov_your-api-key'

# paths./v1/projects/{project_id}.get.x-rateLimit.app_limiters[].description
Shared authenticated HTTP bucket for public API routes without a more specific limiter.

# paths./v1/projects/{project_id}.patch.description
**Plan:** `All plans`

Updates supported project fields such as visibility and display_name.

# paths./v1/projects/{project_id}.patch.responses.200.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}.patch.responses.200.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}.patch.responses.200.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}.patch.responses.401.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}.patch.responses.401.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}.patch.responses.401.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}.patch.responses.402.content.application/json.example.title
You need to upgrade your plan to access this feature

# paths./v1/projects/{project_id}.patch.responses.402.description
This operation or requested configuration requires a workspace plan that includes this feature.

# paths./v1/projects/{project_id}.patch.responses.402.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}.patch.responses.402.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}.patch.responses.402.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}.patch.responses.403.content.application/json.example.title
You don't have the permissions to perform this action

# paths./v1/projects/{project_id}.patch.responses.403.description
The key or caller lacks the required scope or permission.

# paths./v1/projects/{project_id}.patch.responses.403.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}.patch.responses.403.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}.patch.responses.403.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}.patch.responses.406.content.application/json.example.title
This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.

# paths./v1/projects/{project_id}.patch.responses.406.description
The Accept header excludes every media type this endpoint produces.

# paths./v1/projects/{project_id}.patch.responses.406.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}.patch.responses.406.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}.patch.responses.406.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}.patch.responses.429.description
Too many requests. Retry after the interval in Retry-After when present.

# paths./v1/projects/{project_id}.patch.responses.429.headers.Retry-After.description
Seconds to wait before retrying. Present when the limiter can compute a retry delay.

# paths./v1/projects/{project_id}.patch.responses.429.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}.patch.responses.429.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}.patch.responses.429.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}.patch.responses.default.description
Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

# paths./v1/projects/{project_id}.patch.responses.default.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}.patch.responses.default.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}.patch.responses.default.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}.patch.x-codeSamples[].source
import { LovableClient } from "@lovable.dev/sdk";

const client = new LovableClient({
  apiKey: process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
});

const { data } = await client.typed.PATCH("/v1/projects/{project_id}", {
  params: {
    path: {
      "project_id": "project-id",
    },
  },
  body: {},
});
console.log(data);

# paths./v1/projects/{project_id}.patch.x-codeSamples[].source
curl --request PATCH \
  --url 'https://api.lovable.dev/v1/projects/project-id' \
  --header 'Lovable-API-Key: lov_your-api-key' \
  --header 'Content-Type: application/json' \
  --data '{}'

# paths./v1/projects/{project_id}.patch.x-rateLimit.app_limiters[].description
Shared authenticated HTTP bucket for public API routes without a more specific limiter.

# paths./v1/projects/{project_id}/embed-url.post.description
**Plan:** `All plans`

Creates a one-hour static preview URL that can be framed by one exact HTTPS parent origin. The token is anonymous and cannot access live previews or published modes.

# paths./v1/projects/{project_id}/embed-url.post.responses.200.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/embed-url.post.responses.200.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/embed-url.post.responses.200.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/embed-url.post.responses.401.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/embed-url.post.responses.401.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/embed-url.post.responses.401.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/embed-url.post.responses.403.content.application/json.example.title
You don't have the permissions to perform this action

# paths./v1/projects/{project_id}/embed-url.post.responses.403.description
The key or caller lacks the required scope or permission.

# paths./v1/projects/{project_id}/embed-url.post.responses.403.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/embed-url.post.responses.403.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/embed-url.post.responses.403.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/embed-url.post.responses.406.content.application/json.example.title
This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.

# paths./v1/projects/{project_id}/embed-url.post.responses.406.description
The Accept header excludes every media type this endpoint produces.

# paths./v1/projects/{project_id}/embed-url.post.responses.406.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/embed-url.post.responses.406.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/embed-url.post.responses.406.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/embed-url.post.responses.429.description
Too many requests. Retry after the interval in Retry-After when present.

# paths./v1/projects/{project_id}/embed-url.post.responses.429.headers.Retry-After.description
Seconds to wait before retrying. Present when the limiter can compute a retry delay.

# paths./v1/projects/{project_id}/embed-url.post.responses.429.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/embed-url.post.responses.429.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/embed-url.post.responses.429.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/embed-url.post.responses.default.description
Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

# paths./v1/projects/{project_id}/embed-url.post.responses.default.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/embed-url.post.responses.default.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/embed-url.post.responses.default.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/embed-url.post.x-codeSamples[].source
import { LovableClient } from "@lovable.dev/sdk";

const client = new LovableClient({
  apiKey: process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
});

const embed = await client.createEmbedUrl(
  "project-id",
  "https://edu.imagilabs.com",
);
console.log(embed.embed_url);

# paths./v1/projects/{project_id}/embed-url.post.x-codeSamples[].source
curl --request POST \
  --url 'https://api.lovable.dev/v1/projects/project-id/embed-url' \
  --header 'Lovable-API-Key: lov_your-api-key' \
  --header 'Content-Type: application/json' \
  --data '{"parent_origin":"parent-origin-id"}'

# paths./v1/projects/{project_id}/embed-url.post.x-rateLimit.app_limiters[].description
Shared authenticated HTTP bucket for public API routes without a more specific limiter.

# paths./v1beta/projects/{project_id}/cloud.get.description
**Plan:** `All plans`

Returns cloud telemetry for a project's database, matching the editor's Cloud settings panel: disk-space usage, compute instance tier, lifecycle status and pause state, region, Postgres version, and resource-pressure alerts. Values are platform measurements cached for up to a few minutes; disk.timestamp reports when the platform measured it. Individual fields are omitted while their lookup is temporarily unavailable.

This operation is in public preview (beta) and served under `/v1beta`. Request and response shapes may change before it graduates to the stable `/v1` surface.

# paths./v1beta/projects/{project_id}/cloud.get.parameters[].description
Cloud environment to read. Defaults to production.

# paths./v1beta/projects/{project_id}/cloud.get.parameters[].schema.description
Cloud environment to read. Defaults to production.

# paths./v1beta/projects/{project_id}/cloud.get.responses.200.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1beta/projects/{project_id}/cloud.get.responses.200.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1beta/projects/{project_id}/cloud.get.responses.200.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1beta/projects/{project_id}/cloud.get.responses.401.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1beta/projects/{project_id}/cloud.get.responses.401.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1beta/projects/{project_id}/cloud.get.responses.401.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1beta/projects/{project_id}/cloud.get.responses.403.content.application/json.example.title
You don't have the permissions to perform this action

# paths./v1beta/projects/{project_id}/cloud.get.responses.403.description
The key or caller lacks the required scope or permission.

# paths./v1beta/projects/{project_id}/cloud.get.responses.403.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1beta/projects/{project_id}/cloud.get.responses.403.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1beta/projects/{project_id}/cloud.get.responses.403.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1beta/projects/{project_id}/cloud.get.responses.406.content.application/json.example.title
This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.

# paths./v1beta/projects/{project_id}/cloud.get.responses.406.description
The Accept header excludes every media type this endpoint produces.

# paths./v1beta/projects/{project_id}/cloud.get.responses.406.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1beta/projects/{project_id}/cloud.get.responses.406.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1beta/projects/{project_id}/cloud.get.responses.406.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1beta/projects/{project_id}/cloud.get.responses.429.description
Too many requests. Retry after the interval in Retry-After when present.

# paths./v1beta/projects/{project_id}/cloud.get.responses.429.headers.Retry-After.description
Seconds to wait before retrying. Present when the limiter can compute a retry delay.

# paths./v1beta/projects/{project_id}/cloud.get.responses.429.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1beta/projects/{project_id}/cloud.get.responses.429.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1beta/projects/{project_id}/cloud.get.responses.429.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1beta/projects/{project_id}/cloud.get.responses.default.description
Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

# paths./v1beta/projects/{project_id}/cloud.get.responses.default.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1beta/projects/{project_id}/cloud.get.responses.default.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1beta/projects/{project_id}/cloud.get.responses.default.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1beta/projects/{project_id}/cloud.get.x-codeSamples[].source
import { LovableClient } from "@lovable.dev/sdk";

const client = new LovableClient({
  apiKey: process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
});

const { data } = await client.typed.GET("/v1beta/projects/{project_id}/cloud", {
  params: {
    path: {
      "project_id": "project-id",
    },
  },
});
console.log(data);

# paths./v1beta/projects/{project_id}/cloud.get.x-codeSamples[].source
curl --request GET \
  --url 'https://api.lovable.dev/v1beta/projects/project-id/cloud' \
  --header 'Lovable-API-Key: lov_your-api-key'

# paths./v1beta/projects/{project_id}/cloud.get.x-rateLimit.app_limiters[].notes[]
Values refresh every few minutes; poll no faster and honor Retry-After on 429 responses.

# paths./v1beta/projects/{project_id}/cloud.get.x-rateLimit.app_limiters[].description
Shared authenticated HTTP bucket for public API routes without a more specific limiter.

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.description
**Plan:** `Enterprise`

Allows workspace admins and owners to start a one-off export of user-authored messages from the current main chat history of projects visible to them. Project and user filters may be combined; when both are supplied, only messages matching both are exported. The export defaults to the preceding 90 days and is delivered as a ZIP containing JSONL. Poll the returned export ID; completed files expire after seven days. Filter options and delivery metadata may change before graduation.

This operation is in public preview (beta) and served under `/v1beta`. Request and response shapes may change before it graduates to the stable `/v1` surface.

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.responses.202.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.responses.202.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.responses.202.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.responses.401.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.responses.401.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.responses.401.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.responses.402.content.application/json.example.title
You need to upgrade your plan to access this feature

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.responses.402.description
This operation or requested configuration requires a workspace plan that includes this feature.

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.responses.402.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.responses.402.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.responses.402.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.responses.403.content.application/json.example.title
You don't have the permissions to perform this action

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.responses.403.description
The key or caller lacks the required scope or permission.

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.responses.403.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.responses.403.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.responses.403.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.responses.406.content.application/json.example.title
This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.responses.406.description
The Accept header excludes every media type this endpoint produces.

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.responses.406.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.responses.406.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.responses.406.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.responses.429.description
Too many requests. Retry after the interval in Retry-After when present.

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.responses.429.headers.Retry-After.description
Seconds to wait before retrying. Present when the limiter can compute a retry delay.

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.responses.429.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.responses.429.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.responses.429.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.responses.default.description
Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.responses.default.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.responses.default.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.responses.default.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.x-codeSamples[].source
import { LovableClient } from "@lovable.dev/sdk";

const client = new LovableClient({
  apiKey: process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
});

const { data } = await client.typed.POST("/v1beta/workspaces/{workspace_id}/message-exports", {
  params: {
    path: {
      "workspace_id": "workspace-id",
    },
  },
  body: {},
});
console.log(data);

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.x-codeSamples[].source
curl --request POST \
  --url 'https://api.lovable.dev/v1beta/workspaces/workspace-id/message-exports' \
  --header 'Lovable-API-Key: lov_your-api-key' \
  --header 'Content-Type: application/json' \
  --data '{}'

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.x-rateLimit.app_limiters[].description
Workspace and global buckets for warehouse-backed message export starts.

# paths./v1beta/workspaces/{workspace_id}/message-exports.post.x-rateLimit.app_limiters[].description
Shared authenticated HTTP bucket for public API routes without a more specific limiter.

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.description
**Plan:** `Enterprise`

Returns an admin or owner's export status and a one-hour signed download URL when the export is complete and unexpired. Status and download metadata may change before graduation.

This operation is in public preview (beta) and served under `/v1beta`. Request and response shapes may change before it graduates to the stable `/v1` surface.

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.parameters[].description
Export ID returned when the export was started.

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.parameters[].schema.description
Export ID returned when the export was started.

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.responses.200.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.responses.200.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.responses.200.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.responses.401.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.responses.401.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.responses.401.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.responses.402.content.application/json.example.title
You need to upgrade your plan to access this feature

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.responses.402.description
This operation or requested configuration requires a workspace plan that includes this feature.

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.responses.402.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.responses.402.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.responses.402.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.responses.403.content.application/json.example.title
You don't have the permissions to perform this action

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.responses.403.description
The key or caller lacks the required scope or permission.

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.responses.403.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.responses.403.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.responses.403.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.responses.406.content.application/json.example.title
This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.responses.406.description
The Accept header excludes every media type this endpoint produces.

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.responses.406.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.responses.406.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.responses.406.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.responses.429.description
Too many requests. Retry after the interval in Retry-After when present.

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.responses.429.headers.Retry-After.description
Seconds to wait before retrying. Present when the limiter can compute a retry delay.

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.responses.429.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.responses.429.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.responses.429.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.responses.default.description
Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.responses.default.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.responses.default.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.responses.default.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.x-codeSamples[].source
import { LovableClient } from "@lovable.dev/sdk";

const client = new LovableClient({
  apiKey: process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
});

const { data } = await client.typed.GET("/v1beta/workspaces/{workspace_id}/message-exports/{export_id}", {
  params: {
    path: {
      "workspace_id": "workspace-id",
      "export_id": "export-id",
    },
  },
});
console.log(data);

# paths./v1beta/workspaces/{workspace_id}/message-exports/{export_id}.get.x-rateLimit.app_limiters[].description
Shared authenticated HTTP bucket for public API routes without a more specific limiter.

# paths./v1/projects/{project_id}/publish.patch.description
**Plan:** `All plans`

Updates the published app without redeploying. visibility controls who can view it: public (anyone with the link), workspace (workspace members only), or custom (only the groups/users in audience — the list replaces all existing group/user grants; grants managed in the UI such as org access and email invites are preserved). is_published false takes the app offline; settings are kept and apply again on the next publish (already-offline is a no-op). Changes take effect immediately.

# paths./v1/projects/{project_id}/publish.patch.responses.200.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/publish.patch.responses.200.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/publish.patch.responses.200.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/publish.patch.responses.401.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/publish.patch.responses.401.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/publish.patch.responses.401.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/publish.patch.responses.402.content.application/json.example.title
You need to upgrade your plan to access this feature

# paths./v1/projects/{project_id}/publish.patch.responses.402.description
This operation or requested configuration requires a workspace plan that includes this feature.

# paths./v1/projects/{project_id}/publish.patch.responses.402.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/publish.patch.responses.402.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/publish.patch.responses.402.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/publish.patch.responses.403.content.application/json.example.title
You don't have the permissions to perform this action

# paths./v1/projects/{project_id}/publish.patch.responses.403.description
The key or caller lacks the required scope or permission.

# paths./v1/projects/{project_id}/publish.patch.responses.403.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/publish.patch.responses.403.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/publish.patch.responses.403.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/publish.patch.responses.406.content.application/json.example.title
This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.

# paths./v1/projects/{project_id}/publish.patch.responses.406.description
The Accept header excludes every media type this endpoint produces.

# paths./v1/projects/{project_id}/publish.patch.responses.406.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/publish.patch.responses.406.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/publish.patch.responses.406.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/publish.patch.responses.429.description
Too many requests. Retry after the interval in Retry-After when present.

# paths./v1/projects/{project_id}/publish.patch.responses.429.headers.Retry-After.description
Seconds to wait before retrying. Present when the limiter can compute a retry delay.

# paths./v1/projects/{project_id}/publish.patch.responses.429.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/publish.patch.responses.429.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/publish.patch.responses.429.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/publish.patch.responses.default.description
Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

# paths./v1/projects/{project_id}/publish.patch.responses.default.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/publish.patch.responses.default.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/publish.patch.responses.default.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/publish.patch.x-codeSamples[].source
import { LovableClient } from "@lovable.dev/sdk";

const client = new LovableClient({
  apiKey: process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
});

const { data } = await client.typed.PATCH("/v1/projects/{project_id}/publish", {
  params: {
    path: {
      "project_id": "project-id",
    },
  },
  body: {},
});
console.log(data);

# paths./v1/projects/{project_id}/publish.patch.x-codeSamples[].source
curl --request PATCH \
  --url 'https://api.lovable.dev/v1/projects/project-id/publish' \
  --header 'Lovable-API-Key: lov_your-api-key' \
  --header 'Content-Type: application/json' \
  --data '{}'

# paths./v1/projects/{project_id}/publish.patch.x-rateLimit.app_limiters[].description
Shared authenticated HTTP bucket for public API routes without a more specific limiter.

# paths./v1/projects/{project_id}/publish.post.description
**Plan:** `All plans`

Builds and deploys the project. Asynchronous: returns 202 with a deployment_id; poll GET /v1/projects/{project_id}/publish/{deployment_id} until status is completed or error. Optionally sets who can view the published app first: public (anyone with the link), workspace (workspace members only), or custom (only the groups/users in audience). Omit visibility to keep the current setting. Visibility changes apply to the currently published version immediately, before the new deployment finishes.

# paths./v1/projects/{project_id}/publish.post.responses.200.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/publish.post.responses.200.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/publish.post.responses.200.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/publish.post.responses.202.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/publish.post.responses.202.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/publish.post.responses.202.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/publish.post.responses.401.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/publish.post.responses.401.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/publish.post.responses.401.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/publish.post.responses.402.content.application/json.example.title
You need to upgrade your plan to access this feature

# paths./v1/projects/{project_id}/publish.post.responses.402.description
This operation or requested configuration requires a workspace plan that includes this feature.

# paths./v1/projects/{project_id}/publish.post.responses.402.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/publish.post.responses.402.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/publish.post.responses.402.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/publish.post.responses.403.content.application/json.example.title
You don't have the permissions to perform this action

# paths./v1/projects/{project_id}/publish.post.responses.403.description
The key or caller lacks the required scope or permission.

# paths./v1/projects/{project_id}/publish.post.responses.403.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/publish.post.responses.403.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/publish.post.responses.403.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/publish.post.responses.406.content.application/json.example.title
This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.

# paths./v1/projects/{project_id}/publish.post.responses.406.description
The Accept header excludes every media type this endpoint produces.

# paths./v1/projects/{project_id}/publish.post.responses.406.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/publish.post.responses.406.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/publish.post.responses.406.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/publish.post.responses.429.description
Too many requests. Retry after the interval in Retry-After when present.

# paths./v1/projects/{project_id}/publish.post.responses.429.headers.Retry-After.description
Seconds to wait before retrying. Present when the limiter can compute a retry delay.

# paths./v1/projects/{project_id}/publish.post.responses.429.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/publish.post.responses.429.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/publish.post.responses.429.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/publish.post.responses.default.description
Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

# paths./v1/projects/{project_id}/publish.post.responses.default.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/publish.post.responses.default.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/publish.post.responses.default.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/publish.post.x-codeSamples[].source
import { LovableClient } from "@lovable.dev/sdk";

const client = new LovableClient({
  apiKey: process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
});

const { data } = await client.typed.POST("/v1/projects/{project_id}/publish", {
  params: {
    path: {
      "project_id": "project-id",
    },
  },
  body: {},
});
console.log(data);

# paths./v1/projects/{project_id}/publish.post.x-codeSamples[].source
curl --request POST \
  --url 'https://api.lovable.dev/v1/projects/project-id/publish' \
  --header 'Lovable-API-Key: lov_your-api-key' \
  --header 'Content-Type: application/json' \
  --data '{}'

# paths./v1/projects/{project_id}/publish.post.x-rateLimit.app_limiters[].description
Additional build-action bucket for free workspace MCP callers.

# paths./v1/projects/{project_id}/publish.post.x-rateLimit.app_limiters[].notes[]
Applies only when the client source is MCP and the workspace tier is free.

# paths./v1/projects/{project_id}/publish.post.x-rateLimit.app_limiters[].description
Shared authenticated HTTP bucket for public API routes without a more specific limiter.

# paths./v1/projects/{project_id}/publish/{deployment_id}.get.description
**Plan:** `All plans`

Returns the status of an async publish started with POST /v1/projects/{project_id}/publish, keyed by the deployment_id it returned. Poll until status is completed (url is set) or error (error_message explains the failure). Poll no more than once every 2 seconds and honor Retry-After on 429 responses.

# paths./v1/projects/{project_id}/publish/{deployment_id}.get.responses.200.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/publish/{deployment_id}.get.responses.200.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/publish/{deployment_id}.get.responses.200.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/publish/{deployment_id}.get.responses.401.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/publish/{deployment_id}.get.responses.401.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/publish/{deployment_id}.get.responses.401.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/publish/{deployment_id}.get.responses.403.content.application/json.example.title
You don't have the permissions to perform this action

# paths./v1/projects/{project_id}/publish/{deployment_id}.get.responses.403.description
The key or caller lacks the required scope or permission.

# paths./v1/projects/{project_id}/publish/{deployment_id}.get.responses.403.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/publish/{deployment_id}.get.responses.403.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/publish/{deployment_id}.get.responses.403.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/publish/{deployment_id}.get.responses.406.content.application/json.example.title
This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.

# paths./v1/projects/{project_id}/publish/{deployment_id}.get.responses.406.description
The Accept header excludes every media type this endpoint produces.

# paths./v1/projects/{project_id}/publish/{deployment_id}.get.responses.406.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/publish/{deployment_id}.get.responses.406.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/publish/{deployment_id}.get.responses.406.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/publish/{deployment_id}.get.responses.429.description
Too many requests. Retry after the interval in Retry-After when present.

# paths./v1/projects/{project_id}/publish/{deployment_id}.get.responses.429.headers.Retry-After.description
Seconds to wait before retrying. Present when the limiter can compute a retry delay.

# paths./v1/projects/{project_id}/publish/{deployment_id}.get.responses.429.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/publish/{deployment_id}.get.responses.429.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/publish/{deployment_id}.get.responses.429.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/publish/{deployment_id}.get.responses.default.description
Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

# paths./v1/projects/{project_id}/publish/{deployment_id}.get.responses.default.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/publish/{deployment_id}.get.responses.default.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/publish/{deployment_id}.get.responses.default.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/publish/{deployment_id}.get.x-codeSamples[].source
import { LovableClient } from "@lovable.dev/sdk";

const client = new LovableClient({
  apiKey: process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
});

const { data } = await client.typed.GET("/v1/projects/{project_id}/publish/{deployment_id}", {
  params: {
    path: {
      "project_id": "project-id",
      "deployment_id": "deployment-id",
    },
  },
});
console.log(data);

# paths./v1/projects/{project_id}/publish/{deployment_id}.get.x-codeSamples[].source
curl --request GET \
  --url 'https://api.lovable.dev/v1/projects/project-id/publish/deployment-id' \
  --header 'Lovable-API-Key: lov_your-api-key'

# paths./v1/projects/{project_id}/publish/{deployment_id}.get.x-rateLimit.app_limiters[].notes[]
Poll with backoff and honor Retry-After on 429 responses.

# paths./v1/projects/{project_id}/publish/{deployment_id}.get.x-rateLimit.app_limiters[].description
Shared authenticated HTTP bucket for public API routes without a more specific limiter.

# paths./v1/projects/{project_id}/pii-labels.get.description
**Plan:** `Enterprise`

Returns PII labels detected for the project, newest first.

# paths./v1/projects/{project_id}/pii-labels.get.parameters[].description
Opaque cursor returned by a previous page; omit for the first page

# paths./v1/projects/{project_id}/pii-labels.get.parameters[].schema.description
Opaque cursor returned by a previous page; omit for the first page

# paths./v1/projects/{project_id}/pii-labels.get.responses.200.content.application/json.schema.description
PII labels ordered newest first (found_at descending, label ID as the cursor tie-breaker).

# paths./v1/projects/{project_id}/pii-labels.get.responses.200.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/pii-labels.get.responses.200.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/pii-labels.get.responses.200.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/pii-labels.get.responses.401.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/pii-labels.get.responses.401.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/pii-labels.get.responses.401.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/pii-labels.get.responses.402.content.application/json.example.title
You need to upgrade your plan to access this feature

# paths./v1/projects/{project_id}/pii-labels.get.responses.402.description
This operation or requested configuration requires a workspace plan that includes this feature.

# paths./v1/projects/{project_id}/pii-labels.get.responses.402.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/pii-labels.get.responses.402.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/pii-labels.get.responses.402.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/pii-labels.get.responses.403.content.application/json.example.title
You don't have the permissions to perform this action

# paths./v1/projects/{project_id}/pii-labels.get.responses.403.description
The key or caller lacks the required scope or permission.

# paths./v1/projects/{project_id}/pii-labels.get.responses.403.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/pii-labels.get.responses.403.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/pii-labels.get.responses.403.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/pii-labels.get.responses.406.content.application/json.example.title
This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.

# paths./v1/projects/{project_id}/pii-labels.get.responses.406.description
The Accept header excludes every media type this endpoint produces.

# paths./v1/projects/{project_id}/pii-labels.get.responses.406.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/pii-labels.get.responses.406.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/pii-labels.get.responses.406.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/pii-labels.get.responses.429.description
Too many requests. Retry after the interval in Retry-After when present.

# paths./v1/projects/{project_id}/pii-labels.get.responses.429.headers.Retry-After.description
Seconds to wait before retrying. Present when the limiter can compute a retry delay.

# paths./v1/projects/{project_id}/pii-labels.get.responses.429.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/pii-labels.get.responses.429.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/pii-labels.get.responses.429.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/pii-labels.get.responses.default.description
Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

# paths./v1/projects/{project_id}/pii-labels.get.responses.default.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/pii-labels.get.responses.default.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/pii-labels.get.responses.default.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/pii-labels.get.x-codeSamples[].source
import { LovableClient } from "@lovable.dev/sdk";

const client = new LovableClient({
  apiKey: process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
});

const { data } = await client.typed.GET("/v1/projects/{project_id}/pii-labels", {
  params: {
    path: {
      "project_id": "project-id",
    },
  },
});
console.log(data);

# paths./v1/projects/{project_id}/pii-labels.get.x-codeSamples[].source
curl --request GET \
  --url 'https://api.lovable.dev/v1/projects/project-id/pii-labels' \
  --header 'Lovable-API-Key: lov_your-api-key'

# paths./v1/projects/{project_id}/pii-labels.get.x-rateLimit.app_limiters[].description
Shared authenticated HTTP bucket for public API routes without a more specific limiter.

# paths./v1/projects/{project_id}/security-scans.get.description
**Plan:** `Business or higher`

Returns the project's security scan invocations, newest first.

# paths./v1/projects/{project_id}/security-scans.get.responses.200.content.application/json.schema.description
Scan invocations ordered newest first (started_at descending, scan ID as the cursor tie-breaker). Per-scanner runs and findings are on the get-by-scan_id detail route, not inline here.

# paths./v1/projects/{project_id}/security-scans.get.responses.200.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/security-scans.get.responses.200.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/security-scans.get.responses.200.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/security-scans.get.responses.401.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/security-scans.get.responses.401.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/security-scans.get.responses.401.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/security-scans.get.responses.402.content.application/json.example.title
You need to upgrade your plan to access this feature

# paths./v1/projects/{project_id}/security-scans.get.responses.402.description
This operation or requested configuration requires a workspace plan that includes this feature.

# paths./v1/projects/{project_id}/security-scans.get.responses.402.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/security-scans.get.responses.402.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/security-scans.get.responses.402.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/security-scans.get.responses.403.content.application/json.example.title
You don't have the permissions to perform this action

# paths./v1/projects/{project_id}/security-scans.get.responses.403.description
The key or caller lacks the required scope or permission.

# paths./v1/projects/{project_id}/security-scans.get.responses.403.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/security-scans.get.responses.403.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/security-scans.get.responses.403.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/security-scans.get.responses.406.content.application/json.example.title
This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.

# paths./v1/projects/{project_id}/security-scans.get.responses.406.description
The Accept header excludes every media type this endpoint produces.

# paths./v1/projects/{project_id}/security-scans.get.responses.406.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/security-scans.get.responses.406.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/security-scans.get.responses.406.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/security-scans.get.responses.429.description
Too many requests. Retry after the interval in Retry-After when present.

# paths./v1/projects/{project_id}/security-scans.get.responses.429.headers.Retry-After.description
Seconds to wait before retrying. Present when the limiter can compute a retry delay.

# paths./v1/projects/{project_id}/security-scans.get.responses.429.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/security-scans.get.responses.429.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/security-scans.get.responses.429.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/security-scans.get.responses.default.description
Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

# paths./v1/projects/{project_id}/security-scans.get.responses.default.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/security-scans.get.responses.default.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/security-scans.get.responses.default.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/security-scans.get.x-codeSamples[].source
import { LovableClient } from "@lovable.dev/sdk";

const client = new LovableClient({
  apiKey: process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
});

const { data } = await client.typed.GET("/v1/projects/{project_id}/security-scans", {
  params: {
    path: {
      "project_id": "project-id",
    },
  },
});
console.log(data);

# paths./v1/projects/{project_id}/security-scans.get.x-codeSamples[].source
curl --request GET \
  --url 'https://api.lovable.dev/v1/projects/project-id/security-scans' \
  --header 'Lovable-API-Key: lov_your-api-key'

# paths./v1/projects/{project_id}/security-scans.get.x-rateLimit.app_limiters[].description
Shared authenticated HTTP bucket for public API routes without a more specific limiter.

# paths./v1/projects/{project_id}/security-scans.post.description
**Plan:** `Business or higher`

Starts a security scan for the project's latest commit and returns a scan_id.

# paths./v1/projects/{project_id}/security-scans.post.responses.200.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/security-scans.post.responses.200.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/security-scans.post.responses.200.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/security-scans.post.responses.401.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/security-scans.post.responses.401.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/security-scans.post.responses.401.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/security-scans.post.responses.402.content.application/json.example.title
You need to upgrade your plan to access this feature

# paths./v1/projects/{project_id}/security-scans.post.responses.402.description
This operation or requested configuration requires a workspace plan that includes this feature.

# paths./v1/projects/{project_id}/security-scans.post.responses.402.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/security-scans.post.responses.402.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/security-scans.post.responses.402.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/security-scans.post.responses.403.content.application/json.example.title
You don't have the permissions to perform this action

# paths./v1/projects/{project_id}/security-scans.post.responses.403.description
The key or caller lacks the required scope or permission.

# paths./v1/projects/{project_id}/security-scans.post.responses.403.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/security-scans.post.responses.403.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/security-scans.post.responses.403.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/security-scans.post.responses.406.content.application/json.example.title
This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.

# paths./v1/projects/{project_id}/security-scans.post.responses.406.description
The Accept header excludes every media type this endpoint produces.

# paths./v1/projects/{project_id}/security-scans.post.responses.406.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/security-scans.post.responses.406.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/security-scans.post.responses.406.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/security-scans.post.responses.429.description
Too many requests. Retry after the interval in Retry-After when present.

# paths./v1/projects/{project_id}/security-scans.post.responses.429.headers.Retry-After.description
Seconds to wait before retrying. Present when the limiter can compute a retry delay.

# paths./v1/projects/{project_id}/security-scans.post.responses.429.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/security-scans.post.responses.429.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/security-scans.post.responses.429.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/security-scans.post.responses.default.description
Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

# paths./v1/projects/{project_id}/security-scans.post.responses.default.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/security-scans.post.responses.default.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/security-scans.post.responses.default.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/security-scans.post.x-codeSamples[].source
import { LovableClient } from "@lovable.dev/sdk";

const client = new LovableClient({
  apiKey: process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
});

const { data } = await client.typed.POST("/v1/projects/{project_id}/security-scans", {
  params: {
    path: {
      "project_id": "project-id",
    },
  },
});
console.log(data);

# paths./v1/projects/{project_id}/security-scans.post.x-codeSamples[].source
curl --request POST \
  --url 'https://api.lovable.dev/v1/projects/project-id/security-scans' \
  --header 'Lovable-API-Key: lov_your-api-key'

# paths./v1/projects/{project_id}/security-scans.post.x-rateLimit.app_limiters[].description
Shared authenticated HTTP bucket for public API routes without a more specific limiter.

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.description
**Plan:** `Business or higher`

Returns a single security scan invocation with per-scanner run details and findings.

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.parameters[].description
Scan invocation ID from the list endpoint

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.parameters[].schema.description
Scan invocation ID from the list endpoint

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.responses.200.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.responses.200.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.responses.200.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.responses.401.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.responses.401.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.responses.401.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.responses.402.content.application/json.example.title
You need to upgrade your plan to access this feature

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.responses.402.description
This operation or requested configuration requires a workspace plan that includes this feature.

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.responses.402.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.responses.402.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.responses.402.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.responses.403.content.application/json.example.title
You don't have the permissions to perform this action

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.responses.403.description
The key or caller lacks the required scope or permission.

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.responses.403.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.responses.403.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.responses.403.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.responses.406.content.application/json.example.title
This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.responses.406.description
The Accept header excludes every media type this endpoint produces.

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.responses.406.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.responses.406.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.responses.406.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.responses.429.description
Too many requests. Retry after the interval in Retry-After when present.

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.responses.429.headers.Retry-After.description
Seconds to wait before retrying. Present when the limiter can compute a retry delay.

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.responses.429.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.responses.429.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.responses.429.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.responses.default.description
Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.responses.default.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.responses.default.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.responses.default.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.x-codeSamples[].source
import { LovableClient } from "@lovable.dev/sdk";

const client = new LovableClient({
  apiKey: process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
});

const { data } = await client.typed.GET("/v1/projects/{project_id}/security-scans/{scan_id}", {
  params: {
    path: {
      "project_id": "project-id",
      "scan_id": "scan-id",
    },
  },
});
console.log(data);

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.x-codeSamples[].source
curl --request GET \
  --url 'https://api.lovable.dev/v1/projects/project-id/security-scans/scan-id' \
  --header 'Lovable-API-Key: lov_your-api-key'

# paths./v1/projects/{project_id}/security-scans/{scan_id}.get.x-rateLimit.app_limiters[].description
Shared authenticated HTTP bucket for public API routes without a more specific limiter.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.description
**Plan:** `Enterprise`

Returns the workspace security insights summary.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.parameters[].description
Repeat to keep only findings at these review priorities (needs_review=critical, review_recommended=high+medium, no_review_needed=low+minimal). Omit for all.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.parameters[].schema.description
Repeat to keep only findings at these review priorities (needs_review=critical, review_recommended=high+medium, no_review_needed=low+minimal). Omit for all.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.parameters[].description
Deprecated (ENT-3348): alias for review_priority; values from both parameters are combined.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.parameters[].schema.description
Deprecated (ENT-3348): alias for review_priority; values from both parameters are combined.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.responses.200.content.application/json.schema.description
Workspace security summary, curated for the public API.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.responses.200.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.responses.200.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.responses.200.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.responses.401.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.responses.401.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.responses.401.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.responses.402.content.application/json.example.title
You need to upgrade your plan to access this feature

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.responses.402.description
This operation or requested configuration requires a workspace plan that includes this feature.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.responses.402.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.responses.402.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.responses.402.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.responses.403.content.application/json.example.title
You don't have the permissions to perform this action

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.responses.403.description
The key or caller lacks the required scope or permission.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.responses.403.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.responses.403.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.responses.403.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.responses.406.content.application/json.example.title
This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.responses.406.description
The Accept header excludes every media type this endpoint produces.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.responses.406.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.responses.406.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.responses.406.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.responses.429.description
Too many requests. Retry after the interval in Retry-After when present.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.responses.429.headers.Retry-After.description
Seconds to wait before retrying. Present when the limiter can compute a retry delay.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.responses.429.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.responses.429.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.responses.429.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.responses.default.description
Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.responses.default.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.responses.default.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.responses.default.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.x-codeSamples[].source
import { LovableClient } from "@lovable.dev/sdk";

const client = new LovableClient({
  apiKey: process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
});

const { data } = await client.typed.GET("/v1/workspaces/{workspace_id}/security-center/insights", {
  params: {
    path: {
      "workspace_id": "workspace-id",
    },
  },
});
console.log(data);

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.x-codeSamples[].source
curl --request GET \
  --url 'https://api.lovable.dev/v1/workspaces/workspace-id/security-center/insights' \
  --header 'Lovable-API-Key: lov_your-api-key'

# paths./v1/workspaces/{workspace_id}/security-center/insights.get.x-rateLimit.app_limiters[].description
Shared authenticated HTTP bucket for public API routes without a more specific limiter.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.description
**Plan:** `Enterprise`

Returns the review-priority-ranked project inventory for the workspace, sorted by the selected sort_by (default last_edited, or relevance when query is set) with offset-based paging behind the cursor.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.parameters[].description
Opaque cursor from a prior response. Omit on the first page.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.parameters[].schema.description
Opaque cursor from a prior response. Omit on the first page.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.parameters[].description
Free-text search across project name and owner.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.parameters[].schema.description
Free-text search across project name and owner.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.parameters[].description
Sort axis. When omitted, results sort by last_edited (or by relevance when 'query' is set).

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.parameters[].schema.description
Sort axis. When omitted, results sort by last_edited (or by relevance when 'query' is set).

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.parameters[].description
Filter by publishing status. Omit for no filter.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.parameters[].schema.description
Filter by publishing status. Omit for no filter.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.parameters[].description
Filter to projects with at least one connector.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.parameters[].schema.description
Filter to projects with at least one connector.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.parameters[].description
Repeat to include multiple publishing statuses. Omit for all.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.parameters[].schema.description
Repeat to include multiple publishing statuses. Omit for all.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.parameters[].description
Repeat to include multiple review priorities (needs_review=critical, review_recommended=high+medium, no_review_needed=low+minimal). Unscored projects are not filterable but may appear in results.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.parameters[].schema.description
Repeat to include multiple review priorities (needs_review=critical, review_recommended=high+medium, no_review_needed=low+minimal). Unscored projects are not filterable but may appear in results.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.parameters[].description
Repeat to filter to projects matching any of the listed catalog findings (e.g. public_pii_exposure, abandoned_published). Unknown finding ids return 400.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.parameters[].schema.description
Repeat to filter to projects matching any of the listed catalog findings (e.g. public_pii_exposure, abandoned_published). Unknown finding ids return 400.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.responses.200.content.application/json.schema.description
Risk-ranked project inventory, curated for the public API.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.responses.200.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.responses.200.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.responses.200.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.responses.401.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.responses.401.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.responses.401.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.responses.402.content.application/json.example.title
You need to upgrade your plan to access this feature

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.responses.402.description
This operation or requested configuration requires a workspace plan that includes this feature.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.responses.402.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.responses.402.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.responses.402.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.responses.403.content.application/json.example.title
You don't have the permissions to perform this action

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.responses.403.description
The key or caller lacks the required scope or permission.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.responses.403.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.responses.403.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.responses.403.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.responses.406.content.application/json.example.title
This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.responses.406.description
The Accept header excludes every media type this endpoint produces.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.responses.406.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.responses.406.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.responses.406.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.responses.429.description
Too many requests. Retry after the interval in Retry-After when present.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.responses.429.headers.Retry-After.description
Seconds to wait before retrying. Present when the limiter can compute a retry delay.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.responses.429.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.responses.429.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.responses.429.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.responses.default.description
Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.responses.default.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.responses.default.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.responses.default.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.summary
List workspace security project inventory

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.x-codeSamples[].source
import { LovableClient } from "@lovable.dev/sdk";

const client = new LovableClient({
  apiKey: process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
});

const { data } = await client.typed.GET("/v1/workspaces/{workspace_id}/security-center/insights/projects", {
  params: {
    path: {
      "workspace_id": "workspace-id",
    },
  },
});
console.log(data);

# paths./v1/workspaces/{workspace_id}/security-center/insights/projects.get.x-rateLimit.app_limiters[].description
Shared authenticated HTTP bucket for public API routes without a more specific limiter.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.description
**Plan:** `Enterprise`

Returns workspace audit log entries newest first (event timestamp descending, event ID as the cursor tie-breaker), paginated via an opaque cursor. Pagination and total-count behavior may change before this operation graduates to the stable surface.

This operation is in public preview (beta) and served under `/v1beta`. Request and response shapes may change before it graduates to the stable `/v1` surface.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.parameters[].description
Opaque cursor returned by a previous page; omit for the first page.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.parameters[].schema.description
Opaque cursor returned by a previous page; omit for the first page.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.parameters[].description
Comma-separated audit-log action filter (exact match, e.g. workspace.member.added).

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.parameters[].schema.description
Comma-separated audit-log action filter (exact match, e.g. workspace.member.added).

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.parameters[].description
Comma-separated list of actor user IDs to filter by.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.parameters[].schema.description
Comma-separated list of actor user IDs to filter by.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.parameters[].description
Comma-separated list of target resource IDs to filter by.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.parameters[].schema.description
Comma-separated list of target resource IDs to filter by.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.parameters[].description
Token-based search on target_id and target_display_name. Minimum 3 characters.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.parameters[].schema.description
Token-based search on target_id and target_display_name. Minimum 3 characters.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.parameters[].description
RFC3339 inclusive start of the time range. Defaults to 30 days ago. When paginating with cursor, pass an explicit start_date so the default lower bound does not drift between pages.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.parameters[].schema.description
RFC3339 inclusive start of the time range. Defaults to 30 days ago. When paginating with cursor, pass an explicit start_date so the default lower bound does not drift between pages.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.parameters[].description
RFC3339 inclusive end of the time range. Defaults to now.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.parameters[].schema.description
RFC3339 inclusive end of the time range. Defaults to now.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.responses.200.content.application/json.schema.description
Paginated workspace audit log entries. Lovable-staff admin.* actions are filtered out and never reach this surface.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.responses.200.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.responses.200.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.responses.200.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.responses.401.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.responses.401.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.responses.401.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.responses.402.content.application/json.example.title
You need to upgrade your plan to access this feature

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.responses.402.description
This operation or requested configuration requires a workspace plan that includes this feature.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.responses.402.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.responses.402.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.responses.402.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.responses.403.content.application/json.example.title
You don't have the permissions to perform this action

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.responses.403.description
The key or caller lacks the required scope or permission.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.responses.403.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.responses.403.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.responses.403.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.responses.406.content.application/json.example.title
This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.responses.406.description
The Accept header excludes every media type this endpoint produces.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.responses.406.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.responses.406.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.responses.406.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.responses.429.description
Too many requests. Retry after the interval in Retry-After when present.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.responses.429.headers.Retry-After.description
Seconds to wait before retrying. Present when the limiter can compute a retry delay.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.responses.429.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.responses.429.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.responses.429.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.responses.default.description
Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.responses.default.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.responses.default.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.responses.default.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.x-codeSamples[].source
import { LovableClient } from "@lovable.dev/sdk";

const client = new LovableClient({
  apiKey: process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
});

const { data } = await client.typed.GET("/v1beta/workspaces/{workspace_id}/audit-logs", {
  params: {
    path: {
      "workspace_id": "workspace-id",
    },
  },
});
console.log(data);

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.x-codeSamples[].source
curl --request GET \
  --url 'https://api.lovable.dev/v1beta/workspaces/workspace-id/audit-logs' \
  --header 'Lovable-API-Key: lov_your-api-key'

# paths./v1beta/workspaces/{workspace_id}/audit-logs.get.x-rateLimit.app_limiters[].description
Shared authenticated HTTP bucket for public API routes without a more specific limiter.

# paths./v1/projects/{project_id}/analytics.get.description
**Plan:** `All plans`

Returns analytics for a published project: the historical time series and breakdowns for a date range by default, or the real-time visitor trend with series=trend.

# paths./v1/projects/{project_id}/analytics.get.parameters[].description
historical returns the time series and breakdowns for the requested date range; trend returns the real-time visitor trend for the last 30 minutes.

# paths./v1/projects/{project_id}/analytics.get.parameters[].schema.description
historical returns the time series and breakdowns for the requested date range; trend returns the real-time visitor trend for the last 30 minutes.

# paths./v1/projects/{project_id}/analytics.get.parameters[].description
Start date in RFC 3339 format (e.g. 2026-04-01T00:00:00Z). Required when series=historical.

# paths./v1/projects/{project_id}/analytics.get.parameters[].schema.description
Start date in RFC 3339 format (e.g. 2026-04-01T00:00:00Z). Required when series=historical.

# paths./v1/projects/{project_id}/analytics.get.parameters[].description
End date in RFC 3339 format (e.g. 2026-04-08T00:00:00Z). Required when series=historical.

# paths./v1/projects/{project_id}/analytics.get.parameters[].schema.description
End date in RFC 3339 format (e.g. 2026-04-08T00:00:00Z). Required when series=historical.

# paths./v1/projects/{project_id}/analytics.get.parameters[].description
Time bucket size for series=historical: hourly or daily (default: daily).

# paths./v1/projects/{project_id}/analytics.get.parameters[].schema.description
Time bucket size for series=historical: hourly or daily (default: daily).

# paths./v1/projects/{project_id}/analytics.get.responses.200.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/analytics.get.responses.200.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/analytics.get.responses.200.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/analytics.get.responses.401.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/analytics.get.responses.401.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/analytics.get.responses.401.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/analytics.get.responses.403.content.application/json.example.title
You don't have the permissions to perform this action

# paths./v1/projects/{project_id}/analytics.get.responses.403.description
The key or caller lacks the required scope or permission.

# paths./v1/projects/{project_id}/analytics.get.responses.403.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/analytics.get.responses.403.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/analytics.get.responses.403.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/analytics.get.responses.406.content.application/json.example.title
This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.

# paths./v1/projects/{project_id}/analytics.get.responses.406.description
The Accept header excludes every media type this endpoint produces.

# paths./v1/projects/{project_id}/analytics.get.responses.406.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/analytics.get.responses.406.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/analytics.get.responses.406.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/analytics.get.responses.429.description
Too many requests. Retry after the interval in Retry-After when present.

# paths./v1/projects/{project_id}/analytics.get.responses.429.headers.Retry-After.description
Seconds to wait before retrying. Present when the limiter can compute a retry delay.

# paths./v1/projects/{project_id}/analytics.get.responses.429.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/analytics.get.responses.429.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/analytics.get.responses.429.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/analytics.get.responses.default.description
Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

# paths./v1/projects/{project_id}/analytics.get.responses.default.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/projects/{project_id}/analytics.get.responses.default.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/projects/{project_id}/analytics.get.responses.default.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/projects/{project_id}/analytics.get.x-codeSamples[].source
import { LovableClient } from "@lovable.dev/sdk";

const client = new LovableClient({
  apiKey: process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
});

const analytics = await client.getProjectAnalytics("project-id", {
  startDate: "2026-06-01T00:00:00Z",
  endDate: "2026-06-08T00:00:00Z",
  granularity: "daily",
});
console.log(analytics);

# paths./v1/projects/{project_id}/analytics.get.x-codeSamples[].source
curl --request GET \
  --url 'https://api.lovable.dev/v1/projects/project-id/analytics' \
  --header 'Lovable-API-Key: lov_your-api-key'

# paths./v1/projects/{project_id}/analytics.get.x-rateLimit.app_limiters[].description
Shared authenticated HTTP bucket for public API routes without a more specific limiter.

# paths./v1/workspaces/{workspace_id}/analytics.get.description
**Plan:** `Business or higher`

Returns workspace-wide analytics time series aggregated across the workspace's projects. Not paginated: the response always covers the full requested window and cursor/limit parameters are not supported — narrow the date range or use daily granularity to reduce response size.

# paths./v1/workspaces/{workspace_id}/analytics.get.parameters[].description
Time bucket size: hourly or daily (default: daily)

# paths./v1/workspaces/{workspace_id}/analytics.get.parameters[].schema.description
Time bucket size: hourly or daily (default: daily)

# paths./v1/workspaces/{workspace_id}/analytics.get.responses.200.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/analytics.get.responses.200.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/analytics.get.responses.200.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/analytics.get.responses.401.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/analytics.get.responses.401.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/analytics.get.responses.401.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/analytics.get.responses.402.content.application/json.example.title
You need to upgrade your plan to access this feature

# paths./v1/workspaces/{workspace_id}/analytics.get.responses.402.description
This operation or requested configuration requires a workspace plan that includes this feature.

# paths./v1/workspaces/{workspace_id}/analytics.get.responses.402.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/analytics.get.responses.402.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/analytics.get.responses.402.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/analytics.get.responses.403.content.application/json.example.title
You don't have the permissions to perform this action

# paths./v1/workspaces/{workspace_id}/analytics.get.responses.403.description
The key or caller lacks the required scope or permission.

# paths./v1/workspaces/{workspace_id}/analytics.get.responses.403.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/analytics.get.responses.403.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/analytics.get.responses.403.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/analytics.get.responses.406.content.application/json.example.title
This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.

# paths./v1/workspaces/{workspace_id}/analytics.get.responses.406.description
The Accept header excludes every media type this endpoint produces.

# paths./v1/workspaces/{workspace_id}/analytics.get.responses.406.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/analytics.get.responses.406.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/analytics.get.responses.406.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/analytics.get.responses.429.description
Too many requests. Retry after the interval in Retry-After when present.

# paths./v1/workspaces/{workspace_id}/analytics.get.responses.429.headers.Retry-After.description
Seconds to wait before retrying. Present when the limiter can compute a retry delay.

# paths./v1/workspaces/{workspace_id}/analytics.get.responses.429.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/analytics.get.responses.429.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/analytics.get.responses.429.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/analytics.get.responses.default.description
Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

# paths./v1/workspaces/{workspace_id}/analytics.get.responses.default.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/analytics.get.responses.default.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/analytics.get.responses.default.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/analytics.get.x-codeSamples[].source
import { LovableClient } from "@lovable.dev/sdk";

const client = new LovableClient({
  apiKey: process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
});

const { data } = await client.typed.GET("/v1/workspaces/{workspace_id}/analytics", {
  params: {
    path: {
      "workspace_id": "workspace-id",
    },
  },
});
console.log(data);

# paths./v1/workspaces/{workspace_id}/analytics.get.x-codeSamples[].source
curl --request GET \
  --url 'https://api.lovable.dev/v1/workspaces/workspace-id/analytics' \
  --header 'Lovable-API-Key: lov_your-api-key'

# paths./v1/workspaces/{workspace_id}/analytics.get.x-rateLimit.app_limiters[].description
Shared authenticated HTTP bucket for public API routes without a more specific limiter.

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.description
**Plan:** `Enterprise`

Returns the workspace's aggregated credit balance, daily limit, billing-period usage, expiring grants, and per-bucket balances.

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.responses.200.content.application/json.schema.description
Workspace credit balance for the current billing period.

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.responses.200.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.responses.200.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.responses.200.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.responses.401.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.responses.401.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.responses.401.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.responses.402.content.application/json.example.title
You need to upgrade your plan to access this feature

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.responses.402.description
This operation or requested configuration requires a workspace plan that includes this feature.

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.responses.402.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.responses.402.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.responses.402.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.responses.403.content.application/json.example.title
You don't have the permissions to perform this action

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.responses.403.description
The key or caller lacks the required scope or permission.

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.responses.403.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.responses.403.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.responses.403.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.responses.406.content.application/json.example.title
This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.responses.406.description
The Accept header excludes every media type this endpoint produces.

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.responses.406.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.responses.406.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.responses.406.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.responses.429.description
Too many requests. Retry after the interval in Retry-After when present.

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.responses.429.headers.Retry-After.description
Seconds to wait before retrying. Present when the limiter can compute a retry delay.

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.responses.429.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.responses.429.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.responses.429.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.responses.default.description
Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.responses.default.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.responses.default.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.responses.default.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.x-codeSamples[].source
import { LovableClient } from "@lovable.dev/sdk";

const client = new LovableClient({
  apiKey: process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
});

const { data } = await client.typed.GET("/v1/workspaces/{workspace_id}/billing/credit-balance", {
  params: {
    path: {
      "workspace_id": "workspace-id",
    },
  },
});
console.log(data);

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.x-codeSamples[].source
curl --request GET \
  --url 'https://api.lovable.dev/v1/workspaces/workspace-id/billing/credit-balance' \
  --header 'Lovable-API-Key: lov_your-api-key'

# paths./v1/workspaces/{workspace_id}/billing/credit-balance.get.x-rateLimit.app_limiters[].description
Shared authenticated HTTP bucket for public API routes without a more specific limiter.

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.description
**Plan:** `Enterprise`

Returns the workspace's credit grant, expiry, adjustment, and conversion history, ordered by occurred_at descending with entry ID as the cursor tie-breaker.

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.parameters[].description
Filter to one or more event types. Repeat to include multiple; omit for all.

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.parameters[].schema.description
Filter to one or more event types. Repeat to include multiple; omit for all.

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.parameters[].description
Opaque pagination cursor returned by the previous page

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.parameters[].schema.description
Opaque pagination cursor returned by the previous page

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.responses.200.content.application/json.schema.description
Paginated workspace credit history, newest first.

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.responses.200.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.responses.200.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.responses.200.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.responses.401.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.responses.401.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.responses.401.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.responses.402.content.application/json.example.title
You need to upgrade your plan to access this feature

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.responses.402.description
This operation or requested configuration requires a workspace plan that includes this feature.

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.responses.402.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.responses.402.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.responses.402.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.responses.403.content.application/json.example.title
You don't have the permissions to perform this action

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.responses.403.description
The key or caller lacks the required scope or permission.

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.responses.403.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.responses.403.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.responses.403.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.responses.406.content.application/json.example.title
This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.responses.406.description
The Accept header excludes every media type this endpoint produces.

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.responses.406.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.responses.406.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.responses.406.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.responses.429.description
Too many requests. Retry after the interval in Retry-After when present.

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.responses.429.headers.Retry-After.description
Seconds to wait before retrying. Present when the limiter can compute a retry delay.

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.responses.429.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.responses.429.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.responses.429.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.responses.default.description
Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.responses.default.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.responses.default.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.responses.default.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.x-codeSamples[].source
import { LovableClient } from "@lovable.dev/sdk";

const client = new LovableClient({
  apiKey: process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
});

const { data } = await client.typed.GET("/v1/workspaces/{workspace_id}/billing/credit-history", {
  params: {
    path: {
      "workspace_id": "workspace-id",
    },
  },
});
console.log(data);

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.x-codeSamples[].source
curl --request GET \
  --url 'https://api.lovable.dev/v1/workspaces/workspace-id/billing/credit-history' \
  --header 'Lovable-API-Key: lov_your-api-key'

# paths./v1/workspaces/{workspace_id}/billing/credit-history.get.x-rateLimit.app_limiters[].description
Shared authenticated HTTP bucket for public API routes without a more specific limiter.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.description
**Plan:** `Enterprise`

Returns each active member's monthly credit limit plus the workspace default, paginated. Members without an explicit limit inherit the workspace default.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.parameters[].description
Opaque cursor from a prior response. Omit on the first page.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.parameters[].schema.description
Opaque cursor from a prior response. Omit on the first page.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.responses.200.content.application/json.schema.description
Per-member monthly credit limits and the workspace default.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.responses.200.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.responses.200.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.responses.200.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.responses.401.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.responses.401.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.responses.401.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.responses.402.content.application/json.example.title
You need to upgrade your plan to access this feature

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.responses.402.description
This operation or requested configuration requires a workspace plan that includes this feature.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.responses.402.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.responses.402.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.responses.402.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.responses.403.content.application/json.example.title
You don't have the permissions to perform this action

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.responses.403.description
The key or caller lacks the required scope or permission.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.responses.403.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.responses.403.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.responses.403.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.responses.406.content.application/json.example.title
This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.responses.406.description
The Accept header excludes every media type this endpoint produces.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.responses.406.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.responses.406.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.responses.406.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.responses.429.description
Too many requests. Retry after the interval in Retry-After when present.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.responses.429.headers.Retry-After.description
Seconds to wait before retrying. Present when the limiter can compute a retry delay.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.responses.429.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.responses.429.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.responses.429.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.responses.default.description
Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.responses.default.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.responses.default.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.responses.default.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.x-codeSamples[].source
import { LovableClient } from "@lovable.dev/sdk";

const client = new LovableClient({
  apiKey: process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
});

const { data } = await client.typed.GET("/v1/workspaces/{workspace_id}/billing/credit-limits", {
  params: {
    path: {
      "workspace_id": "workspace-id",
    },
  },
});
console.log(data);

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.x-codeSamples[].source
curl --request GET \
  --url 'https://api.lovable.dev/v1/workspaces/workspace-id/billing/credit-limits' \
  --header 'Lovable-API-Key: lov_your-api-key'

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.get.x-rateLimit.app_limiters[].description
Shared authenticated HTTP bucket for public API routes without a more specific limiter.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.description
**Plan:** `Enterprise`

Sets or clears the monthly credit limit for 1-1000 members in one request (send a single-item list for one member). Returns HTTP 200 with a per-member result; an individual failure does not fail the request. If every member fails, returns HTTP 422 with the same per-member response body.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.200.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.200.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.200.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.401.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.401.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.401.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.402.content.application/json.example.title
You need to upgrade your plan to access this feature

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.402.description
This operation or requested configuration requires a workspace plan that includes this feature.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.402.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.402.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.402.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.403.content.application/json.example.title
You don't have the permissions to perform this action

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.403.description
The key or caller lacks the required scope or permission.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.403.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.403.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.403.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.406.content.application/json.example.title
This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.406.description
The Accept header excludes every media type this endpoint produces.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.406.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.406.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.406.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.422.description
Every member failed; same per-member response body as 200

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.422.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.422.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.422.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.429.description
Too many requests. Retry after the interval in Retry-After when present.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.429.headers.Retry-After.description
Seconds to wait before retrying. Present when the limiter can compute a retry delay.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.429.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.429.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.429.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.default.description
Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.default.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.default.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.responses.default.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.x-codeSamples[].source
import { LovableClient } from "@lovable.dev/sdk";

const client = new LovableClient({
  apiKey: process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
});

const { data } = await client.typed.POST("/v1/workspaces/{workspace_id}/billing/credit-limits", {
  params: {
    path: {
      "workspace_id": "workspace-id",
    },
  },
  body: {
    "members": [],
  },
});
console.log(data);

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.x-codeSamples[].source
curl --request POST \
  --url 'https://api.lovable.dev/v1/workspaces/workspace-id/billing/credit-limits' \
  --header 'Lovable-API-Key: lov_your-api-key' \
  --header 'Content-Type: application/json' \
  --data '{"members":[]}'

# paths./v1/workspaces/{workspace_id}/billing/credit-limits.post.x-rateLimit.app_limiters[].description
Shared authenticated HTTP bucket for public API routes without a more specific limiter.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.description
**Plan:** `Enterprise`

Returns credit usage for a time window: one aggregate row by default, per-member or per-project rows with group_by, or time-bucketed rows with interval. Member-attributed rows (group_by=member, or a query filtered to one user_id) also carry the member's display_name and workspace email; project rows carry the project ID only (join the projects endpoint for the name). Grouped rows cover only entities with usage in the window (zero-usage members are omitted), and usage not attributed to a member or project counts toward workspace_total but appears in no row. Queries not restricted to the calling user (user_id=me) require workspace admin permission.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.parameters[].description
Group rows by member or project across the window. Omit for one workspace-wide aggregate row. Cannot be combined with interval.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.parameters[].schema.description
Group rows by member or project across the window. Omit for one workspace-wide aggregate row. Cannot be combined with interval.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.parameters[].description
Bucket rows by time. Coarser intervals allow a longer window (~400 days at day, ~3 years at week, ~10 years at month). Cannot be combined with group_by.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.parameters[].schema.description
Bucket rows by time. Coarser intervals allow a longer window (~400 days at day, ~3 years at week, ~10 years at month). Cannot be combined with group_by.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.parameters[].description
Inclusive end (UTC day). Defaults to today (UTC).

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.parameters[].schema.description
Inclusive end (UTC day). Defaults to today (UTC).

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.parameters[].description
Optional: restrict to a single project's usage.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.parameters[].schema.description
Optional: restrict to a single project's usage.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.parameters[].description
Optional: restrict to a single member's usage. Pass 'me' for the calling user; queries not restricted to the caller require workspace admin permission.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.parameters[].schema.description
Optional: restrict to a single member's usage. Pass 'me' for the calling user; queries not restricted to the caller require workspace admin permission.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.parameters[].description
Opaque pagination cursor returned by the previous page

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.parameters[].schema.description
Opaque pagination cursor returned by the previous page

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.responses.200.content.application/json.schema.description
Workspace credit usage for the requested window.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.responses.200.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.responses.200.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.responses.200.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.responses.401.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.responses.401.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.responses.401.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.responses.402.content.application/json.example.title
You need to upgrade your plan to access this feature

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.responses.402.description
This operation or requested configuration requires a workspace plan that includes this feature.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.responses.402.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.responses.402.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.responses.402.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.responses.403.content.application/json.example.title
You don't have the permissions to perform this action

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.responses.403.description
The key or caller lacks the required scope or permission.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.responses.403.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.responses.403.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.responses.403.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.responses.406.content.application/json.example.title
This endpoint produces application/json. Send a matching Accept header, */*, or omit the header.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.responses.406.description
The Accept header excludes every media type this endpoint produces.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.responses.406.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.responses.406.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.responses.406.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.responses.429.description
Too many requests. Retry after the interval in Retry-After when present.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.responses.429.headers.Retry-After.description
Seconds to wait before retrying. Present when the limiter can compute a retry delay.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.responses.429.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.responses.429.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.responses.429.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.responses.default.description
Error. The response body uses the standard error envelope; status matches the HTTP status code and type is a machine-readable error code.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.responses.default.headers.X-RateLimit-Limit.description
Limit for the most constrained bucket that evaluated the request. Several buckets can apply to one request; all three headers describe the one closest to exhaustion, which is the budget that binds the next request.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.responses.default.headers.X-RateLimit-Remaining.description
Remaining requests in the most constrained bucket that evaluated the request.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.responses.default.headers.X-RateLimit-Reset.description
UTC epoch seconds when the most constrained bucket that evaluated the request next regains capacity.

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.x-codeSamples[].source
import { LovableClient } from "@lovable.dev/sdk";

const client = new LovableClient({
  apiKey: process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
});

const { data } = await client.typed.GET("/v1/workspaces/{workspace_id}/billing/credit-usage", {
  params: {
    path: {
      "workspace_id": "workspace-id",
    },
    query: {
      "start_date": "2026-01-01",
    },
  },
});
console.log(data);

# paths./v1/workspaces/{workspace_id}/billing/credit-usage.get.x-rateLimit.app_limiters[].description
Shared authenticated HTTP bucket for public API routes without a more specific limiter.

# tags[].description
The identity behind the API key or session token.

# tags[].description
Workspaces the caller belongs to, and their settings.

# tags[].description
Workspace members and per-project collaborators.

# tags[].description
Create, read, update, and delete projects.

# tags[].description
Security scans, PII labels, audit logs, and workspace security insights.

# tags[].description
Workspace credit balance, history, usage, and member credit limits.