Acceptance Criteria Examples
Real acceptance criteria examples in Given-When-Then format across login, search, checkout, notifications, API integration, and file upload features. Each example includes happy path, edge case, and error handling criteria.
How to read these examples
Each example below starts with a user story, then lists 4 acceptance criteria in Given-When-Then format. The criteria cover the happy path (expected behavior), edge cases (boundary conditions), and error scenarios (what happens when things fail). This gives you a realistic view of what thorough acceptance criteria look like in practice.
Adapt these examples by replacing the feature-specific details with your product\'s behavior while keeping the Given-When-Then structure. The structure ensures every criterion specifies the precondition, action, and expected result — making them testable and unambiguous.
Acceptance criteria by feature type
Login and Authentication
As a returning user, I want to sign in with my email and password, so that I can access my account.
Given I am on the login page, when I enter a valid email and correct password and click "Sign In", then I am redirected to my dashboard within 2 seconds and see my display name in the header.
Given I enter a valid email with an incorrect password, when I click "Sign In", then I see "Invalid email or password" without revealing which field is wrong, and the password field clears.
Given I have failed to sign in 5 times in a row, when I attempt a 6th login, then I see "Too many attempts. Please try again in 15 minutes" and the form is disabled.
Given I check "Remember me" before signing in, when I close the browser and reopen it within 30 days, then I am automatically signed in without re-entering credentials.
Search and Filtering
As a team member, I want to search documents by content, so that I can find information without remembering exact titles.
Given I type "quarterly review" in the search bar, when I press Enter, then results appear within 2 seconds showing documents containing "quarterly review" in title or body, with matched terms highlighted.
Given my search returns more than 20 results, when I scroll to the bottom of the list, then the next page of results loads automatically (infinite scroll) with a loading indicator.
Given my search matches zero documents, when results load, then I see "No results for [query]" with suggestions: check spelling, try different keywords, or search all workspaces.
Given I have results displayed and apply a "Last 7 days" date filter, when the filter is applied, then only documents created or modified in the last 7 days are shown, and the result count updates.
E-commerce Checkout
As a customer, I want to complete a purchase with my saved payment method, so that I can check out quickly.
Given I have a saved credit card and items in my cart, when I click "Buy Now" on the checkout page, then my order is placed using the saved card, I see a confirmation page with the order number, and I receive a confirmation email within 1 minute.
Given my saved credit card has expired, when I attempt to check out, then I see "Your card ending in 4242 has expired. Please update your payment method." with a link to payment settings.
Given the payment gateway returns a decline, when the transaction fails, then I see "Payment declined. Please try a different payment method." and my cart items are preserved.
Given I am checking out and my session expires, when I click "Buy Now", then I am redirected to login with a message, and after signing in I am returned to checkout with my cart intact.
Notifications
As a project member, I want to receive notifications when someone comments on my task, so that I can respond promptly.
Given someone posts a comment on a task I own, when the comment is saved, then I see a notification badge on the bell icon within 5 seconds (if I am online) and the badge count increments by 1.
Given I have 3 unread notifications, when I click the bell icon, then a dropdown shows all 3 notifications sorted by most recent, each showing the commenter name, task title, and timestamp.
Given I click on a notification, when it opens, then I am taken to the comment on the task and the notification is marked as read (badge count decrements).
Given I have disabled comment notifications in my settings, when someone comments on my task, then I do not receive an in-app notification or email for that comment.
API and Integrations
As a developer, I want to create an API key with scoped permissions, so that I can integrate with the platform securely.
Given I am on the API settings page, when I click "Create API Key" and select "read-only" scope, then a new API key is generated and displayed once. After I close the dialog, only the last 4 characters are shown..
Given I make a GET request with a valid read-only API key, when the request is processed, then I receive a 200 response with the requested data in JSON format.
Given I make a POST request with a read-only API key, when the request is processed, then I receive a 403 response with {"error": "Insufficient permissions. This key has read-only access."}.
Given I revoke an API key on the settings page, when any request is made with the revoked key, then the request returns 401 with {"error": "Invalid or revoked API key"}.
File Upload
As a user, I want to upload files to a project, so that I can share documents with my team.
Given I am on the project page, when I drag a PDF file (under 25MB) onto the upload area, then the file uploads with a progress bar, and once complete, the file appears in the file list with its name, size, and upload date.
Given I drag a file larger than 25MB onto the upload area, when the upload is attempted, then I see "File exceeds the 25MB limit. Please use a smaller file or compress it." and the upload does not start.
Given I upload a file and the network connection drops mid-upload, when the connection is lost, then the progress bar stops, I see "Upload interrupted. Check your connection and try again." with a "Retry" button that resumes from the last checkpoint.
Given I upload a file with the same name as an existing file, when the upload completes, then I am asked "A file with this name already exists. Replace it or keep both?" with options for each.
Related templates
Acceptance Criteria Template
The Given-When-Then structure with quality checklist and categories.
View template →Acceptance Criteria Generator
A framework for generating criteria from any user story.
View template →User Story Examples
20+ user story examples across SaaS, e-commerce, and fintech.
View template →Frequently asked questions
Generate acceptance criteria with AI
Connect your tools and Vantage generates criteria grounded in your analytics, designs, and conversations. Free to start.
Free to start. No credit card required.