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
- Install the extension: Search "Thunder Client" in VS Code Extensions
- Click the Thunder Client icon in the sidebar
- Collections → Import → Import from URL
- Enter:
https://app.propstreet.com/openapi/public_v1.json
Configure Authentication
- Go to Env tab → Create new environment (e.g., "Production")
- Add variables:
baseUrl=https://app.propstreet.comtoken= your PAT or OAuth access token
- In your collection: Auth → Bearer →
{{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
- Download the OpenAPI Specification
- In Postman: File → Import → Select the downloaded file
- Set up environment variables:
base_url=https://app.propstreet.comtoken= your PAT or OAuth access token
- Add to collection: Authorization → Bearer Token →
{{token}}
Insomnia
- Application → Preferences → Data → Import Data
- Select "From URL" and paste:
https://app.propstreet.com/openapi/public_v1.json - 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
- First, test
GET /contactsto verify authentication - Then test pagination with
page_sizeandcursor - Test delta sync with
updated_since - 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