CI/CD Integration Guide
Add human QA testing to your deployment pipeline. Every time you deploy, TestMyVibes sends real humans to test your app and reports back with findings.
Easiest Way: Just Ask Your AI Agent
Building on Replit, Cursor, Windsurf, or Lovable? Skip this entire page. Paste this prompt to your AI agent:
Your agent will read our API docs, ask for your API key, store it safely as a secret, and wire up the integration. Zero code from you.
On Replit: if your Agent is in Plan mode it can't edit files β switch it to Build mode (toggle at the top of the chat) so it can actually wire up the integration.
How It Works
You deploy your app
Push code, hit publish, merge a PR β however you ship.
A test is submitted automatically
Your CI calls our API (or a deploy hook fires) to submit a human QA test against your live URL.
A real person tests your app
A vetted QA checker goes through your app, records their screen, fills out the checklist, and files bugs.
You get results
Results arrive via webhook, or you poll the API. You get a score, bug reports with screenshots/video, and a detailed checklist.
Quick Start: API Key Method
The fastest way to integrate. Works with any CI system, any language, any platform.
Get your API key
Go to Dashboard β API Keys and generate a key. It starts with tmv_.
Submit a test
After your deploy step, make a POST request:
curl -X POST https://testmyvibes.com/v1/jobs \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://your-app.com",
"title": "Post-deploy QA check",
"jobType": "General QA"
}'
Get results
Either set up a webhook to receive results automatically, or poll:
curl https://testmyvibes.com/v1/jobs/JOB_ID \
-H "Authorization: Bearer YOUR_API_KEY"
Quick Start: Deploy Hook Method
Even simpler β no API key needed in your CI. Just hit a URL.
Create a project
Go to Dashboard β Projects, create a project with your app's URL and preferred test type.
Copy the deploy hook URL
Each project gets a unique deploy hook URL shown on the project card. It looks like:https://testmyvibes.com/hooks/deploy/YOUR_TOKEN
Call it after deploys
Add a POST request to your deploy script. The hook auto-submits a test using your project's settings.
curl -X POST https://testmyvibes.com/hooks/deploy/YOUR_TOKEN
Learn more in the Deploy Hooks guide.
Replit
π§ Using Replit Deployments
After you publish your Replit app, trigger a test from a separate Replit project or use the deploy hook approach.
Option A: Deploy Hook (Simplest)
Add this to your Replit project's .replit run command or a post-deploy script:
curl -X POST https://testmyvibes.com/hooks/deploy/YOUR_TOKEN
Option B: API Script
Create a script in your Replit project that runs after deploy:
// test-after-deploy.js
const TMV_KEY = process.env.TMV_API_KEY;
const APP_URL = process.env.REPLIT_DEV_DOMAIN
? `https://${process.env.REPLIT_DEV_DOMAIN}`
: "https://your-app.replit.app";
async function submitTest() {
const res = await fetch("https://testmyvibes.com/v1/jobs", {
method: "POST",
headers: {
"Authorization": `Bearer ${TMV_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
url: APP_URL,
title: "Post-deploy QA",
jobType: "General QA",
}),
});
const data = await res.json();
console.log("Test submitted:", data.id || data);
}
submitTest();
Option C: Poll for Results
After submitting, you can poll until the test completes:
// poll-results.js
const TMV_KEY = process.env.TMV_API_KEY;
async function pollJob(jobId) {
while (true) {
const res = await fetch(`https://testmyvibes.com/v1/jobs/${jobId}`, {
headers: { "Authorization": `Bearer ${TMV_KEY}` },
});
const job = await res.json();
console.log(`Status: ${job.status}`);
if (job.status === "completed") {
console.log("Score:", job.report?.overallScore);
console.log("Issues:", job.report?.criticalIssues?.length || 0);
return job;
}
if (job.status === "cancelled") {
console.log("Test was cancelled");
return job;
}
// Wait 30 seconds before checking again
await new Promise(r => setTimeout(r, 30000));
}
}
// Usage: node poll-results.js JOB_ID
pollJob(process.argv[2]);
Vercel
β² Vercel Deploy Hooks
Vercel can call a webhook after each deployment. Use our deploy hook URL as a Vercel integration webhook, or add a post-deploy script.
Option A: Vercel Webhook (Dashboard)
In your Vercel project settings, go to Settings β Integrations or use a custom webhook. Point it at your deploy hook URL.
Option B: package.json Script
{
"scripts": {
"postdeploy": "curl -X POST https://testmyvibes.com/hooks/deploy/YOUR_TOKEN"
}
}
Option C: API Route (In-App)
Add an API route in your Next.js app that submits a test on demand:
// app/api/run-qa/route.ts
export async function POST() {
const res = await fetch("https://testmyvibes.com/v1/jobs", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.TMV_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
url: process.env.VERCEL_URL
? `https://${process.env.VERCEL_URL}`
: "https://your-app.vercel.app",
title: "Vercel deploy QA",
jobType: "General QA",
}),
});
return Response.json(await res.json());
}
Netlify
β Netlify Deploy Notifications
Netlify has built-in deploy notifications. Go to Site settings β Deploy notifications β Outgoing webhook and add your deploy hook URL.
Event: Deploy succeeded
URL: https://testmyvibes.com/hooks/deploy/YOUR_TOKEN
Or use a Netlify plugin / build command:
# netlify.toml
[build]
command = "npm run build"
[build.lifecycle]
onSuccess = "curl -X POST https://testmyvibes.com/hooks/deploy/YOUR_TOKEN"
GitHub Actions
π Run Human QA After Deploy
Add this step to your GitHub Actions workflow after your deploy step:
# .github/workflows/deploy.yml
name: Deploy & Test
on:
push:
branches: [main]
jobs:
deploy-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# ... your deploy steps here ...
- name: Submit QA Test
env:
TMV_API_KEY: ${{ secrets.TMV_API_KEY }}
run: |
RESPONSE=$(curl -s -X POST https://testmyvibes.com/v1/jobs \
-H "Authorization: Bearer $TMV_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://your-app.com",
"title": "Deploy ${{ github.sha }}",
"jobType": "General QA"
}')
echo "Test submitted: $RESPONSE"
JOB_ID=$(echo $RESPONSE | jq -r '.id')
echo "job_id=$JOB_ID" >> $GITHUB_OUTPUT
TMV_API_KEY as a repository secret in GitHub Settings β Secrets and variables β Actions.
Or use the simple deploy hook:
- name: Trigger QA Test
run: curl -s -X POST https://testmyvibes.com/hooks/deploy/YOUR_TOKEN
Railway
π Railway Post-Deploy
Railway doesn't have built-in deploy webhooks, but you can trigger a test after each deploy using the CLI or a post-deploy script.
# After railway up, trigger a QA test:
railway up && \
curl -X POST https://testmyvibes.com/v1/jobs \
-H "Authorization: Bearer $TMV_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://your-app.up.railway.app",
"title": "Railway deploy QA",
"jobType": "General QA"
}'
Or use the zero-config deploy hook:
curl -X POST https://testmyvibes.com/hooks/deploy/YOUR_TOKEN
Render
π· Render Deploy Hooks
Render supports deploy notifications. Add a webhook in your Render dashboard to trigger a TestMyVibes test on every deploy.
# In Render: Settings β Notifications β Deploy Notifications
# Add a webhook with your deploy hook URL:
https://testmyvibes.com/hooks/deploy/YOUR_TOKEN
Or trigger via API after deploying:
curl -X POST https://testmyvibes.com/v1/jobs \
-H "Authorization: Bearer $TMV_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://your-app.onrender.com",
"title": "Render deploy QA",
"jobType": "General QA"
}'
Fly.io
πͺ Fly.io Post-Deploy
Chain a TestMyVibes test right after fly deploy completes:
fly deploy && \
curl -X POST https://testmyvibes.com/v1/jobs \
-H "Authorization: Bearer $TMV_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://your-app.fly.dev",
"title": "Fly.io deploy QA",
"jobType": "General QA"
}'
Or the zero-config deploy hook:
curl -X POST https://testmyvibes.com/hooks/deploy/YOUR_TOKEN
Lovable
π Lovable Post-Deploy
After deploying your Lovable app, trigger a TestMyVibes human QA test to verify everything the AI built actually works for real users.
Option A: API Call
curl -X POST https://testmyvibes.com/v1/jobs \
-H "Authorization: Bearer $TMV_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://your-app.lovable.app",
"title": "Lovable App QA",
"jobType": "General QA"
}'
Option B: Deploy Hook
curl -X POST https://testmyvibes.com/hooks/deploy/YOUR_TOKEN
First Impression test on your Lovable app to see how real users experience the AI-generated interface.
Docker / Custom CI
π³ Any CI Pipeline
Works with Jenkins, CircleCI, GitLab CI, Bitbucket Pipelines, or any system that can run a curl command.
After your deploy step:
curl -X POST https://testmyvibes.com/v1/jobs \
-H "Authorization: Bearer $TMV_API_KEY" \
-H "Content-Type: application/json" \
-d "{
\"url\": \"$DEPLOY_URL\",
\"title\": \"Build #$BUILD_NUMBER QA\",
\"jobType\": \"General QA\"
}"
Or the zero-config deploy hook:
curl -X POST https://testmyvibes.com/hooks/deploy/YOUR_TOKEN
Available Job Types
| Job Type | Credits | Best For |
|---|---|---|
First Impression | 2 | Quick smoke test, first-time user perspective |
General QA | 3β5 | Thorough bug hunting, feature testing |
Payment Flow | 4β6 | Checkout, billing, subscription flows |
Custom | 2β6 | Your own checklist, specific scenarios |
AI Review | 1/personality | AI-powered review (no human checker) |