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.
Regulation Lookup
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. 123 (integer)).
curl https://api.regintelapi.com/regulations/123 \ -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"
AASB-S2 — Australian Climate Disclosure
Structured representation of the disclosure obligations imposed by AASB-S2 — Climate-related Financial Disclosures (the Australian Sustainability Reporting Standard equivalent of IFRS S2). Returns paragraph-cited obligations across the four pillars (governance, strategy, risk management, metrics & targets), with per-Group applicability that encodes phase-in dates, first-year reliefs, and the modified-liability protected-statement window.
⚠️ Information only. RegIntel does not calculate emissions, does not judge assurance, and does not determine which AASB-S2 Group an entity falls into, nor whether the entity is in scope under Chapter 2M of the Corporations Act 2001. Engagement requirements per AUASB ASSA 5000; assurance phase-in per ASSA 5010; Group classification per ASIC RG 280. Consult the standards directly and engage qualified climate-disclosure professionals before relying on disclosure positions.
Returns the AASB-S2 disclosure obligations applicable to a covered entity. Defaults to all 26 obligations across the four pillars. Filterable by Group tier, disclosure category, and reporting year.
| Parameter | Type | Required | Description |
|---|---|---|---|
| group | integer | optional | Filter by Group tier — 1 (largest, FY commencing 1 Jan 2025), 2 (mid-tier, 1 Jul 2026), or 3 (smaller, 1 Jul 2027). The API does NOT determine which Group an entity falls into. |
| category_code | string | optional | Filter to a specific AASB-S2 disclosure category, e.g. AASB-S2-MET-GHG-S3 for Scope 3 emissions, AASB-S2-GOV for governance. See AASB S2 for the standard. |
| reporting_year | integer | optional | Reporting year of interest, e.g. 2026. When supplied, each per-group applicability entry reflects whether the obligation is in force that year, factoring in the Scope 3 Year-1 exemption and other transitional reliefs. |
curl "https://api.regintelapi.com/v1/aasb-s2/obligations?group=1&category_code=AASB-S2-MET-GHG-S3&reporting_year=2025" \ -H "x-api-key: YOUR_API_KEY"
{ "data": [{ "id": 13, "requirement_code": "AASB-S2-REQ-013", "pillar": "metrics_targets", "category_code": "AASB-S2-MET-GHG-S3", "paragraph_ref": "¶29(a)(i)(3), (vi)", "title": "Scope 3 emissions", "obligation_text": "Disclose absolute gross Scope 3 emissions and state which of the 15 GHG-Protocol value-chain categories are included.", "type": "quantitative", "source_url": "https://standards.aasb.gov.au/aasb-s2-sep-2024", "applicability_per_group": { "group_1": { "group_code": "group_1", "first_reporting_period_start_date": "2025-01-01", "applies": false, "assurance_level": null, "reliefs": [{ "relief_type": "scope_3_year1_exemption", "relief_summary": "Scope 3 emissions disclosure not required in the entity's first annual reporting period under AASB S2...", "relief_expiry": "2026-01-01", "source_reference": "AASB S2 Appendix C4(b)" }] } }, "measurement_categories": [], "methodology_references": [], "assurance_inputs_required": [], "reporting_templates": [] }], "meta": { "total": 1, "group_filter": 1, "category_code_filter": "AASB-S2-MET-GHG-S3", "reporting_year": 2025, "credits_used": 1, "advisory": "Information only. RegIntel does not calculate emissions...", "sources": [ "AASB S2 Climate-related Disclosures (Sep 2024)", "Corporations Act 2001 Chapter 2M", "ASIC RG 280 Sustainability reporting (31 Mar 2025)", "AUASB ASSA 5000 General Requirements for Sustainability Assurance Engagements", "AUASB ASSA 5010 Timeline for Audits and Reviews of Information in Sustainability Reports" ] } }
The four calculator-ready annotation fields (measurement_categories, methodology_references, assurance_inputs_required, reporting_templates) are forward-compatible slots for sustainability calculator products to consume; they default to empty arrays until per-obligation seed passes land. The endpoint billing is 1 credit per call.
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 — x-api-key header missing |
402 | Payment Required — valid key but credit balance is zero. Body returns error: "insufficient_credits" and a top-up URL. |
403 | Forbidden — x-api-key header present but key is invalid or revoked |
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.