Vagibond
Vagibond

Follow Vagibond

Stay connected with us on social media for updates on new ventures.

Thanks for subscribing!
Visit Gruntslate Site

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.

🔊
1 Billion+ Grunts Translated
12% accuracy rate on Grunt-to-English. We consider this a major achievement.

What you can build

Live Demo

See what you can build with the Gruntslate API.

Gruntslate Demo

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

terminal
# 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

javascript
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

POST /v1/translate/to-grunt

Convert English text into authentic guttural expressions.

Request Body

json
{
  "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

json
{
  "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

POST /v1/translate/from-grunt

Decode grunts into English. Results may be offensive, vulgar, and absolutely hilarious.

Content Warning
Grunt-to-English translations often produce profane, offensive, or nonsensical results. Our AI does its best (12% accuracy). Use at your own risk.

Request Body

json
{
  "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

json
{
  "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

POST /v1/analyze/sentiment

Analyze the emotional content of a grunt without translating it.

Response

json
{
  "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

GET /v1/catalog/grunts

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.

🔒
Client-Side Available
GruntCode is bundled with Gruntslate Core and works entirely client-side. No API calls needed!

What you can build

Generating QR Codes

html
<!-- 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

javascript
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:

url
https://gruntslate.vagibond.com/decode?g=GRRAAARGH%20BLAAARGH

When scanned, the user is taken to the Gruntslate decoder page which:

Pricing

FREE
Grunt Curious
$0/month
  • 1,000 translations/day
  • 500 character limit
  • Basic sentiment detection
  • Standard response times
ENTERPRISE
Grunt Master
$299/month
  • Unlimited translations
  • Unlimited character length
  • Custom grunt templates
  • Dedicated support line (grunts only)
  • On-premise deployment

Changelog

v1.5.0 February 3, 2026 New
v1.4.0 January 15, 2026 New
v3.0.0 October 3, 2025 Breaking
v2.5.0 June 18, 2025 Fix