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 (public repositories)
Output:
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 leave it blank:
- Markdown uploads: The first level‑1 heading (
# Heading) becomes the title (headings inside fenced code blocks are ignored). If there’s no#heading, it falls back to the uploaded filename. - Repository conversions: The repository name is used (for example,
https://github.com/user/my-repo.git→my-repo).
The UI will usually pre-fill the Title automatically (from your first # heading for Markdown, or from the repo URL for repositories), and you can always edit or clear it before converting.
Why does my PDF look different from GitHub?
Our PDF renderer may display Markdown differently than GitHub's preview. 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.
How do I convert a private GitHub or GitLab repository?
You should use a personal access token, rather than passwords in the HTTPS URL for Git operations on GitHub.com.
GitHub (private repo via HTTPS):
GitHub’s docs recommend cloning with the normal HTTPS URL and entering your PAT when prompted for a password. Use the HTTPS URL and the git credential helper to avoid exposing the token in logs or browser history.
git config --global credential.helper store
GitLab explicitly documents using a PAT in the URL, for example:
https://<username>:<personal_access_token>@gitlab.com/namespace/project.git
GitLab also notes that this embeds your token in shell history. A safer alternative is to omit the token and provide it only when prompted for a password:
https://<username>@gitlab.com/namespace/project.git
When prompted for a password, paste your personal access token.
Security tips
- We do not store your credentials — tokens are used only during conversion and are never saved.
- Use short-lived, least-privilege tokens.
- Avoid sharing URLs that embed tokens.
- Tokens are redacted from the converted PDF.
- Rotate tokens if they are ever exposed.
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 (see the README).
- 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, limited conversions during the trial window
- 14-day trial window
- 6 Markdown file conversions total
- 3 Git repository conversions total
- No API access
Pro - $2.99/month or $28.74/year (save 20%)
- Unlimited Markdown to PDF conversions
- Unlimited Git repository to PDF conversions
- No API access
Premium - $4.99/month or $47.90/year (save 20%)
- Everything in Pro, plus:
- Public REST API for programmatic conversions
- HMAC and OAuth 2.0 authentication
- API credential management
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" - $2.99/month or $28.74/year
- "Upgrade to Premium" - $4.99/month or $47.90/year
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, 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.