Getting Started > Quick Start
Quick Start
Atlas API is a scoped company-integration surface for published regulatory updates, routing context, MCP clients, and signed outbound events.
Production API access
To get started with Atlas API, you need an Atlas workspace account and a scoped API key. Workspace owners and admins can create keys from API Documentation.
Atlas Professional and Team include the product workspace, configured integrations, developer documentation and an authenticated synthetic no-write sandbox. Production API keys, production MCP and outbound webhooks require Core, Scale or an Enterprise agreement.
API Access Core
$950/month
125,000 read units/month. The production starting tier for normal application and data-pipeline use.
API Access Scale
$1,500/month
250,000 read units/month. For higher-volume applications, monitoring services and data pipelines.
Both tiers include scoped REST keys, regulatory MCP query tools, the bounded metered exact-source refresh action, and customer-configured signed webhooks. Production credentials require the package capability and an active allowance. Enterprise can contract a larger allowance, rollout support or service terms. None of these packages authorizes native Slack delivery.
If you are not an owner or admin, ask a workspace owner to issue the key or contact Pimlico Solutions to enable API Access.
Start with a sandbox key. Move to production only after endpoint, authorization, payload shape, and destination proof are clear.
What a read unit means
A read unit is a predictable weight reserved for one authorized API or MCP operation. It is not one returned record and it is not a separate charge for every item in a page. Each additional page is a new request with the same displayed weight. Reuse the same request id only when retrying that exact logical operation.
If the whole Core monthly allowance were used for only one operation type, it would cover approximately:
125,000
regulation detail reads
1 unit each
25,000
standard list, search or event requests
5 units each
5,000
monitor digest requests
25 units each
Most customers use a mix. Metadata, sandbox validation and connector configuration consume zero read units. X-Atlas-* response headers include the request, operation weight, used allowance and remaining allowance so usage can be reconciled without guessing.
What the API supports
Atlas API currently supports the following operations:
- Published regulation list and detail retrieval
- Exact-source freshness evidence and verified-age gates
- Tenant-bound asynchronous exact-source refresh jobs and receipts
- Coverage and taxonomy discovery
- Durable regulation versions and field-level changes
- Monitor digest retrieval
- Durable, cursor-paginated monitor event retrieval
- Read-only watchlist and project context
- Client coverage management
- Signed outbound webhook registration
- MCP query tools and bounded exact-source refresh
- Official TypeScript and Python SDK source packages
How to build it into your stack
| Pattern | Start with | Implementation rule |
|---|---|---|
| Incremental data sync | GET /monitor-events | Store the opaque cursor only after your local transaction commits, then resume from it on the next poll. |
| Regulatory lookup | GET /regulations and /regulations/{id} | Index customer-safe published records by stable Atlas id and retain the source links returned with each record. |
| Verified-age data gate | freshness_mode=require_fresh | Choose a maximum exact-source receipt age and handle stale, unknown and evidence-unavailable responses without weakening the boundary. |
| Refresh a stale exact source | POST /freshness/refresh-jobs | Use one idempotency key for the exact regulation set and age boundary, then poll the tenant-bound job receipt to terminal state. |
| Daily internal briefing | GET /monitor-digest | Request a bounded time window, render the cited result in your own product, and retain the usage receipt headers. |
| Approved agent context | Atlas regulatory MCP | Connect an authenticated MCP client, keep query tools read-only, and permit the bounded exact-source refresh tool only when that action is approved for the workspace. |
| Push into your stack | Signed outbound webhooks | Verify the Atlas signature, deduplicate by event id, return success quickly, and process the event asynchronously. |
Native Slack is not another API response format. Use the separately authorised Slack connector when Atlas should own channel delivery; use a signed webhook when the customer's service should own the downstream action.
Query the regulatory question
Atlas exposes regulatory facts as composable dimensions rather than forcing customers to know our internal tables. Filters combine with AND semantics. Every returned record carries stable identity, source provenance and normalized Atlas Data dimensions; it never infers customer applicability or authorizes a delivery action.
Query contract version: 2026-09-05.regulations-query.v2. Pin this value in production clients and review the machine-readable contract before adopting a later version.
| Customer question | Query dimensions | Returned evidence |
|---|---|---|
| What changed? | q, action_type, regulatory_event_type | Title, overview, document type, event classification and cited source. |
| Where and who? | jurisdiction, subdivision, authority_id, authority_name | Exact jurisdiction and canonical authority identity where Atlas has one. |
| Which business area? | vertical, significance, lifecycle_stage | Normalized Atlas Data dimensions for vertical, materiality and regulatory stage. |
| When does it matter? | published_from/to, effective_from/to | Publication, effective and customer-publication dates kept as separate facts. |
| What changed since my last run? | updated_from, updated_to, cursor | A bounded incremental window with an opaque replay-safe pagination cursor. |
| How recently was the source checked? | freshness_mode, freshness_max_age_seconds | Exact source-scan receipt time and outcome, kept separate from Atlas row and publication timestamps. |
EU AI consultations changed since 1 August
GET /regulations?q=consultation&jurisdiction=EU&vertical=AI&updated_from=2026-08-01T00:00:00ZActionable payments items from one authority
GET /regulations?authority_id={uuid}&vertical=Payments&significance=Actionable&published_from=2026-08-01Material items taking effect next quarter
GET /regulations?min_event_severity=3&effective_from=2026-10-01&effective_to=2026-12-31Source freshness evidence
Current regulation, monitor-digest and monitor-event reads return a versioned freshness envelope. It identifies the exact source registry row and newest append-only ordinary source-scan receipt when one exists. Atlas keepssource_checked_at separate fromupdated_at andcustomer_published_at; changing or publishing an Atlas row is not represented as checking the official source. A fresh receipt proves a successful exact-source check inside the selected age window; it does not claim that a model re-adjudicated every published field on that API request.
Standard read
Use freshness_mode=standard to receive the current published record with honest fresh, stale or unknown evidence.
Verified-age gate
Use freshness_mode=require_fresh withfreshness_max_age_seconds. Atlas fails the complete read when any result lacks a successful in-window receipt.
Atlas serves published records from its database and separately refreshes their sources, retaining a history of each check. Reads never launch a source fetch or AI verification call. When the caller chooses to refresh stale evidence, create an explicit job withPOST /freshness/refresh-jobs and anIdempotency-Key, then poll/freshness/refresh-jobs/{job_id}. The job is tenant-bound, scans only the exact active sources that need it, and returns source, bounded retry, queue-trace and immutable receipt evidence. Creation costs 25 units, polling costs 1, and the controlled contract caps an organization at 25 jobs per UTC day. Source cadences vary; the 26-hour default is a verification boundary, not a universal scan SLA. Freshness or relevance never authorizes Slack, webhook or another send.
Interactive query explorer
Build the regulatory question in the browser, copy an official SDK example, and use live taxonomy values when you have a scoped key. Keys entered here remain in component memory only and are not stored by the documentation page.
Regulation query explorer
Build a published-corpus query, copy SDK-ready code, or run it with a key kept only in this browser session.
GET /regulations?jurisdiction=EU&vertical=AI&freshness_mode=standard&freshness_max_age_seconds=93600&limit=25
curl "https://xldyvilhtvxmfgtyjusb.supabase.co/functions/v1/partner-api/regulations?jurisdiction=EU&vertical=AI&freshness_mode=standard&freshness_max_age_seconds=93600&limit=25" \ -H "Authorization: Bearer $ATLAS_API_KEY"
Endpoint
All API routes are served from the Atlas functions host.
https://xldyvilhtvxmfgtyjusb.supabase.co/functions/v1/partner-apiAuthorization
Send your scoped key as a bearer token. External callers must never use service-role credentials.
Authorization: Bearer pk_...
Making your first request
Start with a key carrying the sandbox scope. This request returns synthetic data, consumes zero read units and does not send anything. For live cited updates, use a production key carrying the REST API scope with GET /monitor-digest; production also requires API Access and an active allowance.
curl "https://xldyvilhtvxmfgtyjusb.supabase.co/functions/v1/partner-api/sandbox" \ -H "Authorization: Bearer pk_..."
API Reference
Use OpenAPI or Postman for the full contract. The table below keeps the first integration path short.
| Regulatory corpus | ||||
|---|---|---|---|---|
| GET | /query-capabilitiesQuery capabilities | Public machine-readable discovery contract for filters, dimensions, sync semantics and query examples. | 0 RU | |
| GET | /coverageCoverage discovery | Published record counts, freshness bounds and live canonical dimension values. | 0 RU | |
| GET | /taxonomiesTaxonomy discovery | Versioned dimension semantics plus live values accepted by regulatory queries. | 0 RU | |
| GET | /regulationsPublished regulations | Published regulatory records with Atlas Data dimensions, exact-source freshness evidence, lifecycle and keyset pagination. | 5 RU | |
| GET | /regulations/{id}Regulation detail | Record details, tags and related object IDs, with an optional limit on the age of verification. | 1 RU | |
| GET | /regulations/{id}/versionsRegulation versions | Durable customer-safe snapshots for the currently published regulation. | 5 RU | |
| GET | /regulations/{id}/changesRegulation changes | Field-level before/after values across successive published versions. | 5 RU | |
| POST | /freshness/refresh-jobsRequest source refresh | Idempotent stale-only asynchronous refresh for the exact active sources behind 1-10 published regulations. | 25 RU | |
| GET | /freshness/refresh-jobs/{job_id}Poll source refresh | Tenant-bound state and exact source, retry, queue-trace, source-check receipt and terminal outcome evidence. | 1 RU | |
| Monitor data | ||||
| GET | /monitor-digestMonitor digest | Published regulatory updates for a time window, with source links, capture metadata and exact-source freshness evidence. | 25 RU | |
| GET | /monitor-eventsMonitor events | Cursor-paginated published events with freshness receipts. Every object is explicitly non-authoritative for destination delivery. | 5 RU | |
| Workspace context | ||||
| GET | /watchlistsAlert routes | Read-only alert routing rules and connector destinations attached to them. | 5 RU | |
| GET | /projectsProjects | Project and task summaries, including Jira and Confluence link counts. | 5 RU | |
| GET | /clientsClient coverage | Partner-scoped client profiles and coverage used to route regulatory briefings. | 5 RU | |
| Events and sandbox | ||||
| POST | /connectorsConnector endpoints | Register a customer-owned HTTPS endpoint for signed outbound events. | 0 RU | |
| POST | /connectors/{id}/events/{event_id}/reconcileDelivery recovery | Record receiver evidence for an uncertain delivery. This does not queue or send; replay is a separate request. | 0 RU | |
| POST | /sandbox/validateSandbox validation | Validate auth and payload shape without writing production records. | 0 RU | |
SDK release candidates
The checked-in TypeScript and Python clients wrap the same OpenAPI contract. Both expose regulatory queries, coverage, taxonomy, version history, monitor reads and Atlas request/read-unit receipts. They apply bounded timeouts and retry only idempotent GET requests. Their distributable artifacts are verified, but the registry packages are not yet published.
TypeScript
Registry release pending@pimlico/atlas-apiNode 20+ and standards-compatible fetch runtimes.
Python
Registry release pendingpimlico-atlas-apiPython 3.10+ with no runtime dependencies.
Install commands will appear only after signed registry readback is recorded in the API changelog. Until then, use the OpenAPI-generated contract or the checked-in SDK source provided during assisted onboarding.
MCP
Atlas MCP query tools are read-only. The separately named request_regulatory_refresh tool may enqueue one bounded, stale-only, idempotent exact-source verification job for 1–10 published regulations; creating the job costs 25 read units and polling its receipt costs 1. A separate safety quota allows no more than 25 refresh jobs per organization per UTC day. MCP does not create Jira issues, Confluence or Notion pages, Asana tasks, Slack or Microsoft Teams messages, Google files, or Archer records.
Configure an authenticated remote HTTP MCP server at https://xldyvilhtvxmfgtyjusb.supabase.co/functions/v1/mcp-regulatory. OAuth authorization code plus PKCE is the primary interactive-client path. Approved server-to-server or CLI clients can use a production key with the mcp scope as a fallback. Start by calling initialize, tools/list, then a citation-backed read such as get_monitor_events.
Atlas binds OAuth access tokens to the exact MCP resource and a live Atlas user, client, and session. Choose an active workspace during consent; a single workspace is preselected. The connection keeps that workspace when tokens refresh. Removing or suspending the membership ends access without switching to another workspace. Tokens also require the email claim, MCP and API entitlements, and an active API allowance.
Use search_regulations for relevance-ranked natural-language discovery. Use query_regulations when the agent needs the same deterministic jurisdiction, authority, lifecycle, materiality, source and date dimensions exposed by GET /regulations. Both tools are published-only reads and neither can authorize delivery.
Use get_regulatory_coverage and get_regulatory_taxonomy before forming exact queries. Use get_regulation_versions or get_regulation_changes when an agent needs an auditable timeline rather than only the current row.
Before wiring a client, inspect https://xldyvilhtvxmfgtyjusb.supabase.co/functions/v1/partner-api/query-capabilities for the versioned filter and response-dimension contract, then use https://xldyvilhtvxmfgtyjusb.supabase.co/functions/v1/partner-api/openapi.json for the complete transport schema.
Outbound events
Outbound events use signed JSON envelopes and stable Atlas event ids. Use them when a customer-owned receiver should decide what to do next. Registering a webhook does not authorize Slack: the endpoint, subscribed event type, route policy, signature check, retry state and delivery receipt are separate controls.
Error handling
Protected routes fail closed without a valid scoped key, package entitlement and active allowance. Send a stable Idempotency-Key (or X-Request-Id) when retrying. Atlas returns the canonical request id and read-unit receipt in X-Atlas-* response headers.
Rate limits
Core defaults to 60 requests per minute with 15 immediately available burst tokens; Scale defaults to 120 per minute with 30 burst tokens. Contracted organization overrides can differ. Follow pagination.next_cursor until has_more is false and treat RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset and X-Atlas-Rate-Limit-Policy as the authoritative receipt.
Only API_RATE_LIMITED includes Retry-After. Read-unit exhaustion or a capped-overage decision is not transient and must not be retried as a rate limit. The official SDKs keep one X-Request-Id across bounded GET retries and never retry earlier than the server instructs.
