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

# Quickstart

> Take a test registration from name check to certificate.

You'll check a name, create a registration, upload documents, submit it and download the
certificate, all in test mode. Nothing here reaches CAC or costs anything.

## Before you start

Sign in at [developers.fastcac.com](https://developers.fastcac.com), create an organization, and
create a **test** API key. It starts with `fc_test_`. Keep it on your server: anyone with the key
can act for your organization.

```bash theme={null}
export FASTCAC_KEY="fc_test_..."
```

**1. Check that your key works**

```bash theme={null}
curl https://api.fastcac.com/v1/ping \
  -H "Authorization: Bearer $FASTCAC_KEY"
```

```json Response theme={null}
{
  "object": "ping",
  "organization": "org_5d6upqK9XmkRuRqhvEPMCI",
  "organization_name": "Bumpa",
  "api_key": "key_5axvqGwEnX6uXdNJoVSugK"
}
```

**2. Check the business name**

`line_of_business` must be one of the values from
[`GET /v1/lines-of-business`](https://docs.fastcac.com/guides/name-checks#line-of-business).

```bash curl theme={null}
curl https://api.fastcac.com/v1/name-checks \
  -H "Authorization: Bearer $FASTCAC_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Ada Foods Ventures", "line_of_business": "Educational Services And Consultancy"}'
```

```javascript Node.js theme={null}
const res = await fetch("https://api.fastcac.com/v1/name-checks", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.FASTCAC_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    name: "Ada Foods Ventures",
    line_of_business: "Educational Services And Consultancy",
  }),
});
const check = await res.json();
```

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

check = requests.post(
    "https://api.fastcac.com/v1/name-checks",
    headers={"Authorization": f"Bearer {os.environ['FASTCAC_KEY']}"},
    json={"name": "Ada Foods Ventures", "line_of_business": "Educational Services And Consultancy"},
).json()
```

```json Response theme={null}
{
  "object": "name_check",
  "name": "ADA FOODS VENTURES",
  "line_of_business": "Educational Services And Consultancy",
  "available": true,
  "requires_certificate": false,
  "reason": null,
  "similarity_score": 12.5,
  "most_similar_name": null,
  "similar_names": [],
  "suggested_names": []
}
```

When `available` is `false`, `reason.code` says why. See [Name checks](https://docs.fastcac.com/guides/name-checks.md).

**3. Create the registration**

Send what you have; you can fill in the rest later with `PATCH`. Send an `Idempotency-Key` so a
retried request can't create two registrations.

```bash theme={null}
curl https://api.fastcac.com/v1/registrations \
  -H "Authorization: Bearer $FASTCAC_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-1182-create" \
  -d '{"external_id": "order-1182", "proposed_names": ["Ada Foods Ventures", "Ada Kitchen Ventures"], "line_of_business": "Educational Services And Consultancy", "business": {"email": "hello@adafoods.ng", "phone": "08031234567", "address": {"street_number": "12", "street": "Admiralty Way", "city": "Lekki", "lga": "Eti-Osa", "state": "Lagos", "postcode": "105102"}}, "proprietors": [{"first_name": "Ada", "last_name": "Obi", "gender": "female", "date_of_birth": "1990-04-12", "nationality": "Nigerian", "nin": "12345678901", "email": "ada@example.com", "phone": "08031234567", "address": {"street_number": "12", "street": "Admiralty Way", "city": "Lekki", "lga": "Eti-Osa", "state": "Lagos", "postcode": "105102"}}]}'
```

```json Response (201) theme={null}
{
  "object": "registration",
  "id": "reg_1G7StLhyz24vL6sB5eC64K",
  "business_id": "biz_1bIJpSFM4oxl6bkou74oob",
  "external_id": "order-1182",
  "type": "business_name",
  "status": "draft",
  "proposed_names": [
    "ADA FOODS VENTURES",
    "ADA KITCHEN VENTURES"
  ],
  "line_of_business": "Educational Services And Consultancy",
  "business": {
    "email": "hello@adafoods.ng",
    "phone": "08031234567",
    "address": {
      "street_number": "12",
      "street": "Admiralty Way",
      "city": "Lekki",
      "lga": "Eti-Osa",
      "state": "Lagos",
      "postcode": "105102"
    }
  },
  "proprietors": [
    {
      "first_name": "Ada",
      "last_name": "Obi",
      "other_names": null,
      "gender": "female",
      "date_of_birth": "1990-04-12",
      "nationality": "Nigerian",
      "nin": "12345678901",
      "email": "ada@example.com",
      "phone": "08031234567",
      "address": {
        "street_number": "12",
        "street": "Admiralty Way",
        "city": "Lekki",
        "lga": "Eti-Osa",
        "state": "Lagos",
        "postcode": "105102"
      }
    }
  ],
  "missing_fields": [],
  "query": null,
  "failure": null,
  "registered_name": null,
  "registration_number": null,
  "certificate_available": false,
  "status_report_available": false,
  "history": [
    {
      "from": null,
      "to": "draft",
      "at": "2026-10-23T22:06:48Z"
    }
  ],
  "submitted_at": null,
  "approved_at": null,
  "created_at": "2026-10-23T22:06:48Z",
  "updated_at": "2026-10-23T22:06:48Z"
}
```

`missing_fields` lists what's still needed before you can submit. Here it's empty.

**4. Upload the documents**

Each proprietor needs a `means_of_id`, a `passport` photograph and a `signature`. Upload them as
multipart form data.

```bash theme={null}
for kind in means_of_id passport signature; do
  curl https://api.fastcac.com/v1/registrations/$REG_ID/documents \
    -H "Authorization: Bearer $FASTCAC_KEY" \
    -F kind=$kind -F proprietor=0 -F file=@$kind.jpg
done
```

```json Response (201) theme={null}
{
  "object": "document",
  "id": "doc_1f3vn4z6FzDYjcbdUYUVtK",
  "registration_id": "reg_5iLOZvP27DZ2zDQTjOzY1O",
  "proprietor": 0,
  "kind": "passport",
  "filename": "passport.jpg",
  "content_type": "image/jpeg",
  "size": 8,
  "status": "verified",
  "reason": null,
  "created_at": "2026-10-23T22:06:51Z"
}
```

**5. Submit**

```bash theme={null}
curl -X POST https://api.fastcac.com/v1/registrations/$REG_ID/submit \
  -H "Authorization: Bearer $FASTCAC_KEY"
```

The registration moves to `pending_payment`. In test mode, mark it paid with the test helper:

```bash theme={null}
curl https://api.fastcac.com/v1/test/registrations/$REG_ID/advance \
  -H "Authorization: Bearer $FASTCAC_KEY" \
  -H "Content-Type: application/json" \
  -d '{"to": "paid"}'
```

After payment FastCAC checks the proprietor's identity and files with CAC, so the registration
comes back `submitted`. In test mode CAC's decision arrives about 60 seconds later. To skip the
wait, advance it to `approved`:

```bash theme={null}
curl https://api.fastcac.com/v1/test/registrations/$REG_ID/advance \
  -H "Authorization: Bearer $FASTCAC_KEY" \
  -H "Content-Type: application/json" \
  -d '{"to": "approved"}'
```

```json Response theme={null}
{
  "object": "registration",
  "id": "reg_1G7StLhyz24vL6sB5eC64K",
  "business_id": "biz_1bIJpSFM4oxl6bkou74oob",
  "external_id": "order-1182",
  "type": "business_name",
  "status": "approved",
  "proposed_names": [
    "ADA FOODS VENTURES",
    "ADA KITCHEN VENTURES"
  ],
  "line_of_business": "Educational Services And Consultancy",
  "business": {
    "email": "hello@adafoods.ng",
    "phone": "08039876543",
    "address": {
      "street_number": "12",
      "street": "Admiralty Way",
      "city": "Lekki",
      "lga": "Eti-Osa",
      "state": "Lagos",
      "postcode": "105102"
    }
  },
  "proprietors": [
    {
      "first_name": "Ada",
      "last_name": "Obi",
      "other_names": null,
      "gender": "female",
      "date_of_birth": "1990-04-12",
      "nationality": "Nigerian",
      "nin": "12345678901",
      "email": "ada@example.com",
      "phone": "08031234567",
      "address": {
        "street_number": "12",
        "street": "Admiralty Way",
        "city": "Lekki",
        "lga": "Eti-Osa",
        "state": "Lagos",
        "postcode": "105102"
      }
    }
  ],
  "missing_fields": [],
  "query": null,
  "failure": null,
  "registered_name": "ADA FOODS VENTURES",
  "registration_number": "4818873",
  "certificate_available": true,
  "status_report_available": true,
  "history": [
    {
      "from": null,
      "to": "draft",
      "at": "2026-10-23T22:06:48Z"
    },
    {
      "from": "draft",
      "to": "pending_payment",
      "at": "2026-10-23T22:06:49Z"
    },
    {
      "from": "pending_payment",
      "to": "paid",
      "at": "2026-10-23T22:06:49Z"
    },
    {
      "from": "paid",
      "to": "submitted",
      "at": "2026-10-23T22:06:49Z"
    },
    {
      "from": "submitted",
      "to": "approved",
      "at": "2026-10-23T22:06:49Z"
    }
  ],
  "submitted_at": "2026-10-23T22:06:49Z",
  "approved_at": "2026-10-23T22:06:49Z",
  "created_at": "2026-10-23T22:06:48Z",
  "updated_at": "2026-10-23T22:06:49Z"
}
```

**6. Download the certificate**

```bash theme={null}
curl https://api.fastcac.com/v1/registrations/$REG_ID/certificate \
  -H "Authorization: Bearer $FASTCAC_KEY" -o certificate.pdf
```

In test mode it's a sample PDF marked "SANDBOX - NOT A CAC DOCUMENT". The status report is at
`/status-report`.

## Next

> **[Handle every outcome](https://docs.fastcac.com/test-mode.md)**
>
> Make a registration get queried, rejected or fail verification, on purpose.

> **[Listen for changes](https://docs.fastcac.com/webhooks/overview.md)**
>
> Get a webhook when a registration is approved instead of polling.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.