# info.summary
Integration contract for contractor proposals, pipeline updates, invoices, signatures, and payment handoffs.

# info.description
Machine-readable API contract for ProJobCalc proposal, invoice, voice bid, and integration discovery surfaces.

# tags[].description
Proposal creation, sharing, status, and timeline routes.

# tags[].description
Invoice routes for accounting and payment operations.

# tags[].description
Public integration metadata and contracts.

# paths./api/proposals.get.description
Read proposal pipeline rows, amounts, status, client names, share tokens, and signature state.

# paths./api/proposals.post.description
Create a draft proposal from project name, client data, line items, overhead, margin, and notes.

# paths./api/proposals/{id}/status.patch.description
Move a proposal through draft, sent, viewed, won, lost, accepted, or declined states.

# paths./api/proposals/{id}/share.post.description
Generate a client-facing proposal link that can be opened, replied to, signed, and tracked.

# paths./api/proposals/{id}/events.get.description
Fetch open, view, reply, signature, and payment timeline data for automations and audits.

# paths./api/invoices.get.description
Read invoices for accounting exports, payment follow-up, and revenue operations.

# paths./api/invoices.post.description
Create an invoice from client, line items, tax, due date, and payment metadata.

# paths./api/voice/transcribe-bid.post.description
Turn a field recording into structured scope, materials, labor, and a draft proposal.

# paths./api/integrations/manifest.get.description
Machine-readable compatibility map for routes, webhook events, payloads, and signing conventions.

# paths./integration-manifest.json.get.description
Public root JSON alias for integration discovery tools that expect a predictable manifest URL.

# paths./api/integrations/openapi.get.description
OpenAPI 3.1 contract for proposal, invoice, voice, discovery, and webhook integration surfaces.

# paths./openapi.json.get.description
Public root OpenAPI 3.1 alias for documentation generators, API clients, and automation builders.

# webhooks.proposal.created.post.description
A new draft proposal was created from the dashboard, API, voice capture, or estimate conversion.

# webhooks.proposal.sent.post.description
A proposal was sent to a client by email, SMS, or share link.

# webhooks.proposal.viewed.post.description
The client opened a tracked proposal link or view pixel.

# webhooks.proposal.signed.post.description
The client accepted and signed a public proposal.

# webhooks.invoice.created.post.description
A new invoice was created directly or from a won estimate/proposal.

# webhooks.payment.received.post.description
A Stripe payment or deposit was recorded against a proposal or invoice.

# components.securitySchemes.bearerAuth.description
Planned API-key compatible Bearer token mode.

# components.securitySchemes.cookieAuth.description
Dashboard session cookie used by the current authenticated app surface.

# components.schemas.CreateInvoiceRequest.description
Invoice creation payload. This surface is dashboard-backed today and reserved for API-key automation.

# x-projobcalc.recipes[].goal
Notify the estimator and create a same-day follow-up task when a client opens a proposal.

# x-projobcalc.recipes[].steps[]
Receive proposal.viewed with proposalId, status, viewedAt, and viewCount.

# x-projobcalc.recipes[].steps[]
Move the CRM deal to Viewed or Hot Lead.

# x-projobcalc.recipes[].steps[]
Post a Slack or SMS-style alert to the estimator with the proposal link and view count.

# x-projobcalc.recipes[].steps[]
Create a follow-up task due today when viewCount is 2 or higher.

# x-projobcalc.recipes[].goal
Turn an accepted proposal into invoice, folder, and crew-kickoff work without waiting for manual admin.

# x-projobcalc.recipes[].steps[]
Receive proposal.signed with proposalId, signedBy, and signedAt.

# x-projobcalc.recipes[].steps[]
Create or update the customer/project record in the shop CRM.

# x-projobcalc.recipes[].steps[]
Create a deposit invoice or invoice draft from the won proposal amount.

# x-projobcalc.recipes[].steps[]
Create a project folder and notify the owner or crew lead to schedule kickoff.

# x-projobcalc.recipes[].goal
Reconcile Stripe payments against invoices and keep accounting exports current.

# x-projobcalc.recipes[].steps[]
Receive payment.received with invoiceId, proposalId, amountPaid, paidAt, and provider.

# x-projobcalc.recipes[].steps[]
Mark the related accounting row or invoice as paid.

# x-projobcalc.recipes[].steps[]
Append the transaction to a monthly revenue sheet with source, amount, and paid date.

# x-projobcalc.recipes[].steps[]
Notify the owner if the payment is a deposit that should trigger scheduling.

# x-projobcalc.recipes[].goal
Route voice-to-bid drafts into a review queue so field notes become clean proposals.

# x-projobcalc.recipes[].steps[]
Send field audio to the voice-to-bid draft endpoint from an authenticated workflow.

# x-projobcalc.recipes[].steps[]
Capture the transcript, extracted scope, materials, labor, and draftProposalId.

# x-projobcalc.recipes[].steps[]
Add a review row for the estimator with missing fields and confidence notes.

# x-projobcalc.recipes[].steps[]
Create a follow-up proposal task when the draft is ready to price and send.

# x-projobcalc-recipes[].goal
Notify the estimator and create a same-day follow-up task when a client opens a proposal.

# x-projobcalc-recipes[].steps[]
Receive proposal.viewed with proposalId, status, viewedAt, and viewCount.

# x-projobcalc-recipes[].steps[]
Move the CRM deal to Viewed or Hot Lead.

# x-projobcalc-recipes[].steps[]
Post a Slack or SMS-style alert to the estimator with the proposal link and view count.

# x-projobcalc-recipes[].steps[]
Create a follow-up task due today when viewCount is 2 or higher.

# x-projobcalc-recipes[].goal
Turn an accepted proposal into invoice, folder, and crew-kickoff work without waiting for manual admin.

# x-projobcalc-recipes[].steps[]
Receive proposal.signed with proposalId, signedBy, and signedAt.

# x-projobcalc-recipes[].steps[]
Create or update the customer/project record in the shop CRM.

# x-projobcalc-recipes[].steps[]
Create a deposit invoice or invoice draft from the won proposal amount.

# x-projobcalc-recipes[].steps[]
Create a project folder and notify the owner or crew lead to schedule kickoff.

# x-projobcalc-recipes[].goal
Reconcile Stripe payments against invoices and keep accounting exports current.

# x-projobcalc-recipes[].steps[]
Receive payment.received with invoiceId, proposalId, amountPaid, paidAt, and provider.

# x-projobcalc-recipes[].steps[]
Mark the related accounting row or invoice as paid.

# x-projobcalc-recipes[].steps[]
Append the transaction to a monthly revenue sheet with source, amount, and paid date.

# x-projobcalc-recipes[].steps[]
Notify the owner if the payment is a deposit that should trigger scheduling.

# x-projobcalc-recipes[].goal
Route voice-to-bid drafts into a review queue so field notes become clean proposals.

# x-projobcalc-recipes[].steps[]
Send field audio to the voice-to-bid draft endpoint from an authenticated workflow.

# x-projobcalc-recipes[].steps[]
Capture the transcript, extracted scope, materials, labor, and draftProposalId.

# x-projobcalc-recipes[].steps[]
Add a review row for the estimator with missing fields and confidence notes.

# x-projobcalc-recipes[].steps[]
Create a follow-up proposal task when the draft is ready to price and send.