# Getting Started with Rynko in 5 Minutes

---

This guide walks you through generating your first document with Rynko. By the end, you'll have a working PDF generated from a template via our API.

## Step 1: Create Your Account (30 seconds)

Head to [app.rynko.dev/signup](http://app.rynko.dev/signup) and create a free account. No credit card required.

Every new account comes with **5,000 free document credits** as part of our Founder's Preview — more than enough to build and test.

![Browse pre-built templates or create your own from scratch.](https://cdn.hashnode.com/res/hashnode/image/upload/v1770984914973/038483a1-042d-4048-8dca-60c415c5ac7e.png align="center")

## Step 2: Create a Template (2 minutes)

Once you're in the dashboard, click **New Template** to open the visual designer.

You have three options:

### Option A: Use a Pre-Built Template

Browse the template gallery and pick one that's close to what you need — invoices, reports, certificates, and more. Customize it in the designer.

### Option B: Design from Scratch

The drag-and-drop designer supports 28 component types. Drag in text, tables, images, charts, QR codes, and more. Set up variables using `{{variableName}}` syntax in any text field.

### Option C: Let AI Create It (MCP)

If you're using Claude Desktop or Cursor with our [MCP server](https://www.rynko.dev/mcp), just describe what you need:

```plaintext
"Create an invoice template with company logo, customer details,
a line items table, and totals with tax calculation"
```

For this guide, let's create a simple invoice. Add these variables to your template:

| Variable | Type | Description |
| --- | --- | --- |
| `invoiceNumber` | string | Invoice identifier (e.g., "INV-2026-001") |
| `clientName` | string | Customer name |
| `clientEmail` | string | Customer email |
| `lineItems` | array | Line items with `description`, `quantity`, `price` |
| `subtotal` | number | Subtotal amount |
| `tax` | number | Tax amount |
| `total` | number | Total amount |

Click **Publish** when you're happy with the design.

> **Tip:** Use the **Preview** button to test your template before publishing. Previews are free and don't consume credits.

![The visual template designer with a working invoice template — variables, tables, calculated fields, and live preview.](https://cdn.hashnode.com/res/hashnode/image/upload/v1770984971551/27f02adf-432c-4cb3-a78b-5493910ed1d9.png align="center")

## Step 3: Get Your API Key (30 seconds)

Go to **Settings** &gt; **API Keys** and create a new key. Copy it — you'll need it in the next step.

Your API key starts with your team ID and gives programmatic access to your templates and document generation.

## Step 4: Generate a Document (2 minutes)

Pick your language:

You can also test document generation without code using the **API Playground** in your dashboard — paste in variables and generate a document directly from the browser.

### Node.js

```bash
npm install @rynko/sdk
```

```typescript
import { Rynko } from '@rynko/sdk';

const rynko = new Rynko({
  apiKey: process.env.RYNKO_API_KEY!,
});

// Generate a PDF
const job = await rynko.documents.generatePdf({
  templateId: 'invoice', // Your template slug, shortId, or UUID
  variables: {
    invoiceNumber: 'INV-2026-001',
    clientName: 'Acme Technologies Pvt. Ltd.',
    clientEmail: 'accounts@acmetech.com',
    lineItems: [
      { description: 'Technical Consulting', quantity: 2, price: 150.00 },
      { description: 'Software License', quantity: 1, price: 500.00 },
    ],
    subtotal: 800.00,
    tax: 80.00,
    total: 880.00,
  },
});

console.log('Job queued:', job.jobId);

// Wait for completion
const completed = await rynko.documents.waitForCompletion(job.jobId);
console.log('Download URL:', completed.downloadUrl);
```

### Python

```bash
pip install rynko
```

```python
import os
from rynko import Rynko

client = Rynko(api_key=os.environ["RYNKO_API_KEY"])

# Generate a PDF
job = client.documents.generate_pdf(
    template_id="invoice",
    variables={
        "invoiceNumber": "INV-2026-001",
        "clientName": "Acme Technologies Pvt. Ltd.",
        "clientEmail": "accounts@acmetech.com",
        "lineItems": [
            {"description": "Technical Consulting", "quantity": 2, "price": 150.00},
            {"description": "Software License", "quantity": 1, "price": 500.00},
        ],
        "subtotal": 800.00,
        "tax": 80.00,
        "total": 880.00,
    },
)

print(f"Job queued: {job['jobId']}")

# Wait for completion
completed = client.documents.wait_for_completion(job["jobId"])
print(f"Download URL: {completed['downloadUrl']}")
```

### cURL

```bash
# Generate a document
curl -X POST https://api.rynko.dev/api/v1/documents/generate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "templateId": "invoice",
    "format": "pdf",
    "variables": {
      "invoiceNumber": "INV-2026-001",
      "clientName": "Acme Technologies Pvt. Ltd.",
      "clientEmail": "accounts@acmetech.com",
      "lineItems": [
        {"description": "Technical Consulting", "quantity": 2, "price": 150.00},
        {"description": "Software License", "quantity": 1, "price": 500.00}
      ],
      "subtotal": 800.00,
      "tax": 80.00,
      "total": 880.00
    }
  }'

# Response includes a jobId - poll for completion
curl https://api.rynko.dev/api/v1/documents/jobs/JOB_ID \
  -H "Authorization: Bearer YOUR_API_KEY"
```

Run the code. In under a second, you'll get a signed download URL for your PDF. Click it — there's your document.

![The generated PDF invoice — professional layout with line items, calculated totals, and branding.](https://cdn.hashnode.com/res/hashnode/image/upload/v1770985024497/c09c4658-64f2-4921-a87f-69d60c23a8db.png align="center")

## Want Excel Instead?

Same template, different format:

```typescript
// Node.js
const job = await rynko.documents.generateExcel({
  templateId: 'invoice',
  variables: { /* same variables */ },
});
```

```python
# Python
job = client.documents.generate_excel(
    template_id="invoice",
    variables={ ... },
)
```

That's it. One template, both formats.

## Step 5: Set Up Webhooks (Optional)

Instead of polling for completion, you can receive a webhook when your document is ready:

1. Go to **Settings** &gt; **Webhooks** in the dashboard
    
2. Add your endpoint URL
    
3. Select the `document.generated` event
    

When a document finishes generating, we'll POST to your endpoint with the download URL:

```typescript
import { verifyWebhookSignature } from '@rynko/sdk';

app.post('/webhooks/rynko', (req, res) => {
  const event = verifyWebhookSignature({
    payload: req.body.toString(),
    signature: req.headers['x-rynko-signature'],
    secret: process.env.WEBHOOK_SECRET,
  });

  if (event.type === 'document.generated') {
    console.log('Document ready:', event.data.downloadUrl);
  }

  res.status(200).json({ received: true });
});
```

## What's Next?

Now that you've generated your first document, here's what to explore:

* [**Visual Designer**](https://app.rynko.dev) — Design templates with drag-and-drop, live preview, and 28 component types
    
* [**MCP Server**](https://www.rynko.dev/mcp) — Let Claude or Cursor create and generate documents for you
    
* [**API Reference**](https://docs.rynko.dev/api) — Full API documentation with interactive examples
    
* [**Template Schema**](https://docs.rynko.dev/developer-guide/template-schema) — Deep dive into template structure and capabilities
    
* [**Integrations**](https://www.rynko.dev/integrations) — Connect with Zapier, [Make.com](http://Make.com), n8n, and Google Sheets
    

## Need Help?

* [**Documentation**](https://docs.rynko.dev) — Guides, tutorials, and API reference
    
* [**Discord**](https://discord.gg/d8cU2MG6) — Chat with the team and community
    
* [**support@rynko.dev**](mailto:support@rynko.dev) — Email support
    

Happy generating!

*<sub>Disclosure: I ideate and draft content, then refine it with the aid of artificial intelligence tools like Claude and revise it to reflect my intended message.</sub>*
