API Documentation
RegIntel API gives you access to structured regulatory data across 41 jurisdictions and 212 regulations via a simple REST API. All responses are JSON. Authentication is header-based.
Base URL for all API requests:
https://api.regintelapi.com
ℹ️ All endpoints require a valid API key except POST /api/request-key — get your free API key here.
Authentication
Pass your API key in every request using the x-api-key header.
curl https://api.regintelapi.com/regulations \ -H "x-api-key: YOUR_API_KEY"
Quick Start
Up and running in under 2 minutes.
1. Get an API key
Go to the API key page, enter your email, and your key is generated instantly.
2. Make your first request
curl https://api.regintelapi.com/regulations \ -H "x-api-key: YOUR_API_KEY" \ -G \ -d "jurisdiction=EU" \ -d "industry=Privacy"
import requests resp = requests.get( "https://api.regintelapi.com/regulations", headers={"x-api-key": "YOUR_API_KEY"}, params={"jurisdiction": "EU", "industry": "Privacy"}, timeout=10, ) resp.raise_for_status() data = resp.json() print(data["meta"]["total"], "regulations")
import axios from "axios"; const { data } = await axios.get( "https://api.regintelapi.com/regulations", { headers: { "x-api-key": "YOUR_API_KEY" }, params: { jurisdiction: "EU", industry: "Privacy" }, timeout: 10000, } ); console.log(`${data.meta.total} regulations`);
3. Inspect the response
{ "data": [{ "id": 127, "country": "EU", "industry": "Finance", "regulation": "MiFID II 2014/65/EU regulates investment services...", "effective_date": "2018-01-03", "status": "active", "change_type": "amended", "change_summary": "MiFID III proposals published in 2023...", "obligations": "Investment firms must obtain client authorisation, disclose costs and charges, and ensure best execution of orders...", "penalties": "Up to EUR 5,000,000 or 10% of annual turnover for legal persons...", "scope": "Applies to investment firms, credit institutions, and trading venues operating in the EU...", "key_articles": "Art. 24 conduct of business, Art. 25 suitability, Art. 27 best execution, Art. 70 penalties", "tags": "MiFID II, investment services, EU, financial markets, best execution, conduct of business", "source_url": "https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32014L0065", "updated_at": "2026-03-30", "version": 2 }], "meta": { "total": 212, "limit": 20, "page": 1, "offset": 0 } }
💡 Each regulation includes obligations, penalties, scope, key_articles, and tags — structured fields ready to use in your application without any post-processing.
Core Endpoints
Check compliance status for a specific activity in a country. Returns an instant decision signal — allowed, requires_license, restricted, or prohibited — along with risk level, penalties, obligations, and source regulations.
| Parameter | Type | Required | Description |
|---|---|---|---|
| country | string | required | Country code or name — e.g. AU, US, EU, SG, UK |
| activity | string | required | crypto, finance, banking, payments, lending, privacy, data_protection, aml, kyc |
curl "https://api.regintelapi.com/compliance-check?country=AU&activity=crypto" \ -H "x-api-key: YOUR_API_KEY"
{ "country": "Australia", "activity": "crypto", "industry": "Crypto", "status": "requires_license", "risk_level": "medium", "summary": "Crypto requires licensing in Australia. Exchanges must register with AUSTRAC...", "penalties": "Up to AUD 28 million per contravention...", "regulations_count": 2, "regulations": [{ "regulation": "Crypto exchanges must register with AUSTRAC...", "obligations": "Must register as DCE provider, implement AML/CTF program...", "penalties": "Up to 2 years imprisonment and/or fines...", "scope": "Any business exchanging digital currency in Australia...", "key_articles": "Part 6A AML/CTF Act, Section 76A...", "source_url": "https://www.austrac.gov.au/..." }], "disclaimer": "This is not legal advice..." }
Possible status values:
| Status | Meaning |
|---|---|
allowed | Activity is permitted with standard compliance requirements |
requires_license | Activity is legal but requires registration or licensing |
restricted | Activity faces significant regulatory restrictions |
prohibited | Activity is explicitly banned or illegal |
unknown | Insufficient data to determine status |
OpenAPI & Postman
RegIntel publishes a live OpenAPI 3.x spec describing every endpoint, parameter, and response. Import it into your favourite REST client to explore all 41 jurisdictions without writing a line of code.
https://api.regintelapi.com/openapi.json
ℹ️ Set the x-api-key header in your client after importing — the spec describes the schema but does not embed your key.
Vector Embeddings
Regulation text is returned as clean, structured strings optimised for embedding with any model — OpenAI, Cohere, or open-source. We deliberately do not run embeddings server-side: you pick the model, dimensionality, and store that fits your stack.
Each regulation exposes embedding-friendly fields (regulation, obligations, scope, penalties, key_articles, tags) free of HTML, footnotes, or formatting noise. Concatenate the fields you care about and embed in a single call.
import requests from openai import OpenAI regs = requests.get( "https://api.regintelapi.com/regulations", headers={"x-api-key": "YOUR_API_KEY"}, params={"jurisdiction": "EU"}, ).json()["data"] client = OpenAI() texts = [f"{r['regulation']}\n\n{r['obligations']}\n\n{r['scope']}" for r in regs] vectors = client.embeddings.create(model="text-embedding-3-small", input=texts).data
import requests, cohere regs = requests.get( "https://api.regintelapi.com/regulations", headers={"x-api-key": "YOUR_API_KEY"}, ).json()["data"] co = cohere.Client() texts = [f"{r['regulation']}\n\n{r['obligations']}" for r in regs] vectors = co.embed(texts=texts, model="embed-english-v3.0", input_type="search_document").embeddings
import requests from sentence_transformers import SentenceTransformer regs = requests.get( "https://api.regintelapi.com/regulations", headers={"x-api-key": "YOUR_API_KEY"}, ).json()["data"] model = SentenceTransformer("BAAI/bge-base-en-v1.5") texts = [f"{r['regulation']}\n\n{r['obligations']}" for r in regs] vectors = model.encode(texts, normalize_embeddings=True)
ℹ️ Use updated_at + GET /updates to keep your vector store in sync — only re-embed what changed.
Core Endpoints
Returns a paginated list of regulations. Filter by jurisdiction, industry, tag, or keyword search.
| Parameter | Type | Required | Description |
|---|---|---|---|
| jurisdiction | string | optional | ISO-style jurisdiction code — e.g. EU, US, AU. See GET /jurisdictions for the full list of supported codes. |
| industry | string | optional | Filter by industry — e.g. Finance, Privacy, AML, Crypto |
| tag | string | optional | Filter by tag keyword — e.g. GDPR, MiCA, AML, crypto |
| q (search) | string | optional | Full-text search across regulation text, obligations, scope, and tags |
| status | string | optional | active, pending, or repealed. Defaults to active |
| limit | integer | optional | Results per page, max 100. Defaults to 20 |
| page | integer | optional | Page number. Defaults to 1 |
curl "https://api.regintelapi.com/regulations?jurisdiction=EU&tag=GDPR&limit=5" \ -H "x-api-key: YOUR_API_KEY"
Returns full details for a single regulation by its unique ID (e.g. gdpr-2018).
curl https://api.regintelapi.com/regulations/gdpr-2018 \ -H "x-api-key: YOUR_API_KEY"
Returns the complete list of supported jurisdictions with codes and regulation counts. Does not consume credits.
curl https://api.regintelapi.com/jurisdictions -H "x-api-key: YOUR_API_KEY"
Returns regulations added or modified recently. Use since for a custom date range.
| Parameter | Type | Required | Description |
|---|---|---|---|
| since | date | optional | ISO 8601 date e.g. 2026-01-01. Defaults to 30 days ago. |
| jurisdiction | string | optional | Scope to a specific jurisdiction code. See GET /jurisdictions for the full list. |
curl "https://api.regintelapi.com/updates?since=2026-01-01&jurisdiction=EU" -H "x-api-key: YOUR_API_KEY"
Account Endpoints
Generates a new API key for an email address. Does not require authentication.
| Parameter | Type | Required | Description |
|---|---|---|---|
| string | required | Valid email address. One key per email. | |
| name | string | optional | User's display name |
curl -X POST https://api.regintelapi.com/api/request-key \ -H "Content-Type: application/json" \ -d '{"email": "you@example.com", "name": "Jane Smith"}'
{ "api_key": "ri_live_xxxxxxxxxxxxxxxxxxxx", "credits": 100, "plan": "free" }
Returns remaining credits, usage history, and plan details for the authenticated API key. Used by the dashboard.
curl https://api.regintelapi.com/api/usage -H "x-api-key: YOUR_API_KEY"
{ "api_key": "ri_live_xxxx...", "email": "you@example.com", "plan": "free", "credits_remaining": 72, "credits_total": 100, "requests_today": 3, "requests_total": 28, "usage_history": [{ "endpoint": "/regulations", "credits_used": 1, "status_code": 200, "timestamp": "2026-04-13T10:22:00Z" }] }
Account Management
Creates a Stripe Checkout session for upgrading a plan. Requires authentication. Returns a redirect URL.
This endpoint is used internally by the RegIntel Dashboard. Most developers do not need to call it directly — upgrades are handled through the dashboard UI.
| Body Parameter | Type | Required | Description |
|---|---|---|---|
| price_id | string | required | Stripe Price ID for the target plan |
curl -X POST https://api.regintelapi.com/create-checkout-session \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{"price_id": "price_XXXX"}'
{ "url": "https://checkout.stripe.com/pay/cs_live_..." }
Redirect the user to url to complete payment. On success, Stripe redirects back to dashboard.html?payment=success.
Rate Limits
Requests are rate-limited per API key. Limits reset every 60 seconds. When exceeded, you receive a 429 Too Many Requests response — check the Retry-After header.
Error Codes
RegIntel uses standard HTTP status codes. All error responses include a message field.
| Status | Meaning |
|---|---|
200 | OK — request succeeded |
400 | Bad Request — invalid parameters |
401 | Unauthorized — missing or invalid API key |
403 | Forbidden — valid key but out of credits |
404 | Not Found — resource does not exist |
429 | Too Many Requests — rate limit exceeded |
500 | Server Error — something went wrong on our end |
{ "error": "unauthorized", "message": "Invalid or missing API key.", "status": 401 }
Credits & Billing
Every successful API call deducts 1 credit. Requests that return 4xx/5xx errors do not consume credits.
Credit balances are returned in every response under meta.credits_remaining. Credits do not expire on paid plans.
To upgrade, visit the dashboard or the pricing page.