{"record":{"id":"c053d953000ce795","repo":"projectdiscovery/subfinder","slug":"v","errorCode":null,"errorMessage":"%v","messagePattern":"%v","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/subscraping/sources/c99/c99.go","lineNumber":81,"sourceCode":"\n\t\tdefer func() {\n\t\t\tif err := resp.Body.Close(); err != nil {\n\t\t\t\tresults <- subscraping.Result{Source: s.Name(), Type: subscraping.Error, Error: err}\n\t\t\t\ts.errors++\n\t\t\t}\n\t\t}()\n\n\t\tvar response dnsdbLookupResponse\n\t\terr = jsoniter.NewDecoder(resp.Body).Decode(&response)\n\t\tif err != nil {\n\t\t\tresults <- subscraping.Result{Source: s.Name(), Type: subscraping.Error, Error: err}\n\t\t\ts.errors++\n\t\t\treturn\n\t\t}\n\n\t\tif response.Error != \"\" {\n\t\t\tresults <- subscraping.Result{\n\t\t\t\tSource: s.Name(), Type: subscraping.Error, Error: fmt.Errorf(\"%v\", response.Error),\n\t\t\t}\n\t\t\ts.errors++\n\t\t\treturn\n\t\t}\n\n\t\tfor _, data := range response.Subdomains {\n\t\t\tif !strings.HasPrefix(data.Subdomain, \".\") {\n\t\t\t\tselect {\n\t\t\t\tcase <-ctx.Done():\n\t\t\t\t\treturn\n\t\t\t\tcase results <- subscraping.Result{Source: s.Name(), Type: subscraping.Subdomain, Value: data.Subdomain}:\n\t\t\t\t\ts.results++\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}()\n\n\treturn results","sourceCodeStart":63,"sourceCodeEnd":99,"githubUrl":"https://github.com/projectdiscovery/subfinder/blob/7a0b91f0fac01b62c65328bd771a3560ae611d6a/pkg/subscraping/sources/c99/c99.go#L63-L99","documentation":"The C99 source inspects response.Error from the C99 API; when non-empty it wraps that message verbatim with fmt.Errorf(\"%v\", response.Error) and emits it as an error Result. It is a passthrough of C99's API-level error reporting.","triggerScenarios":"C99 API returns a payload whose 'error' field is non-empty — typically invalid API key, exhausted credits, or a request the API refuses.","commonSituations":"No C99 API key configured; C99 account out of balance; API rejecting queries for certain domains.","solutions":["Configure a valid C99 API key in the subfinder provider config","Top up / verify your C99 account balance","Read the wrapped message for the provider's specific cause","Retry later or exclude the c99 source from enumeration"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"for result := range results {\n    if result.Type == subscraping.Error {\n        gologger.Warning().Msgf(\"c99: %v\", result.Error)\n        continue\n    }\n    // process result\n}","preventionTips":["Configure a valid C99 API key with sufficient balance","Handle Error-type results without aborting the scan","Exclude failing sources when needed"],"tags":["c99","api","upstream"],"backgroundTag":"upstream-api-error","analyzedSha":"7a0b91f0fac01b62c65328bd771a3560ae611d6a","analyzedAt":"2026-09-06T23:52:02.109Z","contentChangedAt":"2026-09-06T23:52:02.109Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}