diff --git a/docs/api-catalog.txt b/docs/api-catalog.txt index 363b028f89..de0da45ba0 100644 --- a/docs/api-catalog.txt +++ b/docs/api-catalog.txt @@ -2,7 +2,7 @@ > Compact provider slug catalog for agents. Use the slug to reconstruct provider-specific docs URLs only when needed. -Provider count: 876 +Provider count: 877 URL patterns: - Main provider page: https://nango.dev/docs/integrations/all/{slug}.md or https://nango.dev/docs/api-integrations/{slug}.md @@ -517,6 +517,7 @@ URL patterns: | `netsuite-tba` | NetSuite (TBA) | TBA | [docs](https://nango.dev/docs/api-integrations/netsuite-tba.md) | | [setup](https://nango.dev/docs/api-integrations/netsuite-tba/how-to-set-up-netsuite-tba-with-nango.md) | accounting, erp, popular | | `next-cloud-ocs` | Next Cloud OCS | BASIC | [docs](https://nango.dev/docs/integrations/all/next-cloud-ocs.md) | [connect](https://nango.dev/docs/integrations/all/next-cloud-ocs/connect.md) | | storage, productivity | | `nexthink` | Nexthink | OAUTH2_CC | [docs](https://nango.dev/docs/api-integrations/nexthink.md) | [connect](https://nango.dev/docs/api-integrations/nexthink/connect.md) | | analytics | +| `ninety-io` | Ninety.io | API_KEY | [docs](https://nango.dev/docs/api-integrations/ninety-io.md) | [connect](https://nango.dev/docs/api-integrations/ninety-io/connect.md) | | productivity | | `ninjaone-rmm` | NinjaOne RMM | OAUTH2_CC | [docs](https://nango.dev/docs/integrations/all/ninjaone-rmm.md) | [connect](https://nango.dev/docs/integrations/all/ninjaone-rmm/connect.md) | | support | | `ninjaone-rmm-oauth2` | NinjaOne RMM (OAuth2) | OAUTH2 | [docs](https://nango.dev/docs/api-integrations/ninjaone-rmm-oauth2.md) | | [setup](https://nango.dev/docs/api-integrations/ninjaone-rmm-oauth2/how-to-register-your-own-ninjaone-rmm-api-oauth-app.md) | support | | `ninjaone-saas-backup` | NinjaOne SaaS Backup | API_KEY | [docs](https://nango.dev/docs/api-integrations/ninjaone-saas-backup.md) | [connect](https://nango.dev/docs/api-integrations/ninjaone-saas-backup/connect.md) | | storage, productivity | diff --git a/docs/api-integrations/ninety-io.mdx b/docs/api-integrations/ninety-io.mdx new file mode 100644 index 0000000000..7ffed14f8d --- /dev/null +++ b/docs/api-integrations/ninety-io.mdx @@ -0,0 +1,87 @@ +--- +title: 'Ninety.io' +sidebarTitle: 'Ninety.io' +description: 'Integrate your application with the Ninety.io API' +--- + +## Quickstart + +Connect to Ninety.io with Nango and see data flow in 2 minutes. + + + + In Nango ([free signup](https://app.nango.dev)), go to [Integrations](https://app.nango.dev/dev/integrations) -> _Configure New Integration_ -> _Ninety.io_. + + + Go to [Connections](https://app.nango.dev/dev/connections) -> _Add Test Connection_ -> _Authorize_, then enter your Personal Access Token. Later, you'll let your users do the same directly from your app. + + + Let's make your first request to the Ninety.io API. Replace the placeholders below with your [secret key](https://app.nango.dev/dev/environment-settings), [integration ID](https://app.nango.dev/dev/integrations), and [connection ID](https://app.nango.dev/dev/connections): + + + + ```bash + curl "https://api.nango.dev/proxy/v1/teams" \ + -H "Authorization: Bearer " \ + -H "Provider-Config-Key: " \ + -H "Connection-Id: " + ``` + + + + + + Install Nango's backend SDK with `npm i @nangohq/node`. Then run: + + ```typescript + import { Nango } from '@nangohq/node'; + + const nango = new Nango({ secretKey: '' }); + + const res = await nango.get({ + endpoint: '/v1/teams', + providerConfigKey: '', + connectionId: '' + }); + + console.log(res.data); + ``` + + + + + Or fetch credentials with the [Node SDK](/reference/sdks/node#get-a-connection-with-credentials) or [API](/reference/api/connection/get). + + You're connected! Check the [Logs](https://app.nango.dev/dev/logs) tab in Nango to inspect requests. + + + + Follow our [Auth implementation guide](/guides/primitives/auth) to integrate Nango in your app. + + To obtain your own production credentials, follow the setup guide linked below. + + + + +Ninety.io's Public API is only available on the Thrive subscription plan, and every request executes under the permissions of the user who generated the token. Rate limit: 25 requests/second, per user. + + +## Ninety.io integration guides + +Nango-maintained guides for common use cases. + +- [How do I link my account?](/api-integrations/ninety-io/connect) +Connect your Ninety.io account using the Connect UI + +Official docs: [Ninety.io API documentation](https://help.ninety.io/en/articles/15505694-api-reference-and-access) + + +## Pre-built syncs & actions for Ninety.io + +Enable them in your dashboard. Extend and customize to fit your needs. + +import PreBuiltUseCases from "/snippets/generated/ninety-io/PreBuiltUseCases.mdx" + + + +--- diff --git a/docs/api-integrations/ninety-io/connect.mdx b/docs/api-integrations/ninety-io/connect.mdx new file mode 100644 index 0000000000..c7b7120e2e --- /dev/null +++ b/docs/api-integrations/ninety-io/connect.mdx @@ -0,0 +1,45 @@ +--- +title: Ninety.io - How do I link my account? +sidebarTitle: Ninety.io +--- + +# Overview + +To authenticate with Ninety.io, you need a **Personal Access Token (PAT)**. All API calls execute under your user identity and respect your in-app permissions. + +### Prerequisites + +- A Ninety.io account on the **Thrive** subscription plan (Accelerate, Essentials, and Free plans don't include API access). +- An Owner, Admin, Coach, Manager, or Team Member role. Observers can't generate tokens. + +### Step 1: Generate a Personal Access Token + +1. Click your name at the bottom of the left navigation. +2. Click **User Settings**. + + + +3. Click **Developer Settings**. +4. Click **Generate New Token** in the top right. + + + +5. Choose a **Token Expiration Timeframe** (default: 90 days). +6. Enter a **Token Description** (50-character limit) identifying the token's purpose. +7. Click **Generate Token**. +8. Copy and store the token securely immediately — Ninety.io displays the full token only once. + + +Treat your Personal Access Token like a password. Anyone with the token can call the API as you. Do not commit tokens to source control, share them in chat, or paste them publicly. + + +### Step 2: Enter credentials in the Connect UI + +1. Open the form where you need to authenticate with Ninety.io. +2. Enter your **Personal Access Token** in the designated field. +3. Submit the form, and you should be successfully authenticated. + + + + +You are now connected to Ninety.io. diff --git a/docs/api-integrations/ninety-io/dashboard.png b/docs/api-integrations/ninety-io/dashboard.png new file mode 100644 index 0000000000..d14b69bd5d Binary files /dev/null and b/docs/api-integrations/ninety-io/dashboard.png differ diff --git a/docs/api-integrations/ninety-io/developer_settings.png b/docs/api-integrations/ninety-io/developer_settings.png new file mode 100644 index 0000000000..9cf5c4cb8c Binary files /dev/null and b/docs/api-integrations/ninety-io/developer_settings.png differ diff --git a/docs/api-integrations/ninety-io/form.png b/docs/api-integrations/ninety-io/form.png new file mode 100644 index 0000000000..d4cb06b15d Binary files /dev/null and b/docs/api-integrations/ninety-io/form.png differ diff --git a/docs/docs.json b/docs/docs.json index d4d9ba9d9b..40d3ee7388 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -1411,6 +1411,7 @@ "integrations/all/mural", "api-integrations/nable-ncentral", "integrations/all/nationbuilder", + "api-integrations/ninety-io", "integrations/all/ninjaone-rmm", "api-integrations/ninjaone-rmm-oauth2", "api-integrations/ninjaone-saas-backup", diff --git a/docs/llms-full.txt b/docs/llms-full.txt index 72cda65ae1..e3cc0991b4 100644 --- a/docs/llms-full.txt +++ b/docs/llms-full.txt @@ -14810,6 +14810,7 @@ Use these slugs to construct provider-specific docs URLs only when needed. | `netsuite-tba` | NetSuite (TBA) | TBA | [docs](https://nango.dev/docs/api-integrations/netsuite-tba.md) | | [setup](https://nango.dev/docs/api-integrations/netsuite-tba/how-to-set-up-netsuite-tba-with-nango.md) | accounting, erp, popular | | `next-cloud-ocs` | Next Cloud OCS | BASIC | [docs](https://nango.dev/docs/integrations/all/next-cloud-ocs.md) | [connect](https://nango.dev/docs/integrations/all/next-cloud-ocs/connect.md) | | storage, productivity | | `nexthink` | Nexthink | OAUTH2_CC | [docs](https://nango.dev/docs/api-integrations/nexthink.md) | [connect](https://nango.dev/docs/api-integrations/nexthink/connect.md) | | analytics | +| `ninety-io` | Ninety.io | API_KEY | [docs](https://nango.dev/docs/api-integrations/ninety-io.md) | [connect](https://nango.dev/docs/api-integrations/ninety-io/connect.md) | | productivity | | `ninjaone-rmm` | NinjaOne RMM | OAUTH2_CC | [docs](https://nango.dev/docs/integrations/all/ninjaone-rmm.md) | [connect](https://nango.dev/docs/integrations/all/ninjaone-rmm/connect.md) | | support | | `ninjaone-rmm-oauth2` | NinjaOne RMM (OAuth2) | OAUTH2 | [docs](https://nango.dev/docs/api-integrations/ninjaone-rmm-oauth2.md) | | [setup](https://nango.dev/docs/api-integrations/ninjaone-rmm-oauth2/how-to-register-your-own-ninjaone-rmm-api-oauth-app.md) | support | | `ninjaone-saas-backup` | NinjaOne SaaS Backup | API_KEY | [docs](https://nango.dev/docs/api-integrations/ninjaone-saas-backup.md) | [connect](https://nango.dev/docs/api-integrations/ninjaone-saas-backup/connect.md) | | storage, productivity | diff --git a/docs/llms.txt b/docs/llms.txt index 3f2927a930..28527c7cc9 100644 --- a/docs/llms.txt +++ b/docs/llms.txt @@ -139,7 +139,7 @@ Use provider URLs by replacing `{slug}` with a slug from the API catalog: ## APIs and integrations -- [API catalog](https://nango.dev/docs/api-catalog.txt): 876 provider slugs with canonical docs routes, auth modes, setup guides, and connect guides. +- [API catalog](https://nango.dev/docs/api-catalog.txt): 877 provider slugs with canonical docs routes, auth modes, setup guides, and connect guides. - Provider-specific pages are intentionally not expanded here so core Nango guides remain easy for agents to find. ## Resources diff --git a/docs/snippets/generated/ninety-io/PreBuiltTooling.mdx b/docs/snippets/generated/ninety-io/PreBuiltTooling.mdx new file mode 100644 index 0000000000..9d88b89f57 --- /dev/null +++ b/docs/snippets/generated/ninety-io/PreBuiltTooling.mdx @@ -0,0 +1,40 @@ +## Pre-built tooling + + +| Tools | Status | +| - | - | +| Pre-built authorization (API Key) | ✅ | +| Pre-built authorization UI | ✅ | +| Custom authorization UI | ✅ | +| End-user authorization guide | ✅ | +| Expired credentials detection | ✅ | + + +| Tools | Status | +| - | - | +| Pre-built integrations | 🚫 (time to contribute: <48h) | +| API unification | ✅ | +| 2-way sync | ✅ | +| Webhooks from Nango on data modifications | ✅ | +| Real-time webhooks from 3rd-party API | 🚫 (time to contribute: <48h) | +| Proxy requests | ✅ | + + +| Tools | Status | +| - | - | +| HTTP request logging | ✅ | +| End-to-end type safety | ✅ | +| Data runtime validation | ✅ | +| OpenTelemetry export | ✅ | +| Slack alerts on errors | ✅ | +| Integration status API | ✅ | + + +| Tools | Status | +| - | - | +| Create or customize use-cases | ✅ | +| Pre-configured pagination | 🚫 (time to contribute: <48h) | +| Pre-configured rate-limit handling | 🚫 (time to contribute: <48h) | +| Per-customer configurations | ✅ | + + \ No newline at end of file diff --git a/docs/snippets/generated/ninety-io/PreBuiltUseCases.mdx b/docs/snippets/generated/ninety-io/PreBuiltUseCases.mdx new file mode 100644 index 0000000000..aa7f4345e3 --- /dev/null +++ b/docs/snippets/generated/ninety-io/PreBuiltUseCases.mdx @@ -0,0 +1,3 @@ +_No pre-built syncs or actions available yet._ + +Not seeing the integration you need? [Build your own](/guides/functions/functions-guide) independently. \ No newline at end of file diff --git a/packages/providers/providers.yaml b/packages/providers/providers.yaml index 14c8e89ecb..770e535b64 100644 --- a/packages/providers/providers.yaml +++ b/packages/providers/providers.yaml @@ -13758,6 +13758,30 @@ nexthink: order: 2 doc_section: '#step-1-locate-your-instance-name-and-region' +ninety-io: + display_name: Ninety.io + categories: + - productivity + auth_mode: API_KEY + proxy: + base_url: https://api.public.ninety.io + headers: + authorization: Bearer ${apiKey} + verification: + method: GET + endpoints: + - /v1/teams + docs: https://nango.dev/docs/api-integrations/ninety-io + docs_connect: https://nango.dev/docs/api-integrations/ninety-io/connect + credentials: + apiKey: + type: string + title: Personal Access Token + example: pat_189b**********************************4c11 + pattern: '^pat_[a-f0-9]{64}$' + description: Your Ninety.io Personal Access Token. + doc_section: '#step-1-generate-a-personal-access-token' + ninjaone-rmm: display_name: NinjaOne RMM categories: diff --git a/packages/webapp/public/images/template-logos/ninety-io.svg b/packages/webapp/public/images/template-logos/ninety-io.svg new file mode 100644 index 0000000000..3014862363 --- /dev/null +++ b/packages/webapp/public/images/template-logos/ninety-io.svg @@ -0,0 +1 @@ + \ No newline at end of file