FuseDrill is a tool for fuzzing and simulation testing of OpenAPIs using snapshots. It helps you identify open API contract changes from the previous version to the current one.
To use FuseDrill, you need to set up a GitHub Actions workflow. Here is an example configuration:
name: FuseDrill Fuzzing/Simulation Testing
on:
  push:
    branches:
      - main  # Runs on push to the main branch
  pull_request:
    branches:
      - main  # Runs on pull requests to the main branch
jobs:
  fuzz-test:
    runs-on: ubuntu-latest
    steps:
    - name: Pull FuseDrill Docker Image
      run: docker pull ghcr.io/fusedrill/fusedrill-cli:latest # Add docker image versioning later
    - name: Run FuseDrill CLI in Docker
      run: |
         docker run --network host --rm \
          -e FUSEDRILL_BASE_ADDRESS="https://api.apis.guru/v2" \
          -e FUSEDRILL_OPENAPI_URL="https://api.apis.guru/v2/openapi.yaml" \
          -e FUSEDRILL_OAUTH_HEADER="Bearer your-API-test-account-oauth-token"  \
          -e GITHUB_TOKEN="${{ secrets.GITHUB_TOKEN }}" \
          -e SMOKE_FLAG="true" \
          -e GITHUB_REPOSITORY_OWNER="${{ github.repository_owner }}" \
          -e GITHUB_REPOSITORY="${{ github.repository }}" \
          -e GITHUB_HEAD_REF="${{ github.head_ref }}" \
          -e GEMINI_API_KEY="${{ secrets.GEMINI_API_KEY }}" \
          ghcr.io/fusedrill/fusedrill-cli:latest
      - name: Post-run step
        run: |
          echo "Fuzzing test completed"
    {
  "Seed": 1234567,
  "TestSuites": [
    {
      "ApiCalls": [
        {
          "MethodName": "GetMetrics_http_get_Async",
          "Order": 2,
          "Response": {
            "NumSpecs": 3992,
            "NumAPIs": 2529,
            "NumEndpoints": 108837,
            "Unreachable": 166,
            "Invalid": 688,
            "Unofficial": 25,
            "Fixes": 84860,
            "FixedPct": 23,
            "Datasets": [
              {
                "data": {
                  "adyen.com": [],
                  "amadeus.com": [],
                  "amazonaws.com": [],
                  "apideck.com": [],
                  "apisetu.gov.in": [],
                  "azure.com": [],
                  "ebay.com": [],
                  "fungenerators.com": [],
                  "github.com": [],
                  "googleapis.com": [],
                  "hubapi.com": [],
                  "interzoid.com": [],
                  "mastercard.com": [],
                  "microsoft.com": [],
                  "nexmo.com": [],
                  "nytimes.com": [],
                  "Others": [],
                  "parliament.uk": [],
                  "sportsdata.io": [],
                  "twilio.com": [],
                  "vtex.local": [],
                  "windows.net": []
                },
                "title": []
              }
            ],
            "Stars": 3151,
            "Issues": 35,
            "ThisWeek": {
              "Added": 9,
              "Updated": 437
            },
            "NumDrivers": 10,
            "NumProviders": 677
          },
          "HttpMethod": "get"
        }
      ]
    },
    {
      "ApiCalls": [
        {
          "MethodName": "GetAPI_http_get_Async",
          "Order": 1,
          "Request": [
            "RandomString275",
            "RandomString157"
          ],
          "Response": {
            "StatusCode": 404,
            "Message": "The HTTP status code of the response was not expected (404).  Status: 404 Response:  <!DOCTYPE html> <html>   <head>     <meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\">     <meta http-equiv=\"Content-Security-Policy\" content=\"default-src 'none'; style-src 'unsafe-inline'; img-src data:; connect-src 'self'\">     <title>Page not found · GitHub Pages</title>     <style type=\"text/css\" media=\"screen\">       body {         background-color: #f1f1f1;         margin: 0;         font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;       }        .container { margin",
            "TypeName": "ApiException"
          },
          "HttpMethod": "get"
        },
        {
          "MethodName": "GetMetrics_http_get_Async",
          "Order": 3,
          "Response": {
            "NumSpecs": 3992,
            "NumAPIs": 2529,
            "NumEndpoints": 108837,
            "Unreachable": 166,
            "Invalid": 688,
            "Unofficial": 25,
            "Fixes": 84860,
            "FixedPct": 23,
            "Datasets": [
              {
                "data": {
                  "adyen.com": [],
                  "amadeus.com": [],
                  "amazonaws.com": [],
                  "apideck.com": [],
                  "apisetu.gov.in": [],
                  "azure.com": [],
                  "ebay.com": [],
                  "fungenerators.com": [],
                  "github.com": [],
                  "googleapis.com": [],
                  "hubapi.com": [],
                  "interzoid.com": [],
                  "mastercard.com": [],
                  "microsoft.com": [],
                  "nexmo.com": [],
                  "nytimes.com": [],
                  "Others": [],
                  "parliament.uk": [],
                  "sportsdata.io": [],
                  "twilio.com": [],
                  "vtex.local": [],
                  "windows.net": []
                },
                "title": []
              }
            ],
            "Stars": 3151,
            "Issues": 35,
            "ThisWeek": {
              "Added": 9,
              "Updated": 437
            },
            "NumDrivers": 10,
            "NumProviders": 677
          },
          "HttpMethod": "get"
        }
      ]
    }
....
    name: FuseDrill Fuzzing/Simulation Testing
on:
  push:
    branches:
      - main  # Runs on push to the main branch
  pull_request:
    branches:
      - main  # Runs on pull requests to the main branch
jobs:
  fuzz-test:
    runs-on: ubuntu-latest
    steps:
# ------------ Deploy your app or run inside the GitHub CI/CD 
      - name: Pull FuseDrill test api Docker Image
        run: docker pull ghcr.io/fusedrill/fusedrill/testapi:latest
        
      - name: Run Test API
        run: |
          docker run -d \
            -e ASPNETCORE_ENVIRONMENT="Development" \
            -p 8080:8080 \
            ghcr.io/fusedrill/fusedrill/testapi:latest
          
      - name: Wait for Test API to be Ready
        run: |
          # Wait for the API to start and be reachable on port 8080
          until curl -s http://localhost:8080/swagger/v1/swagger.json; do
            echo "Waiting for Test API to start..."
            sleep 5
          done
# ------------------------------------------------------
    - name: Pull FuseDrill Docker Image
      run: docker pull ghcr.io/fusedrill/fusedrill-cli:latest # Add docker image versioning later
    - name: Run FuseDrill CLI in Docker
      run: |
         docker run --network host --rm \
          -e FUSEDRILL_BASE_ADDRESS="http://localhost:8080/" \
          -e FUSEDRILL_OPENAPI_URL="http://localhost:8080/swagger/v1/swagger.json" \
          -e FUSEDRILL_OAUTH_HEADER="Bearer your-API-test-account-oauth-token"  \
          -e GITHUB_TOKEN="${{ secrets.GITHUB_TOKEN }}" \
          -e SMOKE_FLAG="true" \
          -e GITHUB_REPOSITORY_OWNER="${{ github.repository_owner }}" \
          -e GITHUB_REPOSITORY="${{ github.repository }}" \
          -e GITHUB_HEAD_REF="${{ github.head_ref }}" \
          -e GEMINI_API_KEY="${{ secrets.GEMINI_API_KEY }}" \
          ghcr.io/fusedrill/fusedrill-cli:latest
      - name: Post-run step
        run: |
          echo "Fuzzing test completed"
    | Basic | Team | Enterprise | 
|---|---|---|
| Free open source | $8 / month | Custom Pricing | 
| Great for individuals or small teams just starting out. | Perfect for growing teams and businesses that need more advanced features. | Designed for complicated requirements. Get in touch with us for a tailored solution. | 
| Runs locally | 1 repository | Unlimited repositories | 
| Single user | Access to all local features | AI enhanced fuzzing with your local AI models | 
| Free Forever | AI enhanced fuzzing | 24/7 Priority Support | 
| No Credit Card required | AI summaries of snapshots | AI summaries of snapshots with your local AI model | 
| Local snapshot diff comparison | CI/CD Integration with GitHub | Custom Integrations | 
| Only c sharp now | Fuzz your apis inside docker container | 24/7 Priority Support | 
| Other languages coming soon if there is need | Your cloud | |
| Your AI | ||
| Your data | ||
| Go to open source | Sign Up and add Workflow to Github | Let’s explore your requirements | 
Q1: What is an API fuzzer?
      A: An API fuzzer is a tool that tests APIs by sending random, unexpected, or malicious inputs to identify
      potential vulnerabilities or issues in the system. With AI-enhanced fuzzing, the tool crafts more sophisticated
      and context-aware test cases, increasing the likelihood of uncovering complex issues and ensuring better coverage
      during testing.
Q2: Why is fuzzing important for my API?
      A: Fuzzing is crucial for identifying and fixing hidden vulnerabilities or bugs in your API before they reach your
      clients. By detecting unexpected behavior early, the tool ensures your changes are expected and won’t disrupt your
      users’ experience when released. It helps maintain trust and reliability in your services.
Q3: Who is this API fuzzer designed for?
      A: Our API fuzzer is designed for individuals, teams, and enterprises aiming to improve their API security and
      reliability, with tailored features for each level.
Q4: What’s the difference between the Basic, Team, and Enterprise plans?
      A:
Q5: How does AI-enhanced fuzzing work?
      A: AI-enhanced fuzzing leverages LLM models to generate more intelligent and context-aware test cases, improving
      the efficiency of API testing.
Q6: What are snapshot comparisons?
      A: Snapshot comparison allows you to compare the current state of your API responses against previously saved
      snapshots, making it easy to spot unintended changes.
Q7: Does the fuzzer integrate with CI/CD pipelines?
      A: Yes, the Team and Enterprise plans include CI/CD integration, allowing seamless testing within your development
      workflows, including GitHub Actions.
Q8: Is the API fuzzer compatible with my local environment?
      A: Absolutely. The Basic and Team plans are designed to run locally, ensuring no data leaves your environment
      unless you choose to integrate external tools.
Q9: Can I use my own AI models for fuzzing?
      A: Yes, the Enterprise plan supports local AI model integration, enabling custom testing scenarios with your
      proprietary models.
Q10: Is my data secure while using the API fuzzer?
      A: We prioritize your data security. Local testing ensures data never leaves your environment unless explicitly
      configured, and the Enterprise plan allows full control over your cloud and data.
Q11: Does the fuzzer store sensitive information?
      A: No, the fuzzer does not store sensitive information unless you configure it to do so. All testing is designed
      with privacy in mind.
Q12: What kind of support is available?
      A:
Q13: How much does the API fuzzer cost?
      A:
Q14: How do I upgrade my plan?
      A: You can upgrade directly from your account dashboard. For the Enterprise plan, contact our sales team to
      discuss your needs.
Q15: How do I install the API fuzzer?
      A: The Basic version is open-source and available on GitHub. Follow the installation guide in the repository to
      set it up locally.
If you have further questions, feel free to reach out via our support channels!