{
 "openapi": "3.1.0",
 "info": {
  "title": "screeningfacts.com free machine endpoints",
  "version": "2026-09-06",
  "description": "Free, keyless, CORS-open machine surfaces of Screening Facts. Every path honours conditional requests (ETag, Last-Modified, If-None-Match, If-Modified-Since → 304); Last-Modified is the newer of the dataset stamp (info.version) and the newest /changes.json item date. Attribution requested: Screening Facts (https://screeningfacts.com).",
  "contact": {
   "name": "Axion Labs",
   "email": "hello@getaxionlabs.com"
  },
  "x-dataset-fixity": "sha256-2491d5efd60eef26a2fbef7b10ad6a6169ef80e60a2fb7f2a55bfd843a5460fa",
  "x-corpus": {
   "frozen": true,
   "coverage": "CFPB published complaint narratives, 2011 - August 14, 2026",
   "frozen_since": "2026-08-14",
   "frozen_reason": "The CFPB ceased discretionary publication of complaint narratives on August 14, 2026, so every narrative-derived count on this site is a closed series and will not change. Complaint intake continues, and the per-company outcome table runs on all complaints and is current."
  }
 },
 "servers": [
  {
   "url": "https://screeningfacts.com"
  }
 ],
 "x-axion-passport": "https://screeningfacts.com/.well-known/agent-door.json",
 "x-axion-return": "axion-return/v1",
 "paths": {
  "/api/companies": {
   "get": {
    "summary": "Every screening company with category, CFPB complaint mentions, error-pattern breakdown and page URL, with attribution and methodology",
    "parameters": [],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "object"
        }
       }
      }
     },
     "304": {
      "description": "Not Modified — If-None-Match matched the ETag or If-Modified-Since is not before Last-Modified; empty body"
     }
    },
    "x-axion-cite": true
   }
  },
  "/api/answer": {
   "get": {
    "summary": "One composed answer: the company record, the situation guide, the FCRA clock, who fixes what, the frozen-corpus declaration and a citation pointing at the human page. Free, no key, never a 404 — an unresolved parameter returns the free index that lists the valid values",
    "parameters": [
     {
      "name": "company",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "A company slug from /api/companies. Unknown values return an unresolved block listing every valid slug."
     },
     {
      "name": "situation",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "A situation slug from /api/situations. Unknown values return an unresolved block listing every valid slug."
     },
     {
      "name": "state",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Two-letter US state code. Accepted and echoed; every clock quoted is federal, so it changes no value in the answer today."
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "object"
        }
       }
      }
     },
     "304": {
      "description": "Not Modified — If-None-Match matched the ETag or If-Modified-Since is not before Last-Modified; empty body"
     }
    },
    "x-axion-cite": true
   }
  },
  "/api/situations": {
   "get": {
    "summary": "The free index of situation guides: slug, headline, likely companies, evidence and first move, with the human URL for each",
    "parameters": [],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "object"
        }
       }
      }
     },
     "304": {
      "description": "Not Modified — If-None-Match matched the ETag or If-Modified-Since is not before Last-Modified; empty body"
     }
    },
    "x-axion-cite": true
   }
  },
  "/api/bulk": {
   "get": {
    "summary": "The whole corpus in one response: every company record with its dispute route and CFPB outcome row, every situation guide, the FCRA clock, the frozen-corpus declaration and the citation object. Free, keyless, no payment — it carried a $5 price and answered HTTP 402 with no payment rail behind it from 14 August to 9 September 2026, and the price was removed rather than the rail wired, because the same payload is already free at /api/companies and in /llms.txt on this domain",
    "parameters": [],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "object"
        }
       }
      }
     },
     "304": {
      "description": "Not Modified — If-None-Match matched the ETag or If-Modified-Since is not before Last-Modified; empty body"
     }
    },
    "x-axion-cite": true
   }
  },
  "/llms.txt": {
   "get": {
    "summary": "The whole corpus as plain text for assistants: ranked companies, error patterns, situation guides, caveats, dated Checked line",
    "parameters": [],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "text/plain": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "304": {
      "description": "Not Modified — If-None-Match matched the ETag or If-Modified-Since is not before Last-Modified; empty body"
     }
    }
   }
  },
  "/.well-known/agent-door.json": {
   "get": {
    "summary": "Door Passport (agent-door/v0): provider, capabilities, data required/retained, pricing, trust, dispute contact",
    "parameters": [],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "object"
        }
       }
      }
     },
     "304": {
      "description": "Not Modified — If-None-Match matched the ETag or If-Modified-Since is not before Last-Modified; empty body"
     }
    }
   }
  },
  "/changes.json": {
   "get": {
    "summary": "What moved, when, from where (axion-changes/1): data items from the dataset stamp, shape items from the committed change log; newest first",
    "parameters": [],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "object"
        }
       }
      }
     },
     "304": {
      "description": "Not Modified — If-None-Match matched the ETag or If-Modified-Since is not before Last-Modified; empty body"
     }
    }
   }
  },
  "/changes.atom": {
   "get": {
    "summary": "The same change items as an Atom 1.0 feed",
    "parameters": [],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/atom+xml": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "304": {
      "description": "Not Modified — If-None-Match matched the ETag or If-Modified-Since is not before Last-Modified; empty body"
     }
    }
   }
  },
  "/openapi.json": {
   "get": {
    "summary": "This document",
    "parameters": [],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "object"
        }
       }
      }
     },
     "304": {
      "description": "Not Modified — If-None-Match matched the ETag or If-Modified-Since is not before Last-Modified; empty body"
     }
    }
   }
  }
 },
 "x-service-info": {
  "name": "Screening Facts",
  "provider": "Axion Labs",
  "categories": [
   "data",
   "background-checks",
   "fcra",
   "consumer-rights"
  ],
  "contact": "hello@getaxionlabs.com",
  "auth": "https://screeningfacts.com/auth.md",
  "a2a": "https://screeningfacts.com/.well-known/agent-card.json"
 },
 "components": {
  "securitySchemes": {
   "axionKey": {
    "type": "http",
    "scheme": "bearer",
    "description": "An API key from https://screeningfacts.com/agent/identity. Every free operation answers without one."
   },
   "axionOAuth": {
    "type": "oauth2",
    "flows": {
     "clientCredentials": {
      "tokenUrl": "https://screeningfacts.com/oauth/token",
      "scopes": {
       "read": "every endpoint (they all answer without a token too)"
      }
     }
    }
   }
  }
 }
}