# Orthogonal Integration

## Overview

[Orthogonal](https://orthogonal.com) is a unified API gateway designed for AI agents. It provides instant access to hundreds of APIs through a single SDK, with built-in payment handling and no individual API key management.

Tomba is available as a verified integration on Orthogonal, giving you access to 19 endpoints for email finding, verification, enrichment, and company intelligence  all through a simple, consistent interface.

## Prerequisites

| Requirement            | Details                                                                                    |
| ---------------------- | ------------------------------------------------------------------------------------------ |
| **Orthogonal account** | Sign up at [orthogonal.com/sign-up](https://orthogonal.com/sign-up)  get $10 free credits |
| **Orthogonal API key** | Available in your Orthogonal dashboard                                                     |

## Installation

Install the Orthogonal SDK:

```bash
npm install @orth/sdk
```

Initialize the client:

```javascript
import Orthogonal from "@orth/sdk";

const orthogonal = new Orthogonal({
    apiKey: process.env.ORTHOGONAL_API_KEY,
});
```

## Available Endpoints

| Endpoint                 | Method | Description                               | Cost  |
| ------------------------ | ------ | ----------------------------------------- | ----- |
| `/v1/domain-search`      | GET    | Find all emails at a company domain       | $0.01 |
| `/v1/email-finder`       | GET    | Find email from name + domain             | $0.01 |
| `/v1/email-verifier`     | GET    | Validate email deliverability             | $0.01 |
| `/v1/author-finder`      | GET    | Find email from article URL               | $0.01 |
| `/v1/linkedin`           | GET    | Find email from LinkedIn URL              | $0.01 |
| `/v1/phone-finder`       | GET    | Find phone number from email              | $0.01 |
| `/v1/email-count`        | GET    | Count emails for a domain                 | $0.01 |
| `/v1/email-sources`      | GET    | Get sources where email was found         | $0.01 |
| `/v1/enrich`             | GET    | Enrich data from an email address         | $0.01 |
| `/v1/email-format`       | GET    | Get email format patterns for a domain    | $0.01 |
| `/v1/people/find`        | GET    | Get person info from email                | $0.01 |
| `/v1/companies/find`     | GET    | Get company info from domain              | $0.01 |
| `/v1/technology`         | GET    | Discover technologies used by a website   | $0.01 |
| `/v1/location`           | GET    | Get employee location distribution        | $0.01 |
| `/v1/similar`            | GET    | Find similar domains                      | $0.01 |
| `/v1/domain-suggestions` | GET    | Domain suggestions for a company name     | $0.01 |
| `/v1/domain-status`      | GET    | Check domain status and availability      | $0.01 |
| `/v1/phone-validator`    | GET    | Validate phone number and carrier info    | $0.01 |
| `/v1/combined/find`      | GET    | Combined person + company info from email | $0.01 |
| `/v1/reveal/search`      | POST   | Natural language company search           | $0.01 |

## Usage Examples

### Domain Search

Find all emails at a company:

```javascript
const result = await orthogonal.run({
    api: "tomba",
    path: "/v1/domain-search",
    query: {
        domain: "stripe.com",
    },
});

console.log(result);
// Returns: {
//   data: {
//     organization: { organization: "Stripe", location: { country: "US", city: "San Francisco" }, ... },
//     emails: [
//       { email: "matthew.yalowitz@stripe.com", first_name: "Matthew", position: "...", score: 55, ... },
//       ...
//     ]
//   },
//   meta: { total: 2079 }
// }
```

### Email Finder

Find a specific person's email:

```javascript
const result = await orthogonal.run({
    api: "tomba",
    path: "/v1/email-finder",
    query: {
        domain: "asana.com",
        first_name: "Dustin",
        last_name: "Moskovitz",
    },
});

console.log(result);
// Returns: {
//   data: {
//     email: "dmoskovitz@asana.com",
//     full_name: "Dustin Moskovitz",
//     position: "founder",
//     score: 100,
//     verification: { status: "valid" },
//     sources: [...]
//   }
// }
```

### Email Verifier

Verify an email before sending:

```javascript
const result = await orthogonal.run({
    api: "tomba",
    path: "/v1/email-verifier",
    query: {
        email: "ceo@example.com",
    },
});

console.log(result);
// Returns: {
//   data: {
//     email: {
//       email: "ceo@example.com",
//       result: "deliverable",
//       status: "valid",
//       score: 99,
//       smtp_provider: "Google Workspace",
//       accept_all: false,
//       disposable: false
//     },
//     sources: [...]
//   }
// }
```

### LinkedIn Finder

Get email from a LinkedIn profile:

```javascript
const result = await orthogonal.run({
    api: "tomba",
    path: "/v1/linkedin",
    query: {
        url: "https://www.linkedin.com/in/williamhgates",
    },
});

console.log(result);
// Returns: {
//   data: {
//     email: "bill.gates@microsoft.com",
//     full_name: "Bill Gates",
//     company: "Microsoft",
//     position: "Co-chair",
//     score: 100,
//     verification: { status: "valid" }
//   }
// }
```

### Author Finder

Find the author's email from a blog post:

```javascript
const result = await orthogonal.run({
    api: "tomba",
    path: "/v1/author-finder",
    query: {
        url: "https://blog.hubspot.com/marketing/email-marketing-guide",
    },
});

// Returns author name, email, and confidence score
```

### Email Count

Check how many emails exist for a domain:

```javascript
const result = await orthogonal.run({
    api: "tomba",
    path: "/v1/email-count",
    query: {
        domain: "google.com",
    },
});

console.log(result);
// Returns: {
//   data: {
//     total: 111705,
//     personal_emails: 110828,
//     generic_emails: 877,
//     department: { engineering: 5375, sales: 2547, marketing: 1356, ... }
//   }
// }
```

### Phone Finder

Find phone number from an email:

```javascript
const result = await orthogonal.run({
    api: "tomba",
    path: "/v1/phone-finder",
    query: {
        email: "contact@company.com",
    },
});

console.log(result);
// Returns: {
//   data: {
//     email: "contact@company.com",
//     local_format: "...",
//     intl_format: "+1 ...",
//     carrier: "...",
//     line_type: "MOBILE"
//   }
// }
```

## x402 Protocol (Stablecoin Payments)

Tomba on Orthogonal supports [x402](https://www.x402.org/), an open protocol that enables native payments in HTTP. With x402, your agents can pay for API calls directly using USDC stablecoins  no API keys required.

```javascript
// Install: npm install x402-fetch viem
import { wrapFetchWithPayment } from "x402-fetch";
import { privateKeyToAccount } from "viem/accounts";

const privateKey = process.env.PRIVATE_KEY;
if (!privateKey) {
    throw new Error("PRIVATE_KEY environment variable is required");
}

const account = privateKeyToAccount(
    privateKey.startsWith("0x") ? privateKey : `0x${privateKey}`,
);

const fetchWithPayment = wrapFetchWithPayment(fetch, account);

// Find emails at a domain with automatic USDC payment
const url = "https://x402.orth.sh/tomba/v1/domain-search?domain=stripe.com";

const response = await fetchWithPayment(url, {
    method: "GET",
    headers: { "Content-Type": "application/json" },
});

const data = await response.json();
console.log(data);
```

x402 enables a new paradigm where AI agents can autonomously pay for services using stablecoins. No subscriptions, no API key management  just seamless agent-to-agent payments.

## Use Cases

### Sales Prospecting

Build targeted lead lists by domain. Find every email at a company, filter by department (engineering, sales, executive), and verify before outreach.

### Automated Outreach

Agents can autonomously find decision-makers, verify their emails, and queue personalized outreach. No human bottleneck in the prospecting pipeline.

### Recruiting

Find hiring managers and candidates at target companies. Author Finder is perfect for reaching out to people who write about topics relevant to your role.

### PR & Content Marketing

Found a journalist who covers your space? Author Finder gets their email from any article they've written. Reach the actual person, not a generic inbox.

### CRM Enrichment

Bulk enrich your existing contacts with verified emails, phone numbers, and company data. Keep your database fresh and deliverable.

### Due Diligence

Researching a company? Domain Search reveals organizational structure, departments, and key personnel through their email patterns.

## Why Use Orthogonal for Tomba?

1. **No Tomba API key needed**: Orthogonal handles authentication
2. **Unified SDK**: Same interface for Tomba and hundreds of other APIs
3. **x402 support**: Enable autonomous agent payments with stablecoins
4. **Free credits**: Get $10 free to start

## Resources

- [Tomba on Orthogonal](https://orthogonal.com/discover/tomba)
- [Orthogonal Blog: Tomba Integration](https://www.orthogonal.com/blog/tomba-email-finder-api)
- [Sign up for Orthogonal](https://orthogonal.com/sign-up)
- [x402 Protocol](https://www.x402.org/)
- [Tomba API Documentation](/api)
