# Integrate with CRM & Phone Source: https://docs.usegizmo.com/agents/integration Using Gizmo for [CRM & Phone](/origination-desk/index) is recommended for the best experience and requires zero configuration. This page is for customers who are using an external system. You can fully integrate a 3rd-party CRM & Phone System with just a few quick steps. ## Add your Lead Sources For each lead provider you will have leads coming in from, you need to add a new lead provider in your [Lead Provider Settings](https://app.usegizmo.com/settings/leads). Agents Lead Providers Make sure the "slug" for each provider matches the slug in your external system. ## Create an API Key Go to your [API Keys](https://app.usegizmo.com/settings/api-keys) in your dashboard and create a new API key. Copy and paste the value, store it somewhere secure and share it with the developer who will be setting up the integration. ## Forward leads to Gizmo When each lead arrives in your external system, you will need to forward them to Gizmo via our API. Developers can use our [API Documentation](/api/reference) to easily build & test the integration. ## Set up an inbound transfer number In your phone system, you will need to create a new inbound transfer number for Gizmo to transfer calls to. Add this number in your [Agents Dashboard](https://app.usegizmo.com/agents/settings) under the "Inbound Transfer Number" setting. Agents Inbound Transfer Number When a transfer comes in from Gizmo, the Caller ID will be the **borrower's** phone number. Use this number to look up the lead in your CRM and display helpful information to your loan officers. ## Keep the lead status up to date Using the [Gizmo API](/api-reference), you can update leads after key events occur. Updating the record in Gizmo after these events will ensure the agents behave as expected and remain compliant. | Event | Action | | :--------------------------- | :------------------------------------ | | Credit is pulled | Update the status to "CREDIT\_PULLED" | | Loan is submitted to process | Update the status to "PROCESSING" | | Lead is withdrawn | Update the status to "WITHDRAWN" | Full documentation including example requests are available in our [API Reference](/api-reference). # Create Application Source: https://docs.usegizmo.com/api-reference/application/create-application https://app.stainless.com/api/spec/documented/gizmo-sdk/openapi.documented.yml post /applications # Get Application Source: https://docs.usegizmo.com/api-reference/application/get-application https://app.stainless.com/api/spec/documented/gizmo-sdk/openapi.documented.yml get /applications/{id} # Update Application Source: https://docs.usegizmo.com/api-reference/application/update-application https://app.stainless.com/api/spec/documented/gizmo-sdk/openapi.documented.yml patch /applications/{id} # Authentication Source: https://docs.usegizmo.com/api-reference/index All requests to Gizmo APIs must contain a valid API key. ## Get an API key [Create a new API key](https://app.usegizmo.com/settings/api-keys) in the Gizmo dashboard. ## Authenticate HTTP Requests Simply pass the API key in the `Authorization` header using the `Bearer` scheme. ## Authenticate with the Gimzo SDK Gizmo publishes type-safe, lightweight SDKs for Typescript and Python. ### Install the SDK ```bash theme={"theme":"dracula"} npm install @gizmo-os/sdk ``` ```bash theme={"theme":"dracula"} pnpm add @gizmo-os/sdk ``` ```bash theme={"theme":"dracula"} bun add @gizmo-os/sdk ``` ```bash theme={"theme":"dracula"} pip install gizmo-sdk ``` ### Authenticate with Environment Variables Set the `GIZMO_API_KEY` environment variable to your API key you created in the Gizmo dashboard. The SDK will automatically use this environment variable to authenticate your requests. ```typescript index.ts theme={"theme":"dracula"} import Gizmo from '@gizmo-os/sdk'; // Uses GIZMO_API_KEY environment variable export const gizmo = new GizmoSDK(); const application = await gizmo.applications.retrieve('') ``` ```python index.py theme={"theme":"dracula"} from gizmo_sdk import Gizmo client = Gizmo() application = client.applications.retrieve( "", ) ``` ### (Optional) Pass in the API key directly As an alternative, you can pass the API key directly to the SDK constructor. ```typescript index.ts theme={"theme":"dracula"} import Gizmo from '@gizmo-os/sdk'; export const gizmo = new GizmoSDK({ apiKey: '', }); const application = await gizmo.applications.retrieve('') ``` ```python index.py theme={"theme":"dracula"} from gizmo_sdk import Gizmo client = Gizmo( api_key="", ) application = client.applications.retrieve( "", ) ``` This method is great for local testing and development, but it is **not recommended** for production environments. **Never** commit your API key to version control. # Rate Limits Source: https://docs.usegizmo.com/api-reference/rate-limits Gizmo API implements rate limiting to ensure fair usage and maintain service stability. Rate limits are applied per organization and are reset every minute. ## Rate-Limited Endpoints All write operations are rate-limited. This includes any `POST`, `PATCH`, or `DELETE` endpoints. `GET` endpoints are not rate-limited. Write operations are rate-limited to 20 requests per minute. ## Handling Rate Limits When you exceed the rate limit, the API returns a 429 Too Many Requests status code. To handle rate limits effectively: 1. Monitor the rate limit headers to track your usage 2. Implement exponential backoff when you receive a 429 response 3. Space out your requests to stay within the limits 4. Consider batching operations where possible to reduce the number of API calls # Introduction Source: https://docs.usegizmo.com/index Welcome to the Gizmo Documentation This site provides everything you need to start working and integrating with Gizmo. Visit our [Guides](/agents/integration) for implementation details, or start building with our detailed [API Reference](/api-reference/index). Build custom integrations with our detailed API Documentation. Build custom integrations with our detailed API Documentation.