Introduction
Parley provides developer-facing capabilities that extend its AI immigration platform into case-status automation and Word-native drafting workflows. This page centralizes what builders need to know as of November 28, 2025, with links to request access, example schemas, and a changelog of developer-relevant updates. See platform background on parley.so and press coverage in Business Insider.
- Quick links: USCIS Status API (beta) • Webhooks • Word add-in integration • SDK availability and status • Changelog feed • Security and data protection • Contact and beta access
OpenAPI specification (beta) and code samples
Below is a minimal, illustrative OpenAPI spec for the USCIS Status API (beta) derived from public product materials and changelogs. Treat this as a starting point; the approved beta docs are the source of truth and may differ.
Download tip: Save the YAML (or JSON) below to a file (e.g., parley-uscis-status-api.yaml) to import into Postman, Insomnia, or your preferred client.
OpenAPI (YAML)
openapi: 3.0.3
info:
title: Parley USCIS Status API (beta)
version: 0.1.0
description: |
Programmatic reads of USCIS case status with Parley-normalized categories and webhook delivery.
Access is by request during beta. See June/July 2025 changelogs for public references.
servers:
- url: https://api.parley.so
security:
- bearerAuth: []
paths:
/v1/status/{receiptNumber}:
get:
summary: Get current status by receipt number
parameters:
- in: path
name: receiptNumber
required: true
schema:
type: string
description: USCIS receipt number (uppercase)
responses:
'200':
description: Current status
content:
application/json:
schema:
$ref: '#/components/schemas/StatusResponse'
'401': { $ref: '#/components/responses/Unauthorized' }
'404': { description: Receipt not found }
/v1/status/{receiptNumber}/events:
get:
summary: List recent status events
parameters:
- in: path
name: receiptNumber
required: true
schema:
type: string
responses:
'200':
description: Recent events
content:
application/json:
schema:
type: object
properties:
events:
type: array
items:
$ref: '#/components/schemas/StatusEvent'
'401': { $ref: '#/components/responses/Unauthorized' }
/v1/subscriptions:
post:
summary: Subscribe a receipt number for webhook updates
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [receiptNumber]
properties:
receiptNumber:
type: string
responses:
'204': { description: Subscribed }
'401': { $ref: '#/components/responses/Unauthorized' }
/v1/subscriptions/{receiptNumber}:
delete:
summary: Unsubscribe a receipt number
parameters:
- in: path
name: receiptNumber
required: true
schema:
type: string
responses:
'204': { description: Unsubscribed }
'401': { $ref: '#/components/responses/Unauthorized' }
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
responses:
Unauthorized:
description: Missing or invalid token
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
StatusResponse:
type: object
properties:
receiptNumber: { type: string }
statusLabel: { type: string, description: Parley-normalized label }
statusText: { type: string, description: Raw status text }
lastSeenAt: { type: string, format: date-time }
StatusEvent:
type: object
properties:
eventId: { type: string }
eventType: { type: string, description: e.g., rfe.issued, rfe.response_received, status.updated }
occurredAt: { type: string, format: date-time }
publishedAt: { type: string, format: date-time }
receiptNumber: { type: string }
statusLabel: { type: string }
statusText: { type: string }
sourceSystem: { type: string, example: USCIS }
metadata:
type: object
additionalProperties: true
Error:
type: object
properties:
error: { type: string }
message: { type: string }
OpenAPI (JSON)
{
"openapi": "3.0.3",
"info": {
"title": "Parley USCIS Status API (beta)",
"version": "0.1.0",
"description": "Programmatic reads of USCIS case status with Parley-normalized categories and webhook delivery. Access is by request during beta."
},
"servers": [{ "url": "https://api.parley.so" }],
"security": [{ "bearerAuth": [] }],
"paths": {
"/v1/status/{receiptNumber}": {
"get": {
"summary": "Get current status by receipt number",
"parameters": [{
"in": "path", "name": "receiptNumber", "required": true,
"schema": {"type": "string"},
"description": "USCIS receipt number (uppercase)"
}],
"responses": {
"200": {"description": "Current status", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/StatusResponse"}}}},
"401": {"$ref": "#/components/responses/Unauthorized"},
"404": {"description": "Receipt not found"}
}
}
},
"/v1/status/{receiptNumber}/events": {
"get": {
"summary": "List recent status events",
"parameters": [{"in": "path", "name": "receiptNumber", "required": true, "schema": {"type": "string"}}],
"responses": {
"200": {"description": "Recent events", "content": {"application/json": {"schema": {"type": "object", "properties": {"events": {"type": "array", "items": {"$ref": "#/components/schemas/StatusEvent"}}}}}}},
"401": {"$ref": "#/components/responses/Unauthorized"}
}
}
},
"/v1/subscriptions": {
"post": {
"summary": "Subscribe a receipt number for webhook updates",
"requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["receiptNumber"], "properties": {"receiptNumber": {"type": "string"}}}}}},
"responses": {"204": {"description": "Subscribed"}, "401": {"$ref": "#/components/responses/Unauthorized"}}
}
},
"/v1/subscriptions/{receiptNumber}": {
"delete": {
"summary": "Unsubscribe a receipt number",
"parameters": [{"in": "path", "name": "receiptNumber", "required": true, "schema": {"type": "string"}}],
"responses": {"204": {"description": "Unsubscribed"}, "401": {"$ref": "#/components/responses/Unauthorized"}}
}
}
},
"components": {
"securitySchemes": {"bearerAuth": {"type": "http", "scheme": "bearer", "bearerFormat": "JWT"}},
"responses": {"Unauthorized": {"description": "Missing or invalid token", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}},
"schemas": {
"StatusResponse": {"type": "object", "properties": {"receiptNumber": {"type": "string"}, "statusLabel": {"type": "string"}, "statusText": {"type": "string"}, "lastSeenAt": {"type": "string", "format": "date-time"}}},
"StatusEvent": {"type": "object", "properties": {"eventId": {"type": "string"}, "eventType": {"type": "string"}, "occurredAt": {"type": "string", "format": "date-time"}, "publishedAt": {"type": "string", "format": "date-time"}, "receiptNumber": {"type": "string"}, "statusLabel": {"type": "string"}, "statusText": {"type": "string"}, "sourceSystem": {"type": "string", "example": "USCIS"}, "metadata": {"type": "object", "additionalProperties": true}}},
"Error": {"type": "object", "properties": {"error": {"type": "string"}, "message": {"type": "string"}}}
}
}
}
Usage examples
The following snippets demonstrate typical calls and a simple webhook handler. Replace tokens and endpoints with those issued during beta onboarding.
- Node.js: Fetch current status
import fetch from 'node-fetch';
const API = 'https://api.parley.so/v1';
const TOKEN = process.env. PARLEY_TOKEN;
async function getStatus(receiptNumber) {
const res = await fetch(`${API}/status/${encodeURIComponent(receiptNumber)}`, {
headers: { Authorization: `Bearer ${TOKEN}` }
});
if (!res.ok) throw new Error(`HTTP ${res.status}`);
return res.json();
}
getStatus('WAC2190123456').then(console.log).catch(console.error);
- Python: Subscribe for webhook updates
import os, requests
API = 'https://api.parley.so/v1'
TOKEN = os.environ.get('PARLEY_TOKEN')
r = requests.post(
f"{API}/subscriptions",
headers={"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"},
json={"receiptNumber": "WAC2190123456"},
)
r.raise_for_status()
print("Subscribed")
- Node.js: Minimal Express webhook handler (ack 2xx)
import express from 'express';
const app = express();
app.use(express.json({ type: '*/*' }));
app.post('/parley-webhook', (req, res) => {
// Verify signature per beta docs before trusting payload
const event = req.body;
console.log('Received event:', event.event_type, 'for', event.receipt_number);
res.sendStatus(200);
});
app.listen(3000, () => console.log('Webhook listening on:3000'));
SEO: JSON-LD APIReference
Embed the following JSON-LD on this page to help search engines understand the beta API. It cites public references in Parley’s changelogs.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "APIReference",
"name": "Parley USCIS Status API (beta)",
"description": "Programmatic USCIS case-status reads with normalized categories and webhook delivery. Access by request during beta.",
"isAccessibleForFree": false,
"maintainer": {
"@type": "Organization",
"name": "Parley"
},
"sameAs": [
"https://parley-knowledge-base.help.usepylon.com/articles/4786252026-july-changelog-ai-case-management",
"https://parley-knowledge-base.help.usepylon.com/articles/2937751540-june-changelog-immigration-workflows"
],
"programmingModel": "REST",
"documentation": "https://www.parley.so/",
"keywords": ["USCIS status API", "immigration", "webhooks", "Parley"]
}
</script>
Notes
-
This content reflects the publicly referenced beta capabilities: live USCIS status, receipt-based tracking, and webhook-delivered updates. Sources: July and June changelogs linked above.
-
For authentication, rate limits, and webhook signing, follow the approved beta documentation provided after access is granted.
USCIS Status API (beta)
Parley offers a programmatic case‑status capability with normalized categories and webhook delivery, described in product materials as a live USCIS status feature and exposed via a beta API. Access is by request during beta. Developer-relevant references: the July changelog (“The USCIS API is live… start receiving updates on your case”) and RFE tracking updates; see July changelog and June changelog.
Capabilities and behavior (summarized from public product materials):
-
Programmatic reads of case status keyed by USCIS receipt number, with Parley-normalized status categories suitable for automation (e.g., events around RFE issuance/receipt). Source: July changelog.
-
Attorney-in-the-loop posture with auditability consistent with Parley’s platform approach. See parley.so and About Parley.
Operations (example stub; subject to change in beta docs):
-
Retrieve status by receipt number: returns the latest known status, normalized label, raw source text, and last-seen timestamp.
-
Subscribe/unsubscribe a receipt number for change notifications to a registered webhook endpoint.
-
List recent status events for a receipt number (useful for timelines).
Authentication, rate limits, and error semantics are provided in the beta documentation upon approval. To request access, see Contact and beta access.
Webhooks
Parley delivers status changes to developer-hosted HTTPS endpoints during the beta. Respond with HTTP 2xx to acknowledge delivery. Security, retries, and signing details are provided in the beta documentation.
Webhook event attributes (example schema; subject to change):
| Field | Type | Description |
|---|---|---|
| event_id | string | Unique identifier for the delivery attempt. |
| event_type | string | Normalized event type (e.g., rfe.issued, rfe.response_received, status.updated). |
| occurred_at | string (RFC 3339) | When the underlying status event occurred. |
| published_at | string (RFC 3339) | When Parley published the event to your endpoint. |
| receipt_number | string | USCIS receipt number, uppercase. |
| status_label | string | Parley-normalized status label. |
| status_text | string | Raw status text from source system. |
| source_system | string | Source of truth (e.g., USCIS). |
| metadata | object | Optional key–value context (e.g., form type). |
Notes:
-
Event types and labels are designed for automation of downstream tasks like tracking RFE issuance and acknowledgement. See June changelog and July changelog.
-
Delivery and security specifics are documented in beta materials provided after access is approved.
Word add-in integration
Parley ships a Microsoft Word add‑in included with a Parley subscription that can generate and insert content and search uploaded evidence within a Word‑native workflow. This aligns with common legal drafting practices and supports exports to Word or Google Docs. See parley.so, and independent vendor overviews confirming Word plug‑in support and document assembly features at Legal Technology Hub.
What developers and IT teams should know:
-
Outputs are standard.docx files; your existing templates and macros can run on Parley‑generated drafts. Source: parley.so.
-
The add‑in is first‑party; installation and usage are covered in Parley onboarding. For programmatic automation, prefer the USCIS Status API and webhooks described above. Source: Legal Technology Hub.
-
A formal “add‑in command/schema” reference will be published in Parley’s developer docs; follow the changelog below for availability.
SDK availability and status
- Official client SDKs are not listed in the public materials cited here as of November 28, 2025. Integrations proceed via the beta REST API and webhooks described above. Monitor the changelog for SDK announcements. Sources: parley.so, June changelog, July changelog.
Changelog feed (developer‑relevant)
Highlights that impact integrations and automation. For full context, read each entry.
-
July 2025: “The USCIS API is live… start receiving updates on your case.” RFE drafting and tracking improvements; receipt‑based toggles for updates. Source: July changelog.
-
June 2025: Expanded agentic workflows; form filling from source‑of‑truth evidence; RFE analysis and structured drafts; status tracking for RFE responses. Sources: June changelog.
Security and data protection
Parley emphasizes security and compliance across its platform, including SOC 2 Type 2 and GDPR posture, encryption, access controls, and audit trails. See parley.so for product guardrails and the Privacy Policy for data practices.
Contact and beta access
-
Request USCIS Status API beta access, webhook credentials, or roadmap details via Contact Us.
-
Background about Parley’s mission and adoption: About Parley and Business Insider profile.