diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 29a084ea..7adca837 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -8,6 +8,10 @@
/web/site/content/en-CA/products/bn @thorwolpert
/web/site/public/bn @thorwolpert
+## SBC Connect
+/web/site/content/en-CA/products/connect @thorwolpert @deetz99 @pwei1018 @bolyachevets @seeker25 @jxio @ochiu
+/web/site/public/connect @thorwolpert @deetz99 @pwei1018 @bolyachevets @seeker25 @jxio @ochiu
+
## MHR - Manufactured Home Registry
/web/site/content/en-CA/products/mhr @doug-lovett
/web/site/public/mhr @doug-lovett
diff --git a/web/site/app/tests/unit/utils/createContentNav.test.ts b/web/site/app/tests/unit/utils/createContentNav.test.ts
index f19d4192..12d7039b 100644
--- a/web/site/app/tests/unit/utils/createContentNav.test.ts
+++ b/web/site/app/tests/unit/utils/createContentNav.test.ts
@@ -56,6 +56,16 @@ const initialNavItems = [
]
const formattedNavItems = [
+ {
+ children: [
+ { label: 'Overview', to: '/en-CA/products/br/overview' },
+ { label: 'Api', to: '/en-CA/products/br/api' },
+ { label: 'Examples', to: '/en-CA/products/br/examples' },
+ { label: 'Contact', to: '/en-CA/products/br/contact' }
+ ],
+ defaultOpen: true,
+ label: 'Business Registry'
+ },
{
children: [
{ label: 'Account Setup', to: '/en-CA/products/get-started/account-setup' },
@@ -67,15 +77,6 @@ const formattedNavItems = [
],
defaultOpen: true,
label: 'Get Started'
- }, {
- children: [
- { label: 'Overview', to: '/en-CA/products/br/overview' },
- { label: 'Api', to: '/en-CA/products/br/api' },
- { label: 'Examples', to: '/en-CA/products/br/examples' },
- { label: 'Contact', to: '/en-CA/products/br/contact' }
- ],
- defaultOpen: true,
- label: 'Business Registry'
}
]
diff --git a/web/site/app/utils/createContentNav.ts b/web/site/app/utils/createContentNav.ts
index c2fef91b..cadb0cca 100644
--- a/web/site/app/utils/createContentNav.ts
+++ b/web/site/app/utils/createContentNav.ts
@@ -18,6 +18,8 @@ export function createContentNav (navItems: NavItem[] | undefined) {
}
})
}
+ }).sort((a, b) => {
+ return a.label?.localeCompare(b.label) // sort accordian items alphabetically
})
}) as AccordianNavItem[]
}
diff --git a/web/site/content/en-CA/products/1.get-started/1.account-setup.md b/web/site/content/en-CA/products/1.get-started/1.account-setup.md
index e7e68a85..632e7a5c 100644
--- a/web/site/content/en-CA/products/1.get-started/1.account-setup.md
+++ b/web/site/content/en-CA/products/1.get-started/1.account-setup.md
@@ -8,7 +8,7 @@ description: 'Learn how to setup and begin using BC Registries Services and APIs
Start using Service BC Connect application programming interfaces (APIs) by following these steps:
1. Review the specifications in the Service BC Connect [API list](/products/get-started/apis-summary) and read the specifications to find the API(s) that meet your needs.
-2. [Set up an account](https://www2.gov.bc.ca/gov/content/employment-business/business/managing-a-business/permits-licences/news-updates/modernization-updates/modernization-resources#setupacct). You will need a BC Registries and Online Services premium account, with Pre-Authorized Debit (PAD) as the payment option before you can request access. If you already have an account, proceed to the next step.
+2. [Set up an account](https://www2.gov.bc.ca/gov/content/employment-business/business/managing-a-business/permits-licences/news-updates/modernization-updates/modernization-resources#setupacct). You will need a BC Registries and Online Services account in the sandbox environment (BC Services Card users can create accounts right away, BCEID requires Staff approval) before you can request access. If you already have a sandbox account, proceed to the next step.
3. Download, review and sign the API Terms of Use for the products you want to use:
- API Terms of Use for all products except Short-Term Rental Registry
- API Terms of Use for Short-Term Rental Registry
@@ -19,14 +19,15 @@ Start using Service BC Connect application programming interfaces (APIs) by foll
- In the body of the email, include your BC Registries and Online Services account number, along with your company’s account administrator’s name and email address.
5. Upon completion of the access request, you will be issued with a sandbox environment API key with the appropriate access. They will be made available to you via your Account Administrator's BC Registries account dashboard.
6. Validate your API key credentials by initiating a connection to the Sandbox environment. Also, test your API queries/calls in the Sandbox. Note that no fees will be charged for sandbox API keys or test transactions in the Sandbox environment only.
-7. After completing your testing, email a request for keys to BC Registries Production Environment.
+7. Ensure you have a production account, if not create one in the production environment (note BC Services Card will work right away, BCEID requires uploading an affidavit and approval from Staff):
+8. After completing your testing, email a request for keys to BC Registries Production Environment.
- Email your request for a production environment API key to **bcregistries@gov.bc.ca**.
- Subject: Request for Service BC Connect API Production keys
- In the body of your email, include your BC Registries account number, name and email of your account administrator.
-8. You will be issued with a production environment API key in your Account Dashboard in the BC Registry application which can be accessed by your Account Administrator(s).
-9. Use the API key for your queries and submission of data. Review the [Detailed API documentation](/products/get-started/apis-summary) for more information about how the APIs work.
-10. Post your technical questions and join discussions in the BC Discourse forum and be sure to watch for any announcements on API outages or new features being released.
-11. Attend the BC Registries API User Group meetings to get updates on specifications and releases or to discuss technical questions with developers. Email BCReg.engagement@gov.bc.ca to request a meeting invitation.
+9. You will be issued with a production environment API key in your Account Dashboard in the BC Registry application which can be accessed by your Account Administrator(s).
+10. Use the API key for your queries and submission of data. Review the [Detailed API documentation](/products/get-started/apis-summary) for more information about how the APIs work.
+11. Post your technical questions and join discussions in the BC Discourse forum and be sure to watch for any announcements on API outages or new features being released.
+12. Attend the BC Registries API User Group meetings to get updates on specifications and releases or to discuss technical questions with developers. Email BCReg.engagement@gov.bc.ca to request a meeting invitation.
Questions? View our [About APIs](/products/get-started/about#frequently-asked-questions).
diff --git a/web/site/content/en-CA/products/1.get-started/2.apis-summary.md b/web/site/content/en-CA/products/1.get-started/2.apis-summary.md
index 94d9d1ec..06f2ddec 100644
--- a/web/site/content/en-CA/products/1.get-started/2.apis-summary.md
+++ b/web/site/content/en-CA/products/1.get-started/2.apis-summary.md
@@ -19,6 +19,7 @@ Click on the Short Name to see more.
| Short Name | Description |
| --------------------------------------- | ------------------------------- |
+| [SBC Connect (formerly Auth)](/products/connect/overview) | SBC Connect Api (formerly Auth Api) |
| [Pay](/products/pay/overview) | Pay Api |
| [PPR](/products/ppr/overview) | Personal Property Registry API |
| [Business](/products/br/overview) | Business Registry API |
@@ -261,7 +262,10 @@ Updates of note to this page are recorded here.
Removed versions from the List of APIs table. Refer to the respective API's Version History section for version information.
Removed Mock from the Environments table.
Removed the Analytics Reports section.
- Updated the Environments table SANDBOX and PRODCUCTION Base URLs.
+ Updated the Environments table SANDBOX and PRODUCTION Base URLs.
+ |
+ 2025-04-03 |
+ Added SBC Connect.
|
diff --git a/web/site/content/en-CA/products/connect/card.yml b/web/site/content/en-CA/products/connect/card.yml
index ec63080c..cbff89d6 100644
--- a/web/site/content/en-CA/products/connect/card.yml
+++ b/web/site/content/en-CA/products/connect/card.yml
@@ -1,7 +1,10 @@
# Used to populate product card components
-name: Product Name Here
-description: Product Description Here
-badge: NEW | BETA etc
+name: SBC Connect
+description: Provides authentication/authorization services for the SBC Connect platform
+badge: Stable
bulletPoints:
- - bullet point 1
- - bullet point 2
\ No newline at end of file
+ - Create an account
+ - Manage account products
+ - Manage admin/coordinator/users
+ - Manage affiliations
+ - View API keys
diff --git a/web/site/content/en-CA/products/connect/overview.md b/web/site/content/en-CA/products/connect/overview.md
index 475d00b7..a6fb4853 100644
--- a/web/site/content/en-CA/products/connect/overview.md
+++ b/web/site/content/en-CA/products/connect/overview.md
@@ -1,10 +1,97 @@
---
title: 'Overview'
-description: 'SBC Connect Overview'
+description: 'SBC Connect API'
---
-# SBC Connect
+# SBC Connect API
---
-## Overview
\ No newline at end of file
+## Overview
+
+SBC Connect API (former Auth API) is a centralized authorization and authentication system designed to manage secure access across all partner applications. It ensures seamless user verification, enforces access controls, and protects sensitive resources through robust authentication mechanisms. By integrating with SBC Connect, partner apps can leverage a unified security framework, simplifying user management while maintaining compliance and security best practices.
+
+This specification focuses on creating business affiliations:
+- By passcode
+- By magic link
+- By delegation
+
+
+More to be added in the future.
+
+
+::ButtonDownloadSpec{href="/connect/connect-spec.yaml" download="connect-spec.yaml"}
+::
+
+
+
+
+**Note:** All requests must include a **BC Registries issued API key** and an **Account ID**.
+
+---
+
+## View the API
+
+View the definition and select a path to try it out. To submit a request you will need an API key and an account ID, which are obtained as part of completing an access request. To set your session API key, click on the top, right AUTHORIZE button and under API Key Auth enter your key value. Click on AUTHORIZE, then OK.
+
+ View the API
+
+
+
+## Date and Date Time Formats
+
+
+
+ Type |
+ Format |
+ Example |
+
+
+ Date |
+ YYYY-MM-DD |
+ 2020-05-14 |
+
+
+ DateTime |
+ YYYY-MM-DDThh:mm:ss[Z|+hh:mm]. Either +hh:mm (the time zone offset) or Z must be supplied. Default Z for Pacific time zone value. |
+ 2020-05-14T21:08:32Z |
+
+
+
+---
+
+## API Version History
+
+
+
+ Date |
+ Version |
+ Description |
+
+
+ 2025-04-11 |
+ 1.0.0 |
+ Initial version |
+
+
+
+---
+
+## Additional Resources
+
+Postman collection of these calls is included in the [Business Registry](/products/br/overview) postman collection.
+
+## Page History
+
+Updates of note to this page are recorded here.
+
+
+
+ Date |
+ Description |
+
+
+ 2025-04-03 |
+ Initial version |
+
+
diff --git a/web/site/content/en-CA/products/pay/card.yml b/web/site/content/en-CA/products/pay/card.yml
index e15415a7..a1038990 100644
--- a/web/site/content/en-CA/products/pay/card.yml
+++ b/web/site/content/en-CA/products/pay/card.yml
@@ -1,8 +1,8 @@
# Used to populate product card components
name: Platform Payment and Catalog Services
-description: The payment and catalog services for the sbc-connect platform
-badge: BETA
+description: The payment and catalog services for the SBC Connect platform
+badge: Stable
bulletPoints:
- Pay for a service
- Register services in the Catalog
- - Transaction history
\ No newline at end of file
+ - Transaction history
diff --git a/web/site/nuxt.config.ts b/web/site/nuxt.config.ts
index aa3e1ffc..d21a9423 100644
--- a/web/site/nuxt.config.ts
+++ b/web/site/nuxt.config.ts
@@ -1,5 +1,6 @@
// https://nuxt.com/docs/api/configuration/nuxt-config
import type { BreadcrumbLink } from '#ui/types'
+const localScalarUrl = process.env.NODE_ENV === 'development' ? 'http://localhost:3000' : ''
export default defineNuxtConfig({
devtools: { enabled: false },
ssr: true,
@@ -75,7 +76,6 @@ export default defineNuxtConfig({
'web-component',
'/sbc/tos',
'/products/bn',
- 'products/connect',
'/1.get-started/3.api-access-request.md'
]
},
@@ -94,7 +94,7 @@ export default defineNuxtConfig({
configurations: [
{
spec: {
- url: '/strr/platform.yaml'
+ url: `${localScalarUrl}/strr/platform.yaml`
},
pathRouting: {
basePath: '/oas/strr'
@@ -102,7 +102,15 @@ export default defineNuxtConfig({
},
{
spec: {
- url: '/br/business-spec.yaml'
+ url: `${localScalarUrl}/connect/connect-spec.yaml`
+ },
+ pathRouting: {
+ basePath: '/oas/connect'
+ }
+ },
+ {
+ spec: {
+ url: `${localScalarUrl}/br/business-spec.yaml`
},
pathRouting: {
basePath: '/oas/br'
@@ -110,7 +118,7 @@ export default defineNuxtConfig({
},
{
spec: {
- url: '/mhr/mhr-spec.yaml'
+ url: `${localScalarUrl}/mhr/mhr-spec.yaml`
},
pathRouting: {
basePath: '/oas/mhr'
@@ -118,7 +126,7 @@ export default defineNuxtConfig({
},
{
spec: {
- url: '/pay/payment-spec.yaml'
+ url: `${localScalarUrl}/pay/payment-spec.yaml`
},
pathRouting: {
basePath: '/oas/pay'
@@ -126,7 +134,7 @@ export default defineNuxtConfig({
},
{
spec: {
- url: '/ppr/ppr-spec.yaml'
+ url: `${localScalarUrl}/ppr/ppr-spec.yaml`
},
pathRouting: {
basePath: '/oas/ppr'
@@ -134,7 +142,7 @@ export default defineNuxtConfig({
},
{
spec: {
- url: '/rs/regsearch-spec.yaml'
+ url: `${localScalarUrl}/rs/regsearch-spec.yaml`
},
pathRouting: {
basePath: '/oas/rs'
diff --git a/web/site/package.json b/web/site/package.json
index 7733485d..bd80d8a3 100644
--- a/web/site/package.json
+++ b/web/site/package.json
@@ -2,7 +2,7 @@
"name": "developer-connect-site",
"private": true,
"type": "module",
- "version": "1.1.5",
+ "version": "1.1.6",
"scripts": {
"build-check": "nuxt build",
"build": "nuxt generate",
@@ -50,5 +50,5 @@
"firebase-functions": "^4.9.0",
"vuefire": "^3.1.24"
},
- "packageManager": "pnpm@8.7.6+sha1.a428b12202bc4f23b17e6dffe730734dae5728e2"
+ "packageManager": "pnpm@10.10.0"
}
diff --git a/web/site/public/connect/connect-spec.yaml b/web/site/public/connect/connect-spec.yaml
new file mode 100644
index 00000000..d8da6fde
--- /dev/null
+++ b/web/site/public/connect/connect-spec.yaml
@@ -0,0 +1,1187 @@
+openapi: 3.0.1
+info:
+ title: SBC Connect API former Auth API
+ description: |-
+ SBC Connect API is used to manage the SBC Connect accounts. The system manages the authorizations related data and does integration with keycloak. This specification focuses on documentating the relationship between an account and a entity (Name Request/Business). There are three different methods - Passcode, Magic Link, Delegation.
+
+ All API requests must include an issued API key.
+ version: 1.0.2
+ contact:
+ name: BC Registries
+ license:
+ name: Apache 2.0
+paths:
+ /auth/api/v1/orgs/affiliation/{business_identifier}:
+ parameters:
+ - name: business_identifier
+ in: path
+ description: Business identifier
+ required: true
+ schema:
+ type: string
+ get:
+ summary: Get accounts that have affiliations for business identifier
+ description: Used as part of the affiliation invitation toOrgUuid payload delegations only.
+ tags:
+ - Passcode / Magic link / Delegation prerequisites
+ responses:
+ '200':
+ description: Success
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ orgsDetails:
+ type: array
+ items:
+ type: object
+ properties:
+ branchName:
+ type: string
+ example: "Downtown"
+ name:
+ type: string
+ example: "ICBC PROPERTIES LTD."
+ uuid:
+ type: string
+ format: uuid
+ example: "e50a83f6-606d-42b6-a7cf-54555af76037"
+ required:
+ - branchName
+ - name
+ - uuid
+ '401':
+ description: Not Authorized
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ code:
+ type: string
+ description: Identifier representing the type of error that occurred.
+ message:
+ type: string
+ description: Description of the error.
+ '404':
+ description: Business not found
+ /auth/api/v1/entities/{business_identifier}/authentication:
+ parameters:
+ - name: business_identifier
+ in: path
+ description: Business identifier
+ required: true
+ schema:
+ type: string
+ get:
+ responses:
+ '200':
+ description: Success
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ contactEmail:
+ type: string
+ description: Masked contact email of entity
+ example: he***@me********
+ hasValidPassCode:
+ type: boolean
+ description: If the entity has a valid passcode that isn't consumed
+ example: true
+ '401':
+ description: Not Authorized
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ code:
+ type: string
+ description: Identifier representing the type of error that occurred.
+ message:
+ type: string
+ description: Description of the error.
+ '403':
+ description: Not Authorized
+ '404':
+ description: Business not found
+
+ tags:
+ - Passcode / Magic link / Delegation prerequisites
+ operationId: get_entity_authentication
+ summary: Get entity authentication
+ description: Get entity authentication to see if the entity has passcode or magic link email available.
+ /auth/api/v1/orgs/{account_id}/affiliations/{business_identifier}:
+ get:
+ summary: Get affiliations for entity
+ tags:
+ - Affiliations
+ parameters:
+ - name: account_id
+ in: path
+ required: true
+ schema:
+ type: integer
+ - name: business_identifier
+ in: path
+ required: true
+ schema:
+ type: string
+ responses:
+ '200':
+ description: Successful response with affiliation details
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/AffiliationResponse'
+ '400':
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ type: object
+ additionalProperties: true
+ properties:
+ code:
+ type: string
+ example: DATA_ALREADY_EXISTS
+ message:
+ type: string
+ example: The data you want to insert already exists.
+ '401':
+ description: Not Authorized
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ code:
+ type: string
+ description: Identifier representing the type of error that occurred.
+ message:
+ type: string
+ description: Description of the error.
+ '403':
+ description: Not Authorized
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ code:
+ type: string
+ description: Identifier representing the type of error that occurred.
+ message:
+ type: string
+ description: Description of the error.
+ '404':
+ description: Business not found
+ /auth/api/v1/entities/{business_identifier}/contacts:
+ put:
+ tags:
+ - Passcode / Magic link / Delegation prerequisites
+ summary: Update contact information for a business entity
+ description: For updating the contact information for a business entity so magic link will work (email needs to be present). An existing affiliation must be present for this to work.
+ parameters:
+ - name: business_identifier
+ in: path
+ description: Business identifier
+ required: true
+ schema:
+ type: string
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ email:
+ type: string
+ required: true
+ description: "email for entity contact"
+ format: email
+ example: hello@mellow.com
+ phone:
+ type: string
+ required: true
+ description: "phone for entity contact"
+ example: "(437) 887-5267"
+ phoneExtension:
+ type: string
+ required: true
+ example: ""
+
+ responses:
+ '200':
+ description: Contact information updated successfully
+ '400':
+ description: Bad Request
+ '401':
+ description: Not Authorized
+ '403':
+ description: Not Authorized (missing affiliation)
+ '404':
+ description: Business not found
+ # Rajandeep please update this.
+ # /auth/api/v1/orgs/{account_id}/affiliations/search:
+ # tags:
+ # - Passcode / Magic link / Delegation prerequisites
+ # get:
+ # summary: Get affiliations for account (search endpoint, WIP)
+ # description: The Business Dashboard calls get affiliations via search for account. This will change in the near future to include pagination. Request Parameters and response likely to change. This is a WIP and is likely broken, it calls into NAMES and LEAR to build it's data. I wouldn't recommend using this route for now, use the /{account_id}/affiliations route instead.
+ # tags:
+ # - Affiliations
+ # responses:
+ # '200':
+ # description: Successful
+ # content:
+ # application/json:
+ # schema:
+ # $ref: '#/components/schemas/AffiliationSearchResponse'
+ # '401':
+ # description: Not Authorized
+ # '403':
+ # description: Not Authorized (missing affiliation)
+ # '404':
+ # description: Business not found
+ /auth/api/v1/orgs/{account_id}/affiliations:
+ parameters:
+ - name: account_id
+ in: path
+ description: account id
+ required: true
+ schema:
+ type: integer
+ tags:
+ - Passcode / Magic link / Delegation prerequisites
+ summary: Get entity authentication
+ description: Get entity authentication to see if the entity has passcode or magic link email available.
+ get:
+ summary: Get affiliations for account
+ description: This is an older version (doesn't call into Names / LEAR for business information like our search endpoint that is WIP) of the affiliation endpoint that should be working.
+ tags:
+ - Affiliations
+ responses:
+ '200':
+ description: Successful
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/AffiliationOrgResponse'
+ '401':
+ description: Not Authorized
+ '403':
+ description: Not Authorized (missing affiliation)
+ '404':
+ description: Business not found
+ post:
+ summary: Create a new business affiliation (via Passcode)
+ operationId: post-affiliation
+ tags:
+ - Affiliations
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/AffiliationByPasscodeRequest'
+ examples:
+ bc-ben-passcode:
+ summary: Example for BC/BEN where the passcode is a phrase
+ value:
+ businessIdentifier: "BC1234567"
+ certifiedByName: ""
+ passcode: "passcode"
+ sp-gp-passcode:
+ summary: Example for SP/GP passcode is an officer of the company
+ value:
+ businessIdentifier: "FM1004308"
+ certifiedByName: ""
+ passcode: "Doug, Funny B"
+ sp-gp-passcode-organization:
+ summary: Example for SP/GP the passcode is organization of the company
+ value:
+ businessIdentifier: "FM1004308"
+ certifiedByName: ""
+ passcode: "Lawyers Organization"
+ responses:
+ '200':
+ description: Affiliation successfully created
+ '400':
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ type: object
+ additionalProperties: true
+ properties:
+ code:
+ type: string
+ example: DATA_ALREADY_EXISTS
+ message:
+ type: string
+ example: The data you want to insert already exists.
+ '401':
+ description: Not Authorized
+ '403':
+ description: Not Authorized
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ code:
+ type: string
+ description: Identifier representing the type of error that occurred.
+ message:
+ type: string
+ description: Description of the error.
+ /auth/api/v1/affiliationInvitations:
+ get:
+ parameters:
+ - name: businessDetails
+ in: query
+ schema:
+ type: string
+ default: 'false'
+ description: Flag to indicate if business details should be included
+ - name: orgId
+ in: query
+ schema:
+ type: string
+ description: Organization identifier
+ - name: businessIdentifier
+ in: query
+ schema:
+ type: string
+ description: Business identifier
+ - name: fromOrgId
+ in: query
+ schema:
+ type: string
+ description: Source organization identifier
+ - name: toOrgId
+ in: query
+ schema:
+ type: string
+ description: Target organization identifier
+ - name: statuses
+ in: query
+ schema:
+ type: array
+ items:
+ type: string
+ description: Status codes to filter invitations
+ explode: true
+ - name: types
+ in: query
+ schema:
+ type: array
+ items:
+ type: string
+ description: Invitation types to filter
+ explode: true
+ responses:
+ '200':
+ description: Success
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ affiliationInvitations:
+ type: array
+ items:
+ $ref: '#/components/schemas/AffiliationInvitationResponse'
+ '401':
+ description: Not Authorized
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ code:
+ type: string
+ description: Identifier representing the type of error that occurred.
+ message:
+ type: string
+ description: Description of the error.
+ '403':
+ description: Not Authorized
+ operationId: get_affiliation_invitations
+ tags:
+ - Affiliation Invitation (Magic Link / Delegation)
+ summary: Get affiliation invitations
+ description: |-
+ An example of the business dashboard fetching affiliation invitations for an account (outgoing requests Magic Link and Delegation, includes business details):
+ ?orgId=574&businessDetails=true
+
+ An example of the business landing page fetching affiliation invitations (incoming delegation requests):
+ ?toOrgId=1923&businessIdentifier=FM1000334&statuses=PENDING
+ post:
+ responses:
+ '201':
+ description: Created
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/AffiliationInvitationCreateResponse'
+ '400':
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ code:
+ type: string
+ description: Identifier representing the type of error that occurred.
+ example: INVALID_BUSINESS_EMAIL
+ message:
+ type: string
+ description: Description of the error.
+ example: Business contact email not valid.
+ '401':
+ description: Unauthorized
+ '403':
+ description: Unauthorized
+ operationId: post_affiliation_invitation
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/AffiliationInvitationRequest'
+ examples:
+ magic-link:
+ summary: magic link request
+ value:
+ fromOrgId: 574
+ businessIdentifier: 'FM1004378'
+ delegation-request:
+ summary: delegation request
+ value:
+ fromOrgId: 2821
+ toOrgUuid: 'e50a83f6-606d-42b6-a7cf-76206af76037'
+ businessIdentifier: 'FM1004377'
+ type: 'REQUEST'
+ additionalMessage: 'requesting delegation owner sees this'
+ tags:
+ - Affiliation Invitation (Magic Link / Delegation)
+ summary: Create new affiliation invitation
+ description: |-
+ Can create two affiliation invitations using two methods:
+ - Magic Link
+ - Delegation
+
+ They both have different payloads included in the examples.
+ Passcode is affiliated by directly creating an affiliation.
+ /auth/api/v1/affiliationInvitations/{affiliation_invitation_id}:
+ parameters:
+ - name: affiliation_invitation_id
+ in: path
+ description: Affiliation invitation identifier
+ required: true
+ schema:
+ type: string
+ get:
+ responses:
+ '200':
+ description: Success
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/AffiliationInvitationResponse'
+ '400':
+ description: Bad Request
+ '401':
+ description: Not Authorized
+ '403':
+ description: Not Authorized
+ '404':
+ description: Not Found
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ message:
+ type: string
+ description: Description of the error.
+ operationId: get_affiliation_invitation
+ tags:
+ - Affiliation Invitation (Magic Link / Delegation)
+ summary: Get affiliation invitation by id
+ description: Get a specific affiliation invitation by id.
+ patch:
+ responses:
+ '200':
+ description: Success
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/AffiliationInvitationResponse'
+ '404':
+ description: Not Found
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ message:
+ type: string
+ description: Description of the error.
+ operationId: patch_AffiliationInvitation
+ requestBody:
+ content:
+ application/json:
+ tags:
+ - Affiliation Invitation (Magic Link / Delegation)
+ summary: Update the affiliation invitation (Magic Link only)
+ description: Update the affiliation invitation specified by the provided id. EG. resending the Magic Link if it expired. Only works on PENDING invitations.
+ delete:
+ responses:
+ '200':
+ description: Success
+ '401':
+ description: Not Authorized
+ '403':
+ description: Not Authorized
+ '404':
+ description: Not Found
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ code:
+ type: string
+ description: Identifier representing the type of error that occurred.
+ message:
+ type: string
+ description: Description of the error.
+ operationId: delete_affiliation_invitation
+ tags:
+ - Affiliation Invitation (Magic Link / Delegation)
+ summary: Delete the affiliation invitation
+ description: Delete the specified affiliation invitation. Soft delete if it's already accepted.
+ /auth/api/v1/affiliationInvitations/{affiliation_invitation_id}/token/{token}:
+ parameters:
+ - name: affiliation_invitation_id
+ in: path
+ description: Affiliation invitation identifier
+ required: true
+ schema:
+ type: integer
+ example: 234
+ - name: token
+ in: path
+ description: Invitation token from email or affiliationInvitation
+ required: true
+ schema:
+ type: string
+ example: "eyJpZCI6MTU4LCJmcm9tT3.aBkYkw.wKI2wUtP6pSdiuqJ9UoI4CmOiD4.........."
+ put:
+ responses:
+ '200':
+ description: Success
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/AffiliationInvitationResponse'
+ '401':
+ description: Not Authorized
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ message:
+ type: string
+ description: Description of the error.
+ '403':
+ description: Not Authorized
+ operationId: accept_affiliation_invitation_token
+ tags:
+ - Affiliation Invitation (Magic Link / Delegation)
+ summary: Accept an affiliation invitation using a token (Magic Link only)
+ description: |-
+ Token can be either grabbed from the Magic Link Email, or grabbed by using GET on an affiliation invitation (with type EMAIL).
+ This route is used by the owner of the business to grant an affiliation to the requester via Magic Link.
+ /auth/api/v1/affiliationInvitations/{affiliation_invitation_id}/authorization/{authorize_action}:
+ parameters:
+ - name: affiliation_invitation_id
+ in: path
+ description: Affiliation invitation identifier
+ required: true
+ schema:
+ type: string
+ - name: authorize_action
+ in: path
+ description: Authorization action (accept or refuse)
+ required: true
+ schema:
+ type: string
+ enum: [accept, refuse]
+ patch:
+ responses:
+ '200':
+ description: Success
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/AffiliationInvitationResponse'
+ '400':
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ code:
+ type: string
+ description: Identifier representing the type of error that occurred.
+ message:
+ type: string
+ description: Description of the error.
+ '401':
+ description: Not Authorized
+ '403':
+ description: Not Authorized
+ operationId: patch_affiliation_invitation_authorization
+ tags:
+ - Affiliation Invitation (Magic Link / Delegation)
+ summary: Authorize or refuse an affiliation invitation (Delegation only)
+servers:
+ - url: "https://sandbox.api.connect.gov.bc.ca"
+ description: "Test"
+ - url: "https://api.connect.gov.bc.ca"
+ description: "Production"
+components:
+ schemas:
+ AffiliationResponse:
+ type: object
+ properties:
+ business:
+ type: object
+ properties:
+ affiliations:
+ type: array
+ items:
+ type: object
+ properties:
+ created:
+ type: string
+ format: date-time
+ example: "2022-06-01T19:48:21+00:00"
+ id:
+ type: integer
+ example: 4496
+ businessIdentifier:
+ type: string
+ example: "FM1000334"
+ contacts:
+ type: array
+ items:
+ type: object
+ properties:
+ email:
+ type: string
+ format: email
+ example: "hey@hah.com"
+ phone:
+ type: string
+ example: "(250) 567-5675"
+ phoneExtension:
+ type: string
+ example: ""
+ corpType:
+ type: object
+ properties:
+ code:
+ type: string
+ example: "SP"
+ default:
+ type: boolean
+ example: false
+ desc:
+ type: string
+ example: "Sole Proprietorship"
+ created:
+ type: string
+ format: date-time
+ example: "2022-06-01T19:48:21+00:00"
+ createdBy:
+ type: string
+ example: "None None"
+ modified:
+ type: string
+ format: date-time
+ example: "2022-06-01T21:39:26+00:00"
+ modifiedBy:
+ type: string
+ example: "None None"
+ name:
+ type: string
+ example: "fsdfsf"
+ passCodeClaimed:
+ type: boolean
+ example: true
+ status:
+ type: string
+ example: "HISTORICAL"
+ created:
+ type: string
+ format: date-time
+ example: "2025-05-05T18:00:48+00:00"
+ createdBy:
+ type: string
+ example: "User"
+ id:
+ type: integer
+ example: 33807
+ modified:
+ type: string
+ format: date-time
+ example: "2025-05-05T18:00:48+00:00"
+ organization:
+ type: object
+ properties:
+ accessType:
+ type: string
+ example: "REGULAR"
+ branchName:
+ type: string
+ example: ""
+ contacts:
+ type: array
+ items:
+ type: object
+ properties:
+ city:
+ type: string
+ example: "Saskatoon"
+ country:
+ type: string
+ example: "CA"
+ postalCode:
+ type: string
+ example: "S7K 7Z4"
+ region:
+ type: string
+ example: "SK"
+ street:
+ type: string
+ example: "324-305 Pinehouse Dr"
+ streetAdditional:
+ type: string
+ example: ""
+ created:
+ type: string
+ format: date-time
+ example: "2025-05-05T14:06:31+00:00"
+ createdBy:
+ type: string
+ example: "BCREGTEST Bena THIRTEEN"
+ hasApiAccess:
+ type: boolean
+ example: true
+ id:
+ type: integer
+ example: 2821
+ isBusinessAccount:
+ type: boolean
+ example: false
+ mailingAddress:
+ type: object
+ properties:
+ city:
+ type: string
+ example: "Victoria"
+ country:
+ type: string
+ example: "CA"
+ postalCode:
+ type: string
+ example: "S7K 7Z7"
+ region:
+ type: string
+ example: "SK"
+ street:
+ type: string
+ example: "3555 Hello Drive"
+ streetAdditional:
+ type: string
+ example: ""
+ modified:
+ type: string
+ format: date-time
+ example: "2025-05-05T14:07:05+00:00"
+ modifiedBy:
+ type: string
+ example: "None None"
+ name:
+ type: string
+ example: "API Testing"
+ orgStatus:
+ type: string
+ example: "ACTIVE"
+ orgType:
+ type: string
+ example: "PREMIUM"
+ statusCode:
+ type: string
+ example: "ACTIVE"
+ typeCode:
+ type: string
+ example: "PREMIUM"
+ uuid:
+ type: string
+ format: uuid
+ example: "0ebc402d-ed11-44ac-b833-3f46301326a5"
+ version:
+ type: integer
+ example: 2
+ version:
+ type: integer
+ example: 1
+ AffiliationByPasscodeRequest:
+ title: AffiliationByPasscodeRequest
+ type: object
+ required:
+ - businessIdentifier
+ - certifiedByName
+ - passCode
+ properties:
+ businessIdentifier:
+ type: string
+ example: BC0000001
+ certifiedByName:
+ type: string
+ example: ""
+ passCode:
+ type: string
+ example: passcode
+ AffiliationInvitationRequest:
+ title: AffiliationInvitationRequest
+ type: object
+ properties:
+ fromOrgId:
+ type: string
+ description: The ID of the organization sending the invitation
+ toOrgUuid:
+ type: string
+ description: The UUID of the organization receiving the invitation (may need to call /orgs/affiliation/{business_identifier}/ to get this info)
+ businessIdentifier:
+ type: string
+ description: The business identifier for the entity
+ type:
+ type: string
+ description: The type of affiliation invitation
+ enum: [EMAIL, REQUEST]
+ additionalMessage:
+ type: string
+ description: Additional message for the delegation invitation
+ required:
+ - fromOrgId
+ - businessIdentifier
+ AffiliationInvitationCreateResponse:
+ title: AffiliationInvitationCreateResponse
+ type: object
+ properties:
+ additionalMessage:
+ type: string
+ example: "Hello trying to affiliate"
+ businessIdentifier:
+ type: string
+ example: "FM1000334"
+ expiresOn:
+ type: string
+ format: date-time
+ example: "2025-05-05T16:04:00+00:00"
+ fromOrg:
+ type: object
+ properties:
+ id:
+ type: integer
+ example: 2821
+ name:
+ type: string
+ example: "API Testing"
+ orgType:
+ type: string
+ example: "PREMIUM"
+ toOrg:
+ type: object
+ properties:
+ id:
+ type: integer
+ example: 422
+ name:
+ type: string
+ example: "API Testing"
+ orgType:
+ type: string
+ example: "PREMIUM"
+ id:
+ type: integer
+ example: 151
+ isDeleted:
+ type: boolean
+ example: false
+ recipientEmail:
+ type: string
+ example: "tr***********@go*******"
+ sentDate:
+ type: string
+ format: date-time
+ example: "2025-05-05T15:49:00+00:00"
+ status:
+ type: string
+ enum: [PENDING, ACCEPTED, EXPIRED, FAILED]
+ example: "PENDING"
+ token:
+ type: string
+ description: invitation token
+ example: "eyJpZ..."
+ type:
+ type: string
+ enum: [EMAIL, REQUEST]
+ example: "EMAIL/REQUEST"
+ AffiliationInvitationResponse:
+ title: AffiliationInvitationResponse
+ type: object
+ properties:
+ id:
+ type: string
+ description: The ID of the affiliation invitation
+ fromOrg:
+ type: object
+ properties:
+ id:
+ type: string
+ description: The ID of the organization sending the invitation
+ name:
+ type: string
+ description: The name of the organization sending the invitation
+ toOrg:
+ type: object
+ properties:
+ id:
+ type: string
+ description: The ID of the organization receiving the invitation
+ name:
+ type: string
+ description: The name of the organization receiving the invitation
+ entity:
+ type: object
+ properties:
+ business_identifier:
+ type: string
+ description: The business identifier
+ name:
+ type: string
+ description: The name of the business
+ corp_type:
+ type: string
+ description: The corporation type
+ state:
+ type: string
+ description: The state of the business
+ recipientEmail:
+ type: string
+ description: The email of the recipient
+ type:
+ type: string
+ description: The type of affiliation invitation
+ enum: [EMAIL, REQUEST]
+ status:
+ type: string
+ description: The status of the invitation
+ enum: [PENDING, ACCEPTED, EXPIRED]
+ additionalMessage:
+ type: string
+ description: Additional message for the invitation
+ sentDate:
+ type: string
+ format: date-time
+ description: The date the invitation was sent
+ acceptedDate:
+ type: string
+ format: date-time
+ description: The date the invitation was accepted
+ token:
+ type: string
+ description: The token for the invitation
+ expiresOn:
+ type: string
+ format: date-time
+ description: The date the invitation expires
+ isDeleted:
+ type: bool
+ description: Soft delete flag
+ default: false
+ AffiliationOrgResponse:
+ type: object
+ properties:
+ entities:
+ type: array
+ items:
+ type: object
+ properties:
+ affiliations:
+ type: array
+ items:
+ type: object
+ properties:
+ id:
+ type: integer
+ created:
+ type: string
+ format: date-time
+ businessIdentifier:
+ type: string
+ contacts:
+ type: array
+ items:
+ type: object
+ properties:
+ email:
+ type: string
+ phone:
+ type: string
+ phoneExtension:
+ type: string
+ corpType:
+ type: object
+ properties:
+ code:
+ type: string
+ default:
+ type: boolean
+ desc:
+ type: string
+ corpSubType:
+ type: object
+ properties:
+ code:
+ type: string
+ default:
+ type: boolean
+ desc:
+ type: string
+ nullable: true
+ created:
+ type: string
+ format: date-time
+ createdBy:
+ type: string
+ nullable: true
+ modified:
+ type: string
+ format: date-time
+ modifiedBy:
+ type: string
+ nullable: true
+ lastModified:
+ type: string
+ format: date-time
+ nullable: true
+ name:
+ type: string
+ folioNumber:
+ type: string
+ nullable: true
+ nrNumber:
+ type: string
+ nullable: true
+ passCodeClaimed:
+ type: boolean
+ status:
+ type: string
+ nullable: true
+ additionalProperties: true
+ AffiliationSearchResponse:
+ type: object
+ additionalProperties: true
+ properties:
+ entities:
+ type: array
+ items:
+ type: object
+ properties:
+ adminFreeze:
+ type: boolean
+ description: Determine if business is frozen
+ alternateNames:
+ type: array
+ description: alternate names for SP/GP
+ items:
+ type: object
+ properties:
+ entityType:
+ type: string
+ example: "SP"
+ identifier:
+ type: string
+ example: "FM1004308"
+ name:
+ type: string
+ example: "SPSPSPSP"
+ registeredDate:
+ type: string
+ format: date-time
+ example: "2022-07-20T08:00:00+00:00"
+ startDate:
+ type: string
+ format: date-time
+ nullable: true
+ example: null
+ type:
+ type: string
+ example: "DBA"
+ foundingDate:
+ type: string
+ description: Date entity was founted
+ format: date-time
+ example: "2022-07-20T08:00:00+00:00"
+ goodStanding:
+ type: boolean
+ description: field to determine if business is in good standing
+ example: true
+ identifier:
+ type: string
+ description: business identifier
+ example: "FM1004308"
+ inDissolution:
+ type: boolean
+ example: false
+ lastModified:
+ type: string
+ format: date-time
+ example: "2022-07-20T23:31:09.839582+00:00"
+ legalName:
+ type: string
+ description: "Legal name"
+ example: "FSFS FSF"
+ legalType:
+ type: string
+ description: "Legal type"
+ example: "SP"
+ state:
+ type: string
+ description: "State of the business"
+ example: "ACTIVE"
+ securitySchemes:
+ JWT:
+ type: "http"
+ scheme: "bearer"
+ api_key:
+ name: "x-apikey"
+ type: "apiKey"
+ in: "header"
+security:
+- api_key: []
+- JWT: []
diff --git a/web/site/public/pay/payment-spec.yaml b/web/site/public/pay/payment-spec.yaml
index aa5f7214..1b29d5d2 100644
--- a/web/site/public/pay/payment-spec.yaml
+++ b/web/site/public/pay/payment-spec.yaml
@@ -316,7 +316,7 @@ paths:
get:
tags:
- "Invoice"
- summary: "Get Invoice"
+ summary: "Get invoice"
description: "Get invoice details by request identifier"
operationId: "get_payment_request"
responses:
@@ -443,7 +443,7 @@ paths:
delete:
tags:
- "Invoice"
- summary: ""
+ summary: "Delete invoice"
operationId: "delete_payment_request"
responses:
"202":
@@ -1051,7 +1051,7 @@ paths:
required: true
get:
summary: "Get list of statements"
- tags: []
+ tags: ["Statements"]
responses:
"200":
description: "OK"
@@ -1255,7 +1255,7 @@ paths:
required: true
get:
summary: "Get the statement"
- tags: []
+ tags: ["Statements"]
responses:
"200":
description: "OK"