Integrate automated QA testing into your CI/CD pipeline.
Include your API key in every request using either the Authorization header or the x-api-key header.
Authorization: Bearer nb_live_your_key_here
# or
x-api-key: nb_live_your_key_hereGenerate API keys in Settings → API Keys. Requires Pro Max plan.
Start a new QA audit. Returns immediately with a pending status. Poll the result endpoint to get the completed audit.
{
"url": "https://example.com",
"categories": ["seo", "speed", "accessibility"],
"callback_url": "https://your-server.com/webhook"
}{
"audit_id": "550e8400-e29b-41d4-a716-446655440000",
"status": "pending",
"estimated_time": "30-60 seconds"
}Poll for audit results. Returns the current status and findings when complete.
{
"audit_id": "550e8400-...",
"status": "complete",
"score": 85,
"grade": "A",
"findings_count": 7,
"findings": [
{
"category": "seo",
"severity": "high",
"message": "Missing meta description",
"suggestion": "Add meta description (150-160 chars)"
}
],
"url": "https://nexusbro.com/share/qa/abc123"
}# Start audit
curl -X POST https://nexusbro.com/api/v1/audit \
-H "Authorization: Bearer nb_live_your_key" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com"}'
# Poll result
curl https://nexusbro.com/api/v1/audit/AUDIT_ID \
-H "Authorization: Bearer nb_live_your_key"const res = await fetch('https://nexusbro.com/api/v1/audit', {
method: 'POST',
headers: {
'Authorization': 'Bearer nb_live_your_key',
'Content-Type': 'application/json',
},
body: JSON.stringify({ url: 'https://example.com' }),
});
const { audit_id } = await res.json();
// Poll until complete
let result;
do {
await new Promise(r => setTimeout(r, 5000));
const poll = await fetch(
`https://nexusbro.com/api/v1/audit/${audit_id}`,
{ headers: { 'Authorization': 'Bearer nb_live_your_key' } }
);
result = await poll.json();
} while (result.status === 'pending');
console.log('Score:', result.score, 'Grade:', result.grade);name: QA Audit
on: [push]
jobs:
qa:
runs-on: ubuntu-latest
steps:
- name: Run NexusBro QA
run: |
AUDIT=$(curl -s -X POST https://nexusbro.com/api/v1/audit \
-H "Authorization: Bearer ${{ secrets.NEXUSBRO_API_KEY }}" \
-H "Content-Type: application/json" \
-d '{"url": "https://your-staging-site.com"}')
AUDIT_ID=$(echo $AUDIT | jq -r .audit_id)
for i in {1..12}; do
sleep 10
RESULT=$(curl -s https://nexusbro.com/api/v1/audit/$AUDIT_ID \
-H "Authorization: Bearer ${{ secrets.NEXUSBRO_API_KEY }}")
STATUS=$(echo $RESULT | jq -r .status)
if [ "$STATUS" = "complete" ]; then
SCORE=$(echo $RESULT | jq -r .score)
echo "QA Score: $SCORE/100"
if [ "$SCORE" -lt 50 ]; then
echo "::error::QA score below threshold: $SCORE"
exit 1
fi
exit 0
fi
done
echo "::error::Audit timed out"
exit 1Never deploy broken code again. QA gate your deployments with automatic score checks.
name: NexusBro QA Gate
on:
pull_request:
branches: [main]
jobs:
qa-audit:
runs-on: ubuntu-latest
steps:
- name: Run QA Audit
id: audit
run: |
AUDIT=$(curl -s -X POST https://nexusbro.com/api/v1/audit \
-H "Authorization: Bearer ${{ secrets.NEXUSBRO_API_KEY }}" \
-H "Content-Type: application/json" \
-d '{"url": "${{ vars.STAGING_URL }}"}')
echo "audit_id=$(echo $AUDIT | jq -r .audit_id)" >> $GITHUB_OUTPUT
- name: Wait for Results
id: result
run: |
for i in {1..24}; do
sleep 5
RESULT=$(curl -s https://nexusbro.com/api/v1/audit/${{ steps.audit.outputs.audit_id }} \
-H "Authorization: Bearer ${{ secrets.NEXUSBRO_API_KEY }}")
STATUS=$(echo $RESULT | jq -r .status)
if [ "$STATUS" = "complete" ]; then
echo "score=$(echo $RESULT | jq -r .score)" >> $GITHUB_OUTPUT
echo "grade=$(echo $RESULT | jq -r .grade)" >> $GITHUB_OUTPUT
echo "findings=$(echo $RESULT | jq -r .findings_count)" >> $GITHUB_OUTPUT
exit 0
fi
done
echo "::error::Audit timed out"
exit 1
- name: Comment on PR
uses: actions/github-script@v7
with:
script: |
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: '## NexusBro QA Report\n' +
'Score: **${{ steps.result.outputs.score }}/100** (Grade: ${{ steps.result.outputs.grade }})\n' +
'Issues found: ${{ steps.result.outputs.findings }}\n\n' +
'[View full report](https://nexusbro.com/share/qa/${{ steps.audit.outputs.audit_id }})'
})
- name: Fail if score too low
if: steps.result.outputs.score < 50
run: |
echo "::error::QA score ${{ steps.result.outputs.score }} is below threshold (50)"
exit 1Show the world your code quality. Add your QA score badge to any GitHub repo.
Markdown
[](https://nexusbro.com/scores/YOUR-DOMAIN)HTML
<a href="https://nexusbro.com/scores/YOUR-DOMAIN">
<img src="https://nexusbro.com/api/badge/YOUR-DOMAIN" alt="NexusBro QA Score" />
</a>Includes unlimited audits, weekly monitoring, and CI/CD integration.