Submitting Proposals to Buyer Requests
Overview
As a vendor, you can submit proposals to buyer requests to win new projects. Proposals let you pitch your services, quote your price, and explain why you’re the right fit for the job.
Key Facts:
- One proposal per request per vendor
- Proposals can be edited while
pending - No character length limits enforced
- Order created immediately when accepted
Finding Buyer Requests
Dashboard Access
Navigate to: Dashboard → Buyer Requests
View Options:
- All open requests
- Filter by category
- Search by keywords
- Sort by budget/date
Request Details
Click any request to view:
- Full project description
- Budget range or fixed price
- Desired delivery timeline
- Category and skills needed
- Attachments (if any)
- Buyer’s profile and history
- Number of proposals already submitted
Proposal Requirements
Eligibility
You can submit proposals if:
- ✓ You’re a verified vendor
- ✓ Request status is
open - ✓ You haven’t submitted a proposal yet (one per request)
- ✓ Request hasn’t expired
You cannot submit if:
- ✗ You already proposed to this request
- ✗ Request is
closed,hired, orexpired - ✗ You’re the buyer (can’t propose to your own request)
- ✗ Your vendor account is suspended
One Proposal Per Request
Important: The code enforces ONE proposal per vendor per request.
If you try to submit again:
- Error: “You have already submitted a proposal”
- Edit your existing proposal instead
- Withdrawn proposals don’t count (you can submit a new one)
Proposal Form Fields
Cover Letter (Required)
Explain your approach and why you’re the best choice.
Field: cover_letter (text)
No Character Limit: Previous documentation claimed strict limits. The code has NO server-side validation for length.
What to Include:
- Understanding of the project
- Your relevant experience
- Approach/methodology
- Why you’re a good fit
- Examples of similar work
Good Example:
Hi [Buyer Name],
I've reviewed your WordPress WooCommerce wishlist plugin requirements
and I'm confident I can deliver exactly what you need.
Relevant Experience:
- Built 15+ custom WooCommerce plugins
- 5 years WordPress development
- Expertise in wishlist/favorites features
My Approach:
1. Database schema for wishlist storage (days 1-2)
2. Frontend wishlist UI with AJAX (days 3-5)
3. Email reminder system (days 6-7)
4. Share functionality (day 8)
5. Admin dashboard (days 9-10)
6. Testing & documentation (days 11-12)
I'll provide clean, documented code with 30 days of support.
Portfolio: [link to similar projects]
Looking forward to working with you!
Best regards,
[Your Name]
Bad Example:
I can do this. Please hire me. Good price.
Price (Required)
Your proposed price for the project.
Field: proposed_price (float)
Pricing Strategy:
- Review buyer’s budget
- Calculate your costs + profit
- Consider project complexity
- Factor in timeline
- Include revisions/support
Budget Matching:
- Buyer budget: $300-$500
- Your proposal: $450 (within range)
- Too low: $200 (suspiciously cheap)
- Too high: $800 (outside budget)
Delivery Days (Required)
How many days you need to complete the work.
Field: proposed_days (integer)
Setting Timeline:
- Be realistic (don’t over-promise)
- Add buffer for revisions (10-20%)
- Consider your current workload
- Match or beat buyer’s preferred timeline
Example:
- Buyer wants: 7 days
- Your estimate: 10 days
- Your proposal: 12 days (with buffer)
Note: The old docs incorrectly called this “deliverydays”. The actual field name is proposeddays in the database and delivery_days in API parameters.
Attachments (Optional)
Field: attachments (JSON array)
Link to:
- Portfolio samples
- Similar past projects
- Mockups or previews
- Relevant certifications
Format: Stored as JSON string in database
{
"attachments": [
{"type": "link", "url": "https://..."},
{"type": "file", "id": 123}
]
}
Service Link (Optional)
Field: service_id (integer)
If you have an existing service that matches the request, you can link it.
Benefits:
- Buyer sees your service details
- Reviews and ratings displayed
- Shows professionalism
- Not required, but helpful
Proposal Statuses
Your proposal will have one of these statuses:
| Status | Meaning |
|---|---|
| pending | Submitted, awaiting buyer decision |
| accepted | Buyer accepted, order created |
| rejected | Buyer declined your proposal |
| withdrawn | You withdrew your proposal |
Important: Previous documentation listed 7+ statuses including “Submitted”, “Under Review”, and “Expired”. Only these 4 exist in the code.
Submitting Your Proposal
Step 1: Complete Form
- Go to buyer request detail page
- Click Submit Proposal
- Fill in cover letter
- Set your price
- Set delivery days
- Add attachments (optional)
- Link service (optional)
Step 2: Review
Before submitting:
- ✓ Cover letter is professional and specific
- ✓ Price is competitive and fair
- ✓ Timeline is realistic
- ✓ No typos or errors
Step 3: Submit
Click Submit Proposal button.
What Happens:
- Proposal created with status
pending - Stored in
wpss_proposalstable - Buyer notified via email
- Buyer can view in their request dashboard
- You receive confirmation
Notifications:
- To Buyer: “New proposal on your request”
- To You: “Your proposal was submitted”
Editing Proposals
While Pending
You CAN edit your proposal while status is pending.
Editable Fields:
cover_letter– Update your pitchproposed_price– Change your price (use carefully)proposed_days– Adjust timeline
Cannot Edit:
- Request ID
- Vendor ID (you)
- Submission date
Important: Previous documentation incorrectly stated proposals cannot be edited. The code allows editing via ProposalService->update() and REST API.
How to Edit
Via API:
PATCH /wp-json/wpss/v1/proposals/{proposal_id}
Permissions:
- Only vendor who submitted can edit
- Only while status is
pending - After acceptance/rejection: Cannot edit
Why Edit:
- Buyer asked for clarification
- You want to adjust price
- Found error in timeline
- Want to improve cover letter
After Acceptance
Once accepted:
- Cannot edit – Proposal is locked
- Order created with proposal terms
- Changes must go through order modifications
Proposal Acceptance
When Buyer Accepts
What Happens Immediately:
- Proposal Status →
accepted - Order Created with status
pending_payment - Other Proposals →
rejected - Request Status →
hired - You’re Notified via email + in-app
Order Details Auto-Populated:
- Subtotal: Your
proposed_price - Delivery deadline: Current date + your
proposed_days - Requirements: Copied from buyer request description
- Proposal details: Stored in order meta
Important: Previous documentation suggested a separate checkout step before order creation. The code creates the order IMMEDIATELY when proposal is accepted with pending_payment status (line 609-633 in BuyerRequestService).
After Acceptance
Buyer Actions:
- Review order details
- Complete payment
- Order status →
in_progress
Your Actions:
- Check order dashboard
- Wait for payment confirmation
- Begin work after payment
Timeline:
- Acceptance: Immediate
- Payment: Usually within 24 hours
- Start work: After payment confirmation
Withdrawing Proposals
When to Withdraw
Valid Reasons:
- You’re now too busy
- Project scope isn’t clear
- Budget is too low
- Found better opportunities
- Miscalculated timeline
How to Withdraw:
- Go to Dashboard → My Proposals
- Find the proposal
- Click Withdraw
- Optionally add reason
- Confirm withdrawal
What Happens:
- Status →
withdrawn - No longer visible to buyer
- You can submit a new proposal if request is still open
- Buyer notified
Note: Withdrawing doesn’t harm your reputation unless done excessively.
Proposal Best Practices
Writing Great Proposals
Do:
- Personalize each proposal (no copy-paste)
- Show you understand the project
- Provide relevant examples
- Be professional and friendly
- Proofread for errors
- Set competitive pricing
- Be realistic with timelines
Don’t:
- Send generic templates
- Undercut significantly just to win
- Promise unrealistic timelines
- Ignore project requirements
- Include irrelevant information
- Use aggressive sales tactics
Pricing Strategy
Competitive Pricing:
- Research similar projects
- Check buyer’s budget
- See competitor proposals (if possible)
- Price for quality, not just to win
Pricing Tiers:
- Budget-friendly: Within buyer’s minimum
- Mid-range: Middle of buyer’s range
- Premium: Top of buyer’s range (justify with value)
When to Quote High:
- Complex technical requirements
- Tight timeline
- Extensive revisions included
- Your expertise is rare
When to Quote Low:
- Simple, quick projects
- Building portfolio
- New to platform
- Want testimonials
After Proposal Submission
Tracking Status
Dashboard → My Proposals
View:
- All your submitted proposals
- Current status of each
- Buyer activity (viewed, accepted, etc.)
- Messages from buyer
Responding to Buyer Questions
If buyer messages you:
- Respond within 24 hours
- Answer questions clearly
- Provide additional details
- Stay professional
Good Response:
Hi [Buyer],
Thanks for your question about the email reminder feature.
I'll use WordPress cron jobs to send daily reminders for wishlist
items. Users can set their reminder preferences in their account
settings. Emails will be sent using wp_mail() with customizable
templates you can edit in the plugin settings.
Let me know if you need any other clarifications!
If Proposal is Rejected
Don’t take it personally.
Common Reasons:
- Buyer found better fit
- Budget constraints
- Timeline mismatch
- Chose vendor they’ve worked with before
What to Do:
- Move on to next request
- Learn from feedback (if provided)
- Improve future proposals
- Keep submitting
Proposal Limits
Quantity Limits
Per Request:
- ONE proposal per request per vendor
- Can withdraw and resubmit (if still open)
Active Proposals:
- No hard limit in code
- Keep it reasonable (10-20 active max)
- Focus on quality over quantity
Time Limits
Submission Window:
- No time limit while request is
open - Best to submit within 2-3 days of posting
- Early submissions get more attention
Edit Window:
- Edit anytime while
pending - After acceptance: Cannot edit
REST API Endpoints
Submit Proposal
POST /wp-json/wpss/v1/buyer-requests/{request_id}/proposals
Required:
{
"description": "Your cover letter",
"price": 450.00,
"delivery_days": 12
}
Optional:
{
"service_id": 789,
"attachments": [...]
}
Get Your Proposals
GET /wp-json/wpss/v1/proposals?status=pending
Update Proposal
PATCH /wp-json/wpss/v1/proposals/{proposal_id}
Allowed while pending:
{
"cover_letter": "Updated pitch",
"price": 475.00,
"delivery_days": 10
}
Withdraw Proposal
POST /wp-json/wpss/v1/proposals/{proposal_id}/withdraw
Related Documentation
- Posting Requests – How buyers create requests
- Managing Requests – Buyer perspective
- Order Workflow – After acceptance
- Vendor Dashboard – Managing proposals
Troubleshooting
Q: Why can’t I submit a proposal?
- Check if you already submitted one
- Verify request is still
open - Ensure you’re a verified vendor
- Request may have expired
Q: Can I submit multiple proposals to one request?
- No, only ONE proposal per request
- Edit your existing proposal if needed
- Or withdraw and resubmit new one
Q: Can I change my price after submitting?
- Yes, while status is
pending - Use the edit/update function
- Be careful – buyer may have already seen original price
Q: What if buyer doesn’t respond?
- Wait 5-7 days
- Buyer receives notifications
- Some buyers post and forget
- Move on to other requests if no response
Q: Why was my proposal rejected?
- Buyer chose another vendor
- Price/timeline didn’t fit
- Cover letter wasn’t convincing
- Buyer’s requirements changed
- Not always communicated
Q: Do I get notifications when proposal is viewed?
- No, this feature doesn’t exist in code
- You only get notified of acceptance/rejection
- Check dashboard for status changes
Q: Can I see other proposals on the request?
- No, proposals are private
- Only buyer sees all proposals
- You only see your own
Q: What happens if I don’t complete work after acceptance?
- Order cancellation
- Negative impact on reputation
- Buyer may dispute
- May affect seller level
- Don’t accept if you can’t deliver
