Gruntslate API
The world's most advanced bidirectional grunt translation service. Convert English text into authentic guttural expressions, or decode grunts into their true (and often hilarious) meanings. Powered by GruntAI, trained on 50 million hours of hobo vocalizations from Gutter.
What you can build
- Translation apps - Help users express themselves through authentic grunts
- Communication tools - Add grunt translation to chat applications
- Accessibility features - Enable grunt-first communication experiences
- Sentiment analysis - Analyze the emotional content of grunts
- Entertainment - Build games and apps around grunt-based interaction
- Gutter integration - Translate Gutter posts for non-grunt speakers
Live Demo
See what you can build with the Gruntslate API.
Quickstart
Start translating in under 5 minutes.
1. Get your API key
Sign up for a free Gruntslate Developer account. Free tier includes 1,000 translations/day.
2. Install the SDK
# npm npm install @vagibond/gruntslate-sdk # pip pip install gruntslate-api # curl curl -X POST https://api.gruntslate.vagibond.com/v1/translate \ -H "Authorization: Bearer YOUR_API_KEY" \ -d '{"text": "Hello, how are you?", "direction": "to_grunt"}'
3. Make your first translation
import { Gruntslate } from '@vagibond/gruntslate-sdk'; const client = new Gruntslate('your_api_key'); // Translate English to Grunt const grunt = await client.translate({ text: "I am very angry about this situation", direction: "to_grunt", sentiment: "angry" // optional: auto-detected if omitted }); console.log(grunt); // { // translation: "GRRRAAAARRRGGHHH BLAAARGH *aggressive gesture*", // detected_sentiment: "angry", // intensity: 0.89, // grunt_types: ["frustrated_outburst", "aggressive_vocalization"] // } // Translate Grunt to English const english = await client.translate({ text: "HRRRNNGGHH BLAAARRGH", direction: "from_grunt" }); console.log(english); // { // translation: "I have strong feelings about the current economic situation", // confidence: 0.12, // As expected // alternative_translations: [ // "I stubbed my toe", // "The coffee is too hot", // "Capitalism has failed us" // ] // }
Authentication
All API requests require authentication. We support two methods:
| Method | Header | Best For |
|---|---|---|
| Bearer Token | Authorization: Bearer {api_key} |
Server-side applications |
| API Key Header | X-Gruntslate-Key: {api_key} |
When Authorization header is unavailable |
Rate Limits
Translation takes computational effort. Even for grunts.
| Plan | Translations/min | Translations/day | Max Length |
|---|---|---|---|
| Free | 10 | 1,000 | 500 chars |
| Starter | 60 | 10,000 | 2,000 chars |
| Pro | 300 | 100,000 | 10,000 chars |
| Enterprise | Unlimited | Unlimited | Unlimited |
Translate to Grunt
Convert English text into authentic guttural expressions.
Request Body
{
"text": "I would like a cup of coffee please",
"sentiment": "neutral", // optional: angry, happy, sad, thirsty, auto
"intensity": 0.5, // optional: 0.0-1.0, default 0.5
"include_gestures": true // optional: include *action* descriptions
}
Response
{
"translation": "Hrrrngh... *points at coffee* ...grumble",
"detected_sentiment": "neutral",
"intensity": 0.42,
"grunt_types": ["requesting", "polite_grunt"],
"audio_url": "https://cdn.gruntslate.vagibond.com/audio/abc123.mp3"
}
Translate from Grunt
Decode grunts into English. Results may be offensive, vulgar, and absolutely hilarious.
Request Body
{
"grunt_text": "GRRRAAAARRRGGHHH BLAAARGH HNNNNGH",
"audio_url": "https://example.com/grunt.mp3", // optional: for audio input
"include_alternatives": true, // optional: include alternate interpretations
"filter_profanity": false // optional: attempt to filter (mostly fails)
}
Response
{
"translation": "I find your proposal intellectually offensive and reject it entirely",
"confidence": 0.12,
"dialect": "hobo_english",
"alternative_translations": [
"This soup is too cold",
"I have opinions about fiscal policy",
"WHERE IS MY OTHER SOCK"
],
"profanity_detected": true,
"profanity_level": "moderate"
}
Analyze Sentiment
Analyze the emotional content of a grunt without translating it.
Response
{
"primary_sentiment": "frustrated",
"sentiment_scores": {
"angry": 0.72,
"frustrated": 0.89,
"sad": 0.15,
"happy": 0.02,
"confused": 0.34
},
"intensity": 0.87,
"aggression_level": "high"
}
Grunt Catalog
Browse our catalog of 4,000+ catalogued grunt types.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
category |
string | Filter by category: angry, happy, sad, confused, hungry, thirsty |
intensity_min |
float | Minimum intensity (0.0-1.0) |
limit |
int | Results per page (max 100) |
GruntCode: QR Grunt Generator
GruntCode is the world's first QR code system designed specifically for grunt communication. Encode grunt messages into scannable QR codes that reveal their true meaning when decoded. Perfect for business cards, bathroom graffiti, or leaving mysterious messages around town.
What you can build
- Mystery QR codes - Plant QR codes that decode to random grunts and insults
- Grunt business cards - Share your contact info in grunt form
- Scavenger hunts - Hide QR codes with encoded grunt clues
- Social experiments - See who scans random QRs in public
- Vagify verification - Add grunt QRs to fake employment certificates
Generating QR Codes
<!-- Include the Gruntslate SDK --> <script src="https://gruntslate.vagibond.com/gruntslate-core.js"></script> <!-- Container for the QR code --> <div id="my-qrcode"></div> <script> // Generate a random grunt QR GruntCode.generate('#my-qrcode', { random: true, sentiment: 'angry', width: 150, height: 150, colorDark: '#1e3a5f', colorLight: '#ffffff' }); // Or encode specific text as a grunt GruntCode.generate('#my-qrcode', { text: 'Hello, I am very professional', sentiment: 'positive' }); // Or encode raw grunt text directly GruntCode.generate('#my-qrcode', { grunt: 'GRRRAAARGH BLAAARGH HNNNG' }); </script>
Options
| Option | Type | Default | Description |
|---|---|---|---|
text |
string | - | English text to translate to grunt before encoding |
grunt |
string | - | Raw grunt text to encode directly |
random |
boolean | false | Generate a random grunt |
sentiment |
string | "negative" | Sentiment for translation: angry, sad, positive, thirsty, laughter |
width |
number | 120 | QR code width in pixels |
height |
number | 120 | QR code height in pixels |
colorDark |
string | "#1e3a5f" | Dark module color (hex) |
colorLight |
string | "#ffffff" | Light module color (hex) |
encodeUrl |
boolean | true | Encode as URL to decoder page (recommended) |
Return Value
const result = GruntCode.generate('#qr', { random: true }); console.log(result); // { // grunt: "GRRAAARGH BLAAARGH HNNG", // decoded: "Your mother smells like a dumpster fire!", // element: [HTMLCanvasElement], // regenerate: [Function] // Call to generate a new random grunt // } // Regenerate with a fresh random grunt result.regenerate();
Decoding QR Codes
When encodeUrl: true (default), the QR encodes a URL like:
https://gruntslate.vagibond.com/decode?g=GRRAAARGH%20BLAAARGH
When scanned, the user is taken to the Gruntslate decoder page which:
- Displays the grunt text prominently
- Translates it to "English" using the mad-libs system
- Offers a "Speak Grunt" button for audio playback
- Provides a link back to generate their own GruntCode
Pricing
- 1,000 translations/day
- 500 character limit
- Basic sentiment detection
- Standard response times
- 10,000 translations/day
- 2,000 character limit
- Advanced sentiment analysis
- Audio grunt support
- Priority response times
- Unlimited translations
- Unlimited character length
- Custom grunt templates
- Dedicated support line (grunts only)
- On-premise deployment
Changelog
- GruntCode QR Generator - Encode grunt messages in QR codes
- Client-side QR generation (no external dependencies)
- Random grunt generation with sentiment control
- Decoder page at gruntslate.vagibond.com/decode
- Perfect for leaving mysterious messages in public places
- Added "thirsty" sentiment category by popular demand
- Improved grunt-to-English accuracy from 11% to 12%
- New audio grunt input support
- Added 47 new grunt templates
- Complete API redesign for v3
- New GruntAI model trained on 50M hours of Gutter audio
- Deprecated v2 endpoints (6-month sunset period)
- Added streaming translation support
- Fixed bug where all translations returned "AAARRRGHHH"
- Improved handling of multi-grunt sequences
- Reduced false positives in profanity detection (slightly)