Frequently Asked Questions (FAQ)
Would you like to request a feature or have you found an issue that should be fixed? We'd love to hear from you. Use our contact form.
Conversions
What file formats are supported?
Input:
.md(Markdown files)- Git repository URLs (Github, Gitlab, Bitbucket)
Output:
What markdown features are supported?
We support common Markdown syntax elements, including tables, task lists, and syntax-highlighted code blocks — ensuring accurate Markdown-to-PDF conversion.
What's the maximum file size?
Web UI:
- 50 MB per file upload
API (Premium):
- 50 MB upload limit
- 2 GB PDF output limit
How is the PDF title chosen if I leave the Title field blank?
The Convert to PDF Title field controls the cover-page title and the downloaded PDF filename. If you fill it in, that wins. If you leave it blank, gitmd2pdf falls back through this order:
Markdown uploads:
- The first level‑1 heading (
# Heading) in the file (headings inside fenced code blocks are ignored). - The uploaded filename.
Repository conversions:
- The top-level
title:field in your repository's.gitmd2pdf.ymlconfig, if present (Premium feature). - The repository name parsed from the URL (e.g.
https://github.com/user/my-repo.git→my-repo).
In both cases the UI usually pre-fills the Title automatically (from your first # heading for Markdown, or from the repo URL for repositories — the pre-fill does NOT read .gitmd2pdf.yml because the yml lives inside the repo and isn't fetched until conversion runs). You can always edit or clear the field before converting; whatever you leave in it wins over every fallback.
Why does my PDF look different than how my markdown is displayed in .......?
Our PDF renderer may display Markdown differently than other application. Differences can include:
- Font choices
- Table styling
- Code block formatting (we add invisible wrap points after
/,\, and,inside code blocks/spans to prevent long URLs/JSON from overflowing the page)
For the most accurate results, use standard Markdown syntax.
Can I convert private repositories?
Yes. You can convert private repositories by providing your Git repository URL along with secure authentication (username and access token) to enable access. See How do I convert a private Git repository? below for the step-by-step flow.
How do I convert a private Git repository? {#private-repos}
Use a Personal Access Token (or whatever your git host calls it — GitHub and Azure DevOps call it a PAT; GitLab calls it a Project Access Token or Deploy Token; Bitbucket calls it a Repository Access Token or App Password). Don't use your account password — most hosts have deprecated password authentication for git over HTTPS, and a scoped PAT is much safer to revoke after the conversion.
Recommended: paste your URL with the username only — the dashboard will prompt for the token
In the Dashboard's Repository tab, paste a URL of the form:
https://YOUR-USERNAME@github.com/your-org/your-repo.git
The form recognises that the host needs authentication and reveals a Personal Access Token field below the URL. Type the token there. Your browser history, server access logs, and any shared error reports won't see the token — the dedicated field is a password input that doesn't autofill or sync.
Alternative: embed the token directly in the URL
You can put the token (or your password, if your host still allows password auth) directly in the URL:
https://YOUR-USERNAME:YOUR-TOKEN@github.com/your-org/your-repo.git
This works but is less safe — the URL itself can leak through browser history, bookmarks, referrer headers, and shared error reports. Use this path when automation already builds URLs of this shape; for interactive use, prefer the username-only URL + dedicated PAT field above.
Security notes
- We do not store your credentials. Tokens are used only during the single conversion and are never saved server-side.
- Tokens are redacted from the source URL printed on the title page of the converted PDF and from any operational logs.
- Use short-lived, scoped, read-only tokens. Set an expiry of 1 day for a one-off conversion and revoke when done — that's the whole point of using PATs rather than passwords.
- Rotate the token immediately if you suspect it's been exposed (a URL embedding it ended up in chat / a bookmark / an error report someone else can see).
See Git Security for the full provider-specific table (GitHub / GitLab / Bitbucket / Azure DevOps / self-hosted), the API equivalent (repoCredentials body field), and what gitmd2pdf does on your behalf.
My conversion failed with "We hit a problem creating your PDF"
Common causes:
- Invalid Markdown syntax: Check your Markdown file for errors
- Repository not found: Verify the Git URL is public and accessible
- Network timeout: Try again in a few minutes
- File too large: Reduce file size or split into smaller conversions
Check conversion_logs in the database for detailed error messages, or contact support with your error details.
Acrobat warns about missing fonts (or fonts look wrong)
This is usually caused by system fonts not being available or not being embedded by the PDF renderer on your platform.
- If you are self-hosting, install system dependencies and common fonts on the converter host.
- If the warning persists, retry the conversion and contact support with the job ID or the source file/repo you converted.
API and Callbacks (Premium Only)
How do I access the API?
Premium users see an API Keys and Callback Credentials section on the Convert to PDF page:
- Click "Create New Credential"
- Enter a name and choose type (HMAC or OAuth)
- Copy your secret (shown only once!)
- Use your client ID and secret for API authentication
What's the difference between HMAC and OAuth authentication?
HMAC-SHA256:
- Sign each request with your secret
- No token expiry (until credential is revoked)
- 5-minute replay protection
- Best for server-to-server calls
OAuth Client-Credentials:
- Exchange credentials for a 1-hour bearer token
- Use token for subsequent requests
- Tokens auto-expire after 1 hour
- Best for applications that make many requests
What are the API rate limits?
- Default: 10 requests per 60 seconds per API credential
- Configurable by administrators via environment variables
- Separate from web UI rate limits
How do I convert files via API?
Premium API conversions use the same Premium defaults as the Convert to PDF page, including:
- Footers enabled by default (Filename / Confidential / Page Number)
- Alternating left/right footer fields on even pages
Step 1 - Enqueue job:
curl -X POST https://yourapp.com/api/v1/convert \
-H "Authorization: Bearer YOUR_TOKEN" \
-F "type=file" \
-F "file=@data/document.md"
Returns: { jobId: "uuid" }
Step 2 - Poll for completion:
curl https://yourapp.com/api/v1/jobs/JOB_ID/status \
-H "Authorization: Bearer YOUR_TOKEN"
Returns: { status: "completed", downloadUrl: "..." }
Step 3 - Download PDF:
curl https://yourapp.com/api/v1/jobs/JOB_ID/download \
-H "Authorization: Bearer YOUR_TOKEN" \
-o output.pdf
How do I convert a Git repository via API?
Use type=repo with a JSON body (OAuth or HMAC):
curl -X POST https://yourapp.com/api/v1/convert \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"type":"repo","repoUrl":"https://github.com/iampjeetsingh/nodejs-best-practices","branch":"main"}'
Then poll and download using the same job endpoints shown above.
How do I enable callbacks (webhook delivery)?
Callbacks require an allowlisted domain (exact hostname match). Add at least one domain here:
- Convert to PDF → API Keys and Callback Credentials → Callback domains → Add
example.com
Then include a callback URL in your conversion request (HTTPS only):
curl -X POST https://yourapp.com/api/v1/convert \
-H "Authorization: Bearer YOUR_TOKEN" \
-F "type=file" \
-F "file=@data/document.md" \
-F "callbackUrl=https://example.com/webhook"
I upgraded to Premium but don't see the API Keys and Callback Credentials section
Refresh your browser - The UI updates when you reload the page. If you still don't see it:
- Log out and log back in
- Check your account page shows "PREMIUM_MONTHLY" or "PREMIUM_YEARLY"
- If it shows "PRO_MONTHLY" instead, contact support
Subscriptions and Pricing
What plans are available?
We offer three plan levels:
- Free Trial - No subscription required, sample the service for 14 days
- 14-day trial window
- 6 Markdown file conversions per calendar month
- 3 Git repository conversions per calendar month
- No API access
- Pro
- Up to 300 Markdown to PDF conversions per calendar month
- Up to 50 Git repository to PDF conversions per calendar month
- No API access
- Premium
- Everything in Pro, plus:
- Unlimited Markdown and Git repository conversions by default (your account can be capped if usage triggers fair-use review)
- Public REST API for programmatic conversions
- HMAC and OAuth 2.0 authentication
- API credential management
- Current limits are subject to a periodic fair-use review; limits may change — see Terms of Service
How does the free trial work?
- Duration: 14 days
- No credit card required: Sign up and verify your email to start
- Choosing a plan during trial: You can select Pro or Premium at any time. If you add a payment method, your trial continues to the original end date and billing starts after the trial ends.
- What happens after: If you don't add payment details before the Free Trial ends, conversions are blocked until you upgrade
- Can I upgrade during trial?: Yes! You can switch between Pro and Premium during trial without ending it.
Can I change plans anytime?
Yes. The Convert to PDF and Account pages always show upgrade options for Pro and Premium so you can upgrade or downgrade at any time.
- If you choose the same plan you already have, nothing happens.
- You can downgrade from Premium Yearly to Pro Monthly.
- Trial users can switch plans freely; the trial end date does not change.
- Paid plan downgrades create a positive balance (credit). No refunds are issued; the next charge happens after the balance is used up.
- Paid plan upgrades are billed as a prorated amount for the remaining period (for example, Monthly Pro → Premium Annual).
What does my account page show during trial?
When you're on a free trial, your account page displays:
- Plan: "FREE TRIAL" (not "PRO_MONTHLY")
- Trial ends: Shows your trial expiration date
- Upgrade options: Both Pro and Premium upgrade buttons visible
This is user-friendly - the system technically uses a Pro subscription with trial status, but we show "FREE TRIAL" to avoid confusion.
Can I upgrade directly to Premium from a free trial?
Yes! You don't need to upgrade to Pro first. During your trial, you'll see both upgrade options:
- "Upgrade to Pro"
- "Upgrade to Premium"
Choose the plan that fits your needs. When you upgrade:
- Your trial continues to the original end date
- If you add a payment method, billing starts after the trial ends
- If you chose Premium, you have access to all of the premium features, such as the API Keys and Callback Credentials section appears on your Convert to PDF page
What happens when I upgrade from trial?
After selecting a plan during trial:
- Your plan selection updates to Pro or Premium, but your trial continues until the end date
- Billing starts after the trial ends
- Your account continues to show "FREE TRIAL" until the trial ends
- You can manage your subscription via the "Manage My Subscription" button
- For Premium: API Keys and Callback Credentials section becomes available for creating API credentials and managing callback domains
If you do not already have a payment method on file, Stripe will prompt you to add one before the upgrade completes.
If I get a free trial, hit my limits, and upgrade to Premium — will I see the Premium features?
Yes! As soon as you upgrade to Premium (even while the trial is still active), the Premium features unlock on your Convert to PDF page. You can continue using the trial until it ends, and billing only starts after the trial ends.
Premium options appear in the right-side Advanced Options panel on the Convert to PDF page.
What happens if I add a payment method during my free trial?
If you add a payment method during your Free Trial, your trial continues until the end date. You will not be charged until the trial ends, and then your paid plan begins automatically.
If you cancel before the trial ends and no payment method is on file, your Free Trial ends immediately and you lose the remaining trial time.
How do I switch between monthly and yearly billing?
Use the "Manage My Subscription" button on your account page. This opens the Stripe billing portal where you can:
- Switch from monthly to yearly (or vice versa)
- Update your payment method
- View billing history
- Cancel your subscription
What happens when my trial expires?
If you don't add payment details before your trial ends:
- You'll see a "Your free trial is over" modal when you log in
- You'll be prompted to choose a plan
- Your account returns to the Free Trial limits
- Your conversion history is preserved
Can I cancel my subscription anytime?
Yes!
- Click "Manage My Subscription" on your account page
- Select "Cancel subscription" in the Stripe portal
- Your subscription continues until the end of your current billing period
- No refunds for partial months/years (as per standard subscription practice)
Do you store my credit card details?
Under EU law (GDPR), we require explicit consent to store credit card details. When you sign up for a subscription:
- Stripe (our payment processor) securely handles all payment information
- We store only your Stripe customer ID (not card details)
- Stripe is PCI DSS Level 1 certified
- For recurring subscriptions, storage is necessary for contract performance
Is my payment information secure?
Yes. We use Stripe for all payment processing:
- Industry-standard encryption
- PCI DSS compliant
- Payment details never touch our servers
- Secure 3D authentication when required
My trial shows "PRO_MONTHLY" instead of "FREE TRIAL"
If you're seeing "PRO_MONTHLY" instead of "FREE TRIAL":
- Refresh your browser to load the latest code
- Your trial should now show "FREE TRIAL"
- The date should show "Trial ends: [date]"
If the issue persists, clear your browser cache or try a different browser.
I can't upgrade during my free trial
Refresh the page - The upgrade buttons should be visible during trial. If you still don't see them:
- Check that you're logged in
- Verify your trial hasn't expired
- Try a different browser or clear your cache
Account Management
Can I use both Social Login and Email login?
Yes. If you lose access to your social account but still have access to the email address, use Forgot your password? and enter that email. You will receive a verification link; follow it to set a password and log in with email.
How do I delete my account?
- Log in to your account
- Go to the Account page
- Scroll to the bottom
- Click "Delete Account"
- Confirm deletion
What gets deleted:
- Your user account and profile
- All conversion history
- API credentials (Premium users)
- Stripe subscription (automatically canceled)
What you need to do manually:
- Revoke GitHub social login access (if applicable)
Can I export my conversion history?
Currently, there's no export feature for conversion history. If you need this functionality, please contact support or file a feature request on our GitHub issues page.
How long is the email verification link valid?
Email verification links expire after 24 hours. If your link is expired or already used, you can resend the verification email from the login screen.
Social Logins
What is "FDR Dev Ley API v2"?
That's Auth0! We use Auth0 for social login integration, which provides:
- Google OAuth 2.0
- GitHub OAuth
- Microsoft (Windows Live)
- Apple
Can I revoke social login access when I delete my account?
Automatic revocation:
- ✅ Google: Automatically revoked (Google provides public token revocation)
Manual revocation required:
- ⚠️ GitHub: If using Auth0's built-in dev keys, must be revoked manually by the user
- If you're using a custom GitHub OAuth app, we can revoke automatically
Why? GitHub requires the OAuth app's client credentials to revoke tokens. Auth0's built-in GitHub dev keys don't expose these credentials to our app.
How do I manually revoke GitHub access?
- Go to https://github.com/settings/applications
- Find "gitmd2pdf" (or the Auth0 app name)
- Click "Revoke access"
Contact and Support
How do I contact support?
Click the Contact link in the top navigation menu to access our contact form. You can submit inquiries in the following categories:
- Report issues with the WebApp/Conversions - For technical problems with PDF generation or conversions
- Report issues with my account - For login, subscription, or billing problems
- Request features - Share your ideas for new features
- Praise us like you should - We love hearing success stories!
- Any other business - General questions or feedback
Do I need to be logged in to use the contact form?
No! The contact form works for both:
- Anonymous users: Your message is sent without login
- Logged-in users: Your email address is automatically included in the message
How long does it take to get a response?
We typically respond within 24-48 hours during business days. For urgent issues affecting active subscriptions, we prioritize responses.
Can I attach files to my message?
Currently, the contact form supports text-only messages (up to 5,000 characters). If you need to share files or screenshots:
- Upload them to a file-sharing service (Google Drive, Dropbox, etc.)
- Include the link in your message
What should I include in a bug report?
When reporting issues, please include:
- Steps to reproduce: What actions led to the problem?
- Expected behavior: What should have happened?
- Actual behavior: What actually happened?
- Browser/Device: What browser and device are you using?
- Error messages: Any error messages you saw
The more details you provide, the faster we can help!
Still Have Questions?
If you can't find an answer here, use the Contact form in the navigation menu to reach our support team.