Powerbottom API
AaaS - Attribution as a Service. Military-grade infrastructure for the text at the bottom of your page that nobody reads. 99.99999807% uptime SLA. Sub-millisecond label delivery via dark fiber. Font-size-based pricing. Your powered-by labels deserve the same engineering rigor as your database. Actually, more.
What you can build
- Branded attribution labels - Drop in a single script tag for professional powered-by labels with 47 font options
- Analytics dashboards - Track impressions, hovers, scroll-depth-to-label, and "did they actually see it" metrics
- A/B testing platforms - Test label copy, colors, and positions. Some customers report 0.02% engagement increases
- Recursive attribution - Power your powered-by label with a powered-by label. We support 847 levels of recursion
- Invisible tier - Pay $499/month to display nothing. Attribution without attribution. The ultimate enterprise solution
- Paris (Wisconsin). design - Our world-class design team ensures your labels are fashion-forward and compliance-ready
Live Demo
Below is Gary's demo showing CheatGPT's label configuration. Note the rebrand from "OpenBrand" after Sara convinced Kevin (our best designer) to leave Vagibond for Montgomery's startup. The version history tells the whole sad story.
Quickstart
Add Military-Grade Attribution to your site in under 5 minutes. Your footer deserves this.
1. Add the widget
Drop in the Powerbottom widget with a single script. No API key required for basic labels.
<!-- Add the label container --> <div id="powerbottom-label" data-company="YourCompany" data-link="https://yourcompany.com" data-show-meta="true" data-position="bottom-right" data-color="#3498db" data-size="small"> </div> <!-- Include the Powerbottom SDK --> <script src="https://powerbottom.vagibond.com/powerbottom-core.js" async></script>
2. Configure your label
Visit the Powerbottom Dashboard to customize your label, track analytics, and run A/B tests.
3. Monitor performance
Use the REST API to track impressions, clicks, and attribution ROI. Because someone is actually looking at your footer.
Authentication
The widget SDK works without authentication for basic labels. For analytics and advanced features:
| Prefix | Type | Permissions |
|---|---|---|
pb_live_ |
Production | Full access: create, update, delete labels, analytics |
pb_test_ |
Sandbox | Test labels with simulated impressions (no real traffic) |
curl https://api.powerbottom.vagibond.com/v1/labels \ -H "Authorization: Bearer pb_live_your_api_key"
Rate Limits
We rate limit API requests to ensure 99.99999807% uptime for everyone. Our infrastructure team monitors label latency 24/7 from a bunker in Paris (Wisconsin). (But honestly, how fast are you updating footer text?)
| Plan | Widget Loads/day | API Requests/min | Label Updates/day |
|---|---|---|---|
| Free | 10,000 | 60 | 10 |
| Startup | 100,000 | 300 | 100 |
| Growth | 1,000,000 | 1,000 | 1,000 |
| Enterprise | Unlimited | Unlimited | Unlimited |
Widget SDK
The Powerbottom Widget SDK provides a drop-in component that displays professional attribution labels with optional meta-labels (Powered by label is powered by Powerbottom).
Basic Embed
<!-- Minimal setup --> <div id="powerbottom-label" data-company="YourCompany"></div> <script src="https://powerbottom.vagibond.com/powerbottom-core.js"></script> <!-- Or use the data attribute selector --> <div data-powerbottom-widget data-company="YourCompany"></div>
Widget Configuration
Configure the widget using data attributes:
| Attribute | Type | Default | Description |
|---|---|---|---|
data-company |
string | null | Company name to display (required) |
data-link |
string | # | URL to link to |
data-show-meta |
boolean | true | Show "Powered by Powerbottom" meta-label |
data-position |
string | null | Position: bottom-right, bottom-left, bottom-center |
data-color |
string | #666666 | Text color (hex or CSS color name) |
data-size |
string | small | Size: tiny, small, medium |
data-style |
string | default | Reserved for future styles |
Positioning
Position labels anywhere on your page:
<!-- Fixed to bottom-right corner --> <div id="powerbottom-label" data-company="YourCompany" data-position="bottom-right"></div> <!-- Inline in footer --> <footer> <div id="powerbottom-label" data-company="YourCompany" data-show-meta="false"></div> </footer>
Theming
Match your brand colors:
<div id="powerbottom-label"
data-company="YourCompany"
data-color="#3498db"
data-size="medium"></div>
REST API: Get Labels
Retrieve all your labels. Filter by domain, active status, or search by company name.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
domain |
string | Filter by domain (e.g. "cheatgpt.com") |
active |
boolean | Only show active labels |
company |
string | Filter by company name |
limit |
number | Max results (default: 20, max: 100) |
Response
{
"labels": [
{
"id": "lbl_a7e3f9c1d2b4",
"company": "CheatGPT",
"link": "https://cheatgpt.com",
"domain": "cheatgpt.com",
"position": "bottom-right",
"color": "#666666",
"size": "small",
"show_meta": true,
"active": true,
"impressions": 847293,
"clicks": 4721,
"created_at": "2025-11-15T10:30:00Z"
}
],
"total": 47,
"has_more": false
}
REST API: Create Label
Create a new attribution label. Start tracking impressions immediately.
Request Body
{
"company": "CheatGPT",
"link": "https://cheatgpt.com",
"domain": "cheatgpt.com",
"position": "bottom-right",
"color": "#666666",
"size": "small",
"show_meta": true
}
Response
{
"id": "lbl_a7e3f9c1d2b4",
"company": "CheatGPT",
"link": "https://cheatgpt.com",
"active": true,
"created_at": "2026-02-08T15:47:00Z",
"embed_code": "<div id=\"powerbottom-label\" data-company=\"CheatGPT\"...>"
}
REST API: Update Label
Update an existing label. Changes propagate to the CDN within 60 seconds (99th percentile).
Request Body
{
"company": "CheatGPT (formerly OpenBrand)",
"color": "#e74c3c",
"size": "medium"
}
REST API: Delete Label
Delete a label. This is permanent. Your attribution will be gone, like Sara. Forever. Are you sure?
Response
{
"deleted": true,
"id": "lbl_a7e3f9c1d2b4"
}
REST API: Analytics
Get detailed analytics for a label. Impressions, clicks, CTR, geographic distribution, and more.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
start_date |
string | ISO 8601 date (default: 30 days ago) |
end_date |
string | ISO 8601 date (default: today) |
granularity |
string | hour, day, week, month |
Response
{
"label_id": "lbl_a7e3f9c1d2b4",
"period": {
"start": "2026-01-08T00:00:00Z",
"end": "2026-02-08T00:00:00Z"
},
"summary": {
"impressions": 847293,
"clicks": 4721,
"ctr": 0.0056,
"unique_visitors": 293847
},
"timeseries": [
{
"date": "2026-02-07",
"impressions": 28473,
"clicks": 147
}
],
"top_countries": [
{ "country": "US", "impressions": 421847 },
{ "country": "GB", "impressions": 93827 }
]
}
Real-Time Analytics
Track every impression and click on your attribution labels. Heat maps show where users actually look. (Spoiler: Not the footer. Our data shows 94% of users never scroll past the fold. But the 6% who do? They deserve Military-Grade Attribution.)
// Track custom events Powerbottom.track({ labelId: 'lbl_a7e3f9c1d2b4', event: 'hover', metadata: { duration: 2847, // milliseconds scrollDepth: '100%' } });
A/B Testing
Test different label copy, colors, and positions. Optimize for maximum brand exposure.
// Create A/B test const test = await powerbottom.createTest({ name: 'Brand name test', variants: [ { company: 'CheatGPT', weight: 0.5 }, { company: 'CheatGPT (formerly OpenBrand)', weight: 0.5 } ], goal: 'clicks' });
Version Control
Every label change is versioned. Roll back to any previous configuration. Because mistakes happen (ask Sara about that).
# Get label version history curl https://api.powerbottom.vagibond.com/v1/labels/lbl_a7e3f9c1d2b4/versions \ -H "Authorization: Bearer pb_live_your_api_key" # Rollback to specific version curl -X POST https://api.powerbottom.vagibond.com/v1/labels/lbl_a7e3f9c1d2b4/rollback \ -H "Authorization: Bearer pb_live_your_api_key" \ -d '{"version_id": "v_847a3b2c"}'
Webhooks
Get notified when labels are updated, when thresholds are reached, or when uptime drops below 99.99%.
| Event | Description |
|---|---|
label.created |
New label created. Your attribution journey begins. |
label.updated |
Label configuration changed (e.g., rebrand after your designer leaves for a competitor). |
label.deleted |
Label permanently deleted. No rollback. Like some relationships. |
analytics.threshold |
Impression or click threshold reached. Someone finally scrolled to the footer! |
recursion.overflow |
Label exceeded configured recursion depth. Legal team notified. |
uptime.alert |
Uptime dropped below 99.99999807%. Has never fired. We keep it for insurance purposes. |
SDKs & Libraries
# JavaScript/Node npm install @vagibond/powerbottom-sdk # Python pip install powerbottom-api # Ruby gem install powerbottom # Go go get github.com/vagibond/powerbottom-go # PHP composer require vagibond/powerbottom
Changelog
| Version | Date | Changes |
|---|---|---|
| 2.1.0 | 2026-02-01 | Added negative latency via CornKast dark fiber. Physicists concerned. VCs thrilled. |
| 2.0.0 | 2026-01-15 | Invisible tier: pay $499/mo to display 0px attribution. White-label inception. |
| 1.7.0 | 2025-11-01 | Increased recursive attribution depth from 100 to 847 levels per enterprise request. |
| 1.5.0 | 2025-09-01 | A/B testing for labels. Test "Powered by" vs "Built with" vs "Sponsored by". Groundbreaking. |
| 1.0.0 | 2024-06-01 | Initial release. The world wasn't ready but we launched anyway. |