> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getcurrent.ca/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart

> Make your first API call in under 5 minutes

## 1. Get an API key

Go to [API Keys](https://app.getcurrent.ca/api-keys) and generate a key. It will look like `cur_live_xxxxxxxxxxxx`.

## 2. Run a search

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://api.getcurrent.ca/v1/search \
    -H "Authorization: Bearer cur_live_xxxxxxxxxxxx" \
    -H "Content-Type: application/json" \
    -d '{"name": "Shopify Inc"}'
  ```

  ```python Python theme={null}
  import requests

  response = requests.post(
      "https://api.getcurrent.ca/v1/search",
      headers={"Authorization": "Bearer cur_live_xxxxxxxxxxxx"},
      json={"name": "Shopify Inc"},
  )
  data = response.json()
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch('https://api.getcurrent.ca/v1/search', {
    method: 'POST',
    headers: {
      Authorization: 'Bearer cur_live_xxxxxxxxxxxx',
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ name: 'Shopify Inc' }),
  })
  if (!response.ok) throw new Error(`HTTP ${response.status}`)
  const data = await response.json()
  ```

  ```go Go theme={null}
  package main

  import (
      "bytes"
      "encoding/json"
      "fmt"
      "log"
      "net/http"
  )

  func main() {
      body, err := json.Marshal(map[string]string{"name": "Shopify Inc"})
      if err != nil {
          log.Fatal(err)
      }

      req, err := http.NewRequest("POST", "https://api.getcurrent.ca/v1/search", bytes.NewBuffer(body))
      if err != nil {
          log.Fatal(err)
      }
      req.Header.Set("Authorization", "Bearer cur_live_xxxxxxxxxxxx")
      req.Header.Set("Content-Type", "application/json")

      resp, err := http.DefaultClient.Do(req)
      if err != nil {
          log.Fatal(err)
      }
      defer resp.Body.Close()

      var result map[string]any
      if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
          log.Fatal(err)
      }
      fmt.Printf("status: %s\n", resp.Status)
      fmt.Printf("searchId: %v\n", result["meta"].(map[string]any)["searchId"])
  }
  ```
</CodeGroup>

<Note>
  Searches typically take **20–40 seconds** to complete. The business registry
  lookup is the bottleneck.
</Note>

## 3. Read the response

A successful response returns a JSON object with several top-level sections:

```json theme={null}
{
  "meta": {
    "searchId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "searchedBy": "user@example.com",
    "searchedAt": "2024-01-15T10:30:00Z",
    "submitted": {
      "name": "Shopify Inc",
      "website": null,
      "params": {
        "businessRegistry": true,
        "regulatoryRegistry": true,
        "sanctionsScreening": false,
        "sanctionsThreshold": 85,
        "websiteAnalysis": false
      }
    },
    "status": "completed",
    "duration": 24318
  },
  "businesses": [
    {
      "legalName": { "name": "Shopify Inc.", "matchScore": 0.98 },
      "jurisdiction": "Federal",
      "status": "Active",
      "incorporationDate": "2011-09-14",
      "registrationNumbers": [
        { "label": "Federal Corporation Number", "value": "796223-2" }
      ]
    }
  ],
  "regulatory": {
    "craCharities": [],
    "fintracMsb": [],
    "agcoCannabis": [],
    "healthCanadaCannabis": [],
    "mohServiceProviders": []
  },
  "sanctions": null,
  "website": null,
  "errors": null
}
```

| Field            | Description                                                              |
| ---------------- | ------------------------------------------------------------------------ |
| `meta.searchId`  | Save this to retrieve the result later via `GET /search/{id}`            |
| `meta.submitted` | Your original query and the parameters used (with defaults applied)      |
| `meta.status`    | `completed`, `completed-with-errors`, `error`, or `loading`              |
| `businesses`     | Registry matches, sorted by confidence score                             |
| `regulatory`     | Charity, MSB, cannabis, health service provider, and other registrations |
| `sanctions`      | Sanctions matches (null when screening not enabled)                      |
| `website`        | Website analysis results (null when not enabled)                         |
| `errors`         | Per-source errors (null when all sources succeeded)                      |

## Next steps

<CardGroup cols={2}>
  <Card title="Authentication" icon="key" href="/authentication">
    Learn about API key formats and best practices
  </Card>

  <Card title="Search guide" icon="magnifying-glass" href="/guides/searching">
    Explore all search parameters and what they return
  </Card>

  <Card title="Sanctions screening" icon="shield-halved" href="/guides/sanctions-screening">
    Add global watchlist screening to your searches
  </Card>

  <Card title="Response structure" icon="brackets-curly" href="/concepts/response-structure">
    Full reference for every field in the response
  </Card>
</CardGroup>
