Testing & Development Tools

Tools and tips for building your integration.

Interactive API Explorer

The docs at docs.propstreet.com include an interactive API explorer powered by Scalar. You can:

  • Try any endpoint directly in the browser
  • Authenticate with your PAT or OAuth token
  • See real responses from the API

[!note] The API explorer connects to production. Use test data or a dedicated test account.

Thunder Client (VS Code)

Thunder Client is a lightweight REST client built into VS Code. It's the recommended tool for developers already using VS Code.

Setup

  1. Install the extension: Search "Thunder Client" in VS Code Extensions
  2. Click the Thunder Client icon in the sidebar
  3. CollectionsImportImport from URL
  4. Enter: https://app.propstreet.com/openapi/public_v1.json

Configure Authentication

  1. Go to Env tab → Create new environment (e.g., "Production")
  2. Add variables:
    • baseUrl = https://app.propstreet.com
    • token = your PAT or OAuth access token
  3. In your collection: AuthBearer{{token}}

Features

  • GUI-based testing - no syntax to remember
  • Response assertions - validate status codes and body content
  • Request chaining - use response values in subsequent requests
  • Collection runner - run all tests sequentially
  • Git-friendly - collections stored as JSON files

Postman / Insomnia

Import our OpenAPI spec into your favorite API client:

Postman

  1. Download the OpenAPI Specification
  2. In Postman: FileImport → Select the downloaded file
  3. Set up environment variables:
    • base_url = https://app.propstreet.com
    • token = your PAT or OAuth access token
  4. Add to collection: AuthorizationBearer Token{{token}}

Insomnia

  1. ApplicationPreferencesDataImport Data
  2. Select "From URL" and paste: https://app.propstreet.com/openapi/public_v1.json
  3. Configure environment with your token

Code Generation

Generate type-safe API clients from our OpenAPI spec:

TypeScript

# Using openapi-typescript
npx openapi-typescript https://app.propstreet.com/openapi/public_v1.json -o propstreet.d.ts

# Using openapi-fetch for runtime client
npm install openapi-fetch
import createClient from "openapi-fetch";
import type { paths } from "./propstreet";

const client = createClient<paths>({
  baseUrl: "https://app.propstreet.com",
  headers: {
    Authorization: `Bearer ${process.env.PROPSTREET_TOKEN}`,
  },
});

const { data } = await client.GET("/api/v1/network/contacts", {
  params: { query: { page_size: 100 } },
});

C# / .NET

# Using NSwag
dotnet tool install -g NSwag.ConsoleCore
nswag openapi2csclient /input:https://app.propstreet.com/openapi/public_v1.json /output:PropstreetClient.cs

Or add to your .csproj:

<ItemGroup>
  <OpenApiReference Include="https://app.propstreet.com/openapi/public_v1.json"
                    ClassName="PropstreetClient"
                    Namespace="MyApp.Propstreet" />
</ItemGroup>

Python

# Using openapi-python-client
pip install openapi-python-client
openapi-python-client generate --url https://app.propstreet.com/openapi/public_v1.json
from propstreet_client import Client
from propstreet_client.api.contacts import list_contacts

client = Client(base_url="https://app.propstreet.com")
client = client.with_headers({"Authorization": f"Bearer {token}"})

contacts = list_contacts.sync(client=client, page_size=100)

Testing Best Practices

Use a Dedicated Test Account

  • Create test contacts/companies with a clear naming convention (e.g., [TEST] Jane Doe)
  • Use test email addresses (e.g., test+propstreet@yourcompany.com)
  • Clean up test data periodically

Start with Read Operations

  1. First, test GET /contacts to verify authentication
  2. Then test pagination with page_size and cursor
  3. Test delta sync with updated_since
  4. Only then move to write operations

Test Error Handling

Intentionally trigger errors to verify your handling:

  • 401: Use an expired or invalid token
  • 404: Request a non-existent ID
  • 429: Make rapid requests to hit rate limits
  • 409: Update with a stale ETag

Monitor Rate Limits

Always check response headers during testing:

curl -i "https://app.propstreet.com/api/v1/network/contacts" \
  -H "Authorization: Bearer $TOKEN" 2>&1 | grep -i ratelimit

Debugging Tips

Check Your Token

# Verify token works
curl -s "https://app.propstreet.com/api/v1/network/contacts?page_size=1" \
  -H "Authorization: Bearer $TOKEN" | head -c 200

Log Request/Response

Most HTTP clients support logging. Enable it during development:

// Node.js with axios
axios.interceptors.request.use((req) => {
  console.log(`${req.method} ${req.url}`);
  return req;
});

Use the OpenAPI Spec

The spec at /openapi/public_v1.json is the source of truth for:

  • Required vs optional fields
  • Field types and formats
  • Valid enum values
  • Request/response schemas