Download OpenAPI specification:
All API endpoints require authentication using a Bearer token in the Authorization header:
Authorization: Bearer YOUR_API_KEY
Two kinds of API key can authenticate against this API. Both are used the same way — as a Bearer token, or in the apiKey body field of POST /new-lead.
Attached to an individual user account and carry that account's permissions.
Belong to the organization rather than to a single user, so integrations keep working as individual team members come and go.
The API manages franchise information across 69 jurisdictions:
ca = California, ny = New York)dc = Washington, District of Columbiausot_gu)usot_as) usot_nmi)usot_pr)usot_vi)ca_nl), Prince Edward Island (ca_pe), Nova Scotia (ca_ns), New Brunswick (ca_nb), Quebec (ca_qc), Ontario (ca_on), Manitoba (ca_mb), Saskatchewan (ca_sk), Alberta (ca_ab), British Columbia (ca_bc)ca_yt), Northwest Territories (ca_nt), Nunavut (ca_nu)Retrieve a list of all brands that the authenticated agent has access to. Ids returned should be referenced for usage in the "state" routes.
{- "brands": [
- {
- "id": "123e4567-e89b-12d3-a456-426614174000",
- "name": "Pizza Palace",
- "externalBrandName": "Pizza Palace Franchising Co."
}
]
}Map external brand names to FranchiseSystems brands. Call this when activating an integration or when the external brand name changes.
Each match pairs a FranchiseSystems brand ID with the brand name as it appears in your system. This stored name is returned in the GET /brands response as externalBrandName, allowing you to detect name divergence on demand.
required | Array of objects [ 1 .. 100 ] items Array of brand ID to external brand name mappings |
{- "matches": [
- {
- "brandId": "123e4567-e89b-12d3-a456-426614174000",
- "externalBrandName": "Tom's Turkey Farm Co."
}, - {
- "brandId": "987fcdeb-e89b-12d3-a456-426614174000",
- "externalBrandName": "Andrew's Apples (TM)"
}
]
}{- "results": [
- {
- "brandId": "123e4567-e89b-12d3-a456-426614174000",
- "success": true
}, - {
- "brandId": "987fcdeb-e89b-12d3-a456-426614174000",
- "success": false,
- "error": "No external management record found for this brand"
}
]
}Capture a new sales or marketing lead for one of your matched brands. Use this to forward leads collected in your own systems (web forms, landing pages, partner integrations) into Franchise Systems Ai.
Unlike the other endpoints in this API, /new-lead does not read the
Authorization: Bearer header. Pass your API key in the apiKey field of the
request body instead. The key must have the sales.write permission on the
target brand.
Identify the brand with the externalBrandId that Franchise Systems Ai issues
to you. These identifiers are assigned and provided by Franchise Systems Ai
directly — they are not values you choose, and they are unrelated to the
POST /brands/match name mapping. If the identifier is not recognised, the
request fails with 404 Brand not found.
sales — creates a sales lead (applicant). If a lead already exists for the
email on this brand, the request returns 409 and no lead is created.marketing — creates a marketing prospect.| apiKey required | string Your Franchise Systems API key. Sent in the request body rather than the
|
| externalBrandId required | string Identifier for the target brand, assigned and provided to you by Franchise Systems Ai directly. Contact Franchise Systems Ai to obtain the identifier for each brand you integrate with — it is not a value you choose. |
| leadType required | string Enum: "sales" "marketing"
|
| firstName required | string |
| lastName | string |
| email required | string <email> |
| phone | string |
| utmParams | string UTM tracking parameters encoded as a JSON string — a flat object of UTM
keys to string values (e.g. |
| additionalFields | string Custom field submissions encoded as a JSON string — an array of
|
{- "apiKey": "YOUR_API_KEY",
- "externalBrandId": "ext-brand-42",
- "leadType": "sales",
- "firstName": "Jane",
- "lastName": "Doe",
- "email": "jane.doe@example.com",
- "phone": "+15551234567",
- "utmParams": "{\"utm_source\":\"partner\",\"utm_medium\":\"referral\",\"utm_campaign\":\"spring\"}"
}{- "message": "Sales lead added"
}Retrieve the franchising status for all states for a specific brand
| brandId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 UUID of the brand |
{- "ak": false,
- "al": true,
- "ar": false,
- "az": true,
- "ca": true,
- "co": false,
- "ct": false,
- "dc": false,
- "de": false,
- "fl": false,
- "ga": false,
- "hi": false,
- "ia": false,
- "id": false,
- "il": false,
- "in": false,
- "ks": false,
- "ky": false,
- "la": false,
- "ma": false,
- "md": false,
- "me": false,
- "mi": false,
- "mn": false,
- "mo": false,
- "ms": false,
- "mt": false,
- "nc": false,
- "nd": false,
- "ne": false,
- "nh": false,
- "nj": false,
- "nm": false,
- "nv": false,
- "ny": false,
- "oh": false,
- "ok": false,
- "or": false,
- "pa": false,
- "ri": false,
- "sc": false,
- "sd": false,
- "tn": false,
- "tx": false,
- "ut": false,
- "va": false,
- "vt": false,
- "wa": false,
- "wi": false,
- "wv": false,
- "wy": false,
- "usot_gu": false,
- "usot_as": false,
- "usot_nmi": false,
- "usot_pr": false,
- "usot_vi": false,
- "ca_nl": false,
- "ca_pe": false,
- "ca_ns": false,
- "ca_nb": false,
- "ca_qc": false,
- "ca_on": false,
- "ca_mb": false,
- "ca_sk": false,
- "ca_ab": false,
- "ca_bc": false,
- "ca_yt": false,
- "ca_nt": false,
- "ca_nu": false
}Update whether a brand is actively franchising in a specific state
| brandId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 UUID of the brand |
| stateId required | string (State) Enum: "ak" "al" "ar" "az" "ca" "co" "ct" "dc" "de" "fl" "ga" "hi" "ia" "id" "il" "in" "ks" "ky" "la" "ma" "md" "me" "mi" "mn" "mo" "ms" "mt" "nc" "nd" "ne" "nh" "nj" "nm" "nv" "ny" "oh" "ok" "or" "pa" "ri" "sc" "sd" "tn" "tx" "ut" "va" "vt" "wa" "wi" "wv" "wy" "usot_gu" "usot_as" "usot_nmi" "usot_pr" "usot_vi" "ca_nl" "ca_pe" "ca_ns" "ca_nb" "ca_qc" "ca_on" "ca_mb" "ca_sk" "ca_ab" "ca_bc" "ca_yt" "ca_nt" "ca_nu" State identifier (US state abbreviation or Canadian province code) |
| is_active required | boolean Whether the brand is actively franchising in this state |
{- "is_active": true
}{ }Retrieve detailed state-specific information for a brand
| brandId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 UUID of the brand |
| stateId required | string (State) Enum: "ak" "al" "ar" "az" "ca" "co" "ct" "dc" "de" "fl" "ga" "hi" "ia" "id" "il" "in" "ks" "ky" "la" "ma" "md" "me" "mi" "mn" "mo" "ms" "mt" "nc" "nd" "ne" "nh" "nj" "nm" "nv" "ny" "oh" "ok" "or" "pa" "ri" "sc" "sd" "tn" "tx" "ut" "va" "vt" "wa" "wi" "wv" "wy" "usot_gu" "usot_as" "usot_nmi" "usot_pr" "usot_vi" "ca_nl" "ca_pe" "ca_ns" "ca_nb" "ca_qc" "ca_on" "ca_mb" "ca_sk" "ca_ab" "ca_bc" "ca_yt" "ca_nt" "ca_nu" State identifier (US state abbreviation or Canadian province code) |
{- "state": {
- "id": "8fa6dbc4-edc6-404f-8f0b-6e8eb5057706",
- "created_at": "2025-05-22T09:45:30.684915+00:00",
- "state": "ak",
- "brand_id": "22a7b17b-6d95-4f7d-bc90-a687fcaeeab3",
- "max_locations": null,
- "registration_expires_at": "2025-05-03T21:00:00+00:00",
- "fdd_filed_at": "2025-05-04T21:00:00+00:00",
- "fdd_filing_required": true,
- "fdd_renewal_deadline": "2025-05-02T21:00:00+00:00",
- "franchise_fee_collection_rules": "No general escrow requirement, but DFPI may impose escrow or fee deferral as a condition if franchisor's financials or experience are deficient (merit review) . Otherwise no escrow if no condition.",
- "governing_agency_address": "2101 Arena Blvd, Sacramento, CA 95834",
- "governing_agency_email": "postman@testing.com",
- "governing_agency_name": "California Department of Financial Protection & Innovation",
- "governing_agency_phone": "(866) 275-2677",
- "insurance_requirements": "No state-imposed insurance requirements (aside from disclosure of any franchisee insurance obligations in FDD).",
- "is_active": true,
- "other_notes": "California requires delivering the FDD 14 days before sale (FTC rule) and also a 5-day contract review period if the franchise agreement is given at signing (Cal. Corp. Code §31119). Franchise brokers must be disclosed and may need to register.",
- "registration_agent": "02b9c769-7f30-44b1-94d4-d2fed6eccf25",
- "registration_date": "2025-05-14T21:00:00+00:00",
- "registration_or_filing_fee": 123123,
- "registration_required": true,
- "registration_status": "filed_registered",
- "renewal_fee": null,
- "renewal_fee_timeframe": "yearly",
- "special_state_addenda_requirements": "Yes – Must include California State Cover Page with specific cautions and legends in the FDD, and any required state addenda (e.g. California-specific disclosures) .",
- "surety_bond_requirements": "No general requirement (however, DFPI may accept a surety bond in lieu of escrow for conditional registrations).",
- "trademark_requirements": "No (California does not mandate a federally registered trademark for registration or exemption; state has separate \"trade name\" exemption §31111 for marketing plan license arrangements, not commonly used).",
- "annual_renewal_information": null,
- "initial_registration_information": null,
- "waiting_period_information": "Yo, just testing",
- "fdd_comment_letters": 2,
- "fdd_filing_duration_days": 30,
- "fdd_filing_type": "renewal",
- "is_filing_open": false,
- "financial_assurance": "Surety bond or escrow account required",
- "general_information": "Additional state-specific franchise requirements",
- "is_action_required": true,
- "legal_representative_email": "legal@example.com",
- "legal_representative_first_name": "John",
- "legal_representative_last_name": "Smith",
- "legal_representative_phone": "(555) 123-4567",
- "legal_representative_role": "General Counsel",
- "registrationAgent": {
- "id": "02b9c769-7f30-44b1-94d4-d2fed6eccf25",
- "firstName": "Bill",
- "lastName": "Smith",
- "profilePictureUrl": "02b9c769d2fed6eccf25-1520767d-0949-4049-b826-36a7dcc26c0f"
}, - "fdd": {
- "id": "fdd123e4-567e-89ab-cdef-123456789abc",
- "title": "Pizza Palace Franchise Disclosure Document",
- "prepared": true,
- "date_last_modified": "2025-05-15T14:30:00+00:00"
}, - "locations": 1,
- "filing_activity": [
- {
- "date": "2025-05-15T14:30:00+00:00",
- "headline": "FDD Filed with State Agency",
- "description": "Franchise Disclosure Document successfully filed with California Department of Financial Protection & Innovation",
- "active": true
}, - {
- "date": "2025-03-10T09:15:00+00:00",
- "headline": "Registration Renewal Submitted",
- "description": "Annual registration renewal application submitted",
- "active": true
}
]
}
}Update state-specific franchising information for a brand
| brandId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 UUID of the brand |
| stateId required | string (State) Enum: "ak" "al" "ar" "az" "ca" "co" "ct" "dc" "de" "fl" "ga" "hi" "ia" "id" "il" "in" "ks" "ky" "la" "ma" "md" "me" "mi" "mn" "mo" "ms" "mt" "nc" "nd" "ne" "nh" "nj" "nm" "nv" "ny" "oh" "ok" "or" "pa" "ri" "sc" "sd" "tn" "tx" "ut" "va" "vt" "wa" "wi" "wv" "wy" "usot_gu" "usot_as" "usot_nmi" "usot_pr" "usot_vi" "ca_nl" "ca_pe" "ca_ns" "ca_nb" "ca_qc" "ca_on" "ca_mb" "ca_sk" "ca_ab" "ca_bc" "ca_yt" "ca_nt" "ca_nu" State identifier (US state abbreviation or Canadian province code) |
| max_locations | number or null Maximum number of locations allowed in this state |
| registration_expires_at | string or null <date-time> When the current registration expires |
| fdd_filed_at | string or null <date-time> When the FDD was filed |
| fdd_filing_required | boolean or null Whether FDD filing is required in this state |
| fdd_renewal_deadline | string or null <date-time> Deadline for FDD renewal |
| franchise_fee_collection_rules | string or null Rules governing franchise fee collection |
| governing_agency_address | string or null Address of the governing agency |
| governing_agency_email | string or null <email> Email of the governing agency |
| governing_agency_name | string or null Name of the governing agency |
| governing_agency_phone | string or null Phone number of the governing agency |
| insurance_requirements | string or null Insurance requirements for franchisees |
| other_notes | string or null Additional notes or comments |
| registration_date | string or null <date-time> Date of registration |
| registration_or_filing_fee | number or null Cost of registration or filing fee |
| registration_required | boolean or null Whether registration is required in this state |
| registration_status | string (StateRegistrationStatus) Enum: "none" "filed_not_registered" "filed_registered" Current registration status for the brand in this state. This field drives several pieces of UI in the FSAI dashboard with absolute authority — set it to reflect the real-world status, and the dashboard will respond accordingly.
Related display fields the dashboard derives from this value plus
|
| renewal_fee | number or null Cost of renewal fee |
| renewal_fee_timeframe | string (AgreementFeeTimeframe) Enum: "annually" "biannually" "monthly" "quarterly" "yearly" Timeframe for fee payments |
| special_state_addenda_requirements | string or null Special state-specific addenda requirements |
| surety_bond_requirements | string or null Surety bond requirements |
| trademark_requirements | string or null Trademark-related requirements |
| annual_renewal_information | string or null Information about annual renewal process |
| initial_registration_information | string or null Information about initial registration process |
| waiting_period_information | string or null Information about waiting periods |
| fdd_comment_letters | number or null Number of comment letters received for FDD |
| fdd_filing_duration_days | number or null Duration in days for FDD filing process |
| fdd_filing_type | string or null Enum: "initial" "renewal" "amendment" "exemption" Type of the current/most-recent FDD filing in this state.
Drives the "X Filing" copy shown in the FSAI dashboard's Filing
section (e.g. |
| is_filing_open | boolean Whether a filing is currently open / in progress with the regulator for this state. When true, FSAI surfaces a blue indicator on the state icon to signal an in-progress filing. |
| financial_assurance | string or null Financial assurance requirements |
| general_information | string or null General information and notes |
| is_action_required | boolean or null Whether action is required for this state |
| legal_representative_email | string or null <email> Email of the legal representative |
| legal_representative_first_name | string or null First name of the legal representative |
| legal_representative_last_name | string or null Last name of the legal representative |
| legal_representative_phone | string or null Phone number of the legal representative |
| legal_representative_role | string or null Role/title of the legal representative |
{- "max_locations": 0,
- "registration_expires_at": "2019-08-24T14:15:22Z",
- "fdd_filed_at": "2019-08-24T14:15:22Z",
- "fdd_filing_required": true,
- "fdd_renewal_deadline": "2019-08-24T14:15:22Z",
- "franchise_fee_collection_rules": "string",
- "governing_agency_address": "string",
- "governing_agency_email": "user@example.com",
- "governing_agency_name": "string",
- "governing_agency_phone": "string",
- "insurance_requirements": "string",
- "other_notes": "string",
- "registration_date": "2019-08-24T14:15:22Z",
- "registration_or_filing_fee": 0,
- "registration_required": true,
- "registration_status": "filed_registered",
- "renewal_fee": 0,
- "renewal_fee_timeframe": "yearly",
- "special_state_addenda_requirements": "string",
- "surety_bond_requirements": "string",
- "trademark_requirements": "string",
- "annual_renewal_information": "string",
- "initial_registration_information": "string",
- "waiting_period_information": "string",
- "fdd_comment_letters": 0,
- "fdd_filing_duration_days": 0,
- "fdd_filing_type": "initial",
- "is_filing_open": true,
- "financial_assurance": "string",
- "general_information": "string",
- "is_action_required": true,
- "legal_representative_email": "user@example.com",
- "legal_representative_first_name": "string",
- "legal_representative_last_name": "string",
- "legal_representative_phone": "string",
- "legal_representative_role": "string"
}{ }Update the filing activity records for a specific brand-state combination
| brandId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 UUID of the brand |
| stateId required | string (State) Enum: "ak" "al" "ar" "az" "ca" "co" "ct" "dc" "de" "fl" "ga" "hi" "ia" "id" "il" "in" "ks" "ky" "la" "ma" "md" "me" "mi" "mn" "mo" "ms" "mt" "nc" "nd" "ne" "nh" "nj" "nm" "nv" "ny" "oh" "ok" "or" "pa" "ri" "sc" "sd" "tn" "tx" "ut" "va" "vt" "wa" "wi" "wv" "wy" "usot_gu" "usot_as" "usot_nmi" "usot_pr" "usot_vi" "ca_nl" "ca_pe" "ca_ns" "ca_nb" "ca_qc" "ca_on" "ca_mb" "ca_sk" "ca_ab" "ca_bc" "ca_yt" "ca_nt" "ca_nu" State identifier (US state abbreviation or Canadian province code) |
required | Array of objects (FilingActivity) Array of filing activities to update for the brand-state combination. Note: This operation completely replaces all existing filing activities with the provided array. The entire activity array must always be passed, as the previous activity records will be wiped and reset with what is provided here. |
{- "activity": [
- {
- "headline": "FDD Filed with State Agency",
- "description": "Franchise Disclosure Document successfully filed with California Department of Financial Protection & Innovation",
- "date": "2025-05-15T14:30:00+00:00",
- "active": true
}, - {
- "headline": "Registration Renewal Submitted",
- "description": "Annual registration renewal application submitted",
- "date": "2025-03-10T09:15:00+00:00",
- "active": true
}
]
}{ }Update filing activity records for multiple states of a single brand in one transactional operation.
Modes:
replace (default): Replaces all existing activities for each state with the provided activitiesappend: Adds new activities to existing ones without deletingMode Resolution:
mode applies to all states unless overriddenmode overrides the request-level mode for that specific stateTransaction Behavior: All updates are applied within a single database transaction. If any update fails, the entire operation is rolled back and no changes are persisted.
| brandId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 UUID of the brand |
| mode | string (FilingActivityMode) Enum: "replace" "append" Mode for updating filing activities:
|
required | Array of objects (StateFilingActivityUpdateItem) [ 1 .. 69 ] items Array of state filing activity updates (maximum 69 jurisdictions) |
{- "mode": "replace",
- "states": [
- {
- "state_id": "ca",
- "activity": [
- {
- "headline": "FDD Filed with State Agency",
- "description": "Filed with California DFPI",
- "date": "2025-05-15T14:30:00+00:00",
- "active": true
}
]
}, - {
- "state_id": "ny",
- "mode": "append",
- "activity": [
- {
- "headline": "Registration Renewal Submitted",
- "description": "Annual renewal submitted",
- "date": "2025-03-10T09:15:00+00:00",
- "active": true
}
]
}
]
}{- "updated": 2,
- "state_ids": [
- "ca",
- "ny"
]
}Retrieve all filing activities across all states for a specific brand.
Returns a list of states with their associated filing activities. Only states that have filing activity records are included in the response.
| brandId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 UUID of the brand |
{- "activities": [
- {
- "state_id": "ca",
- "filing_activity": [
- {
- "headline": "FDD Filed",
- "description": "Filed with California DFPI",
- "date": "2025-05-15T14:30:00+00:00",
- "active": true
}
]
}, - {
- "state_id": "ny",
- "filing_activity": [
- {
- "headline": "Registration Renewal",
- "description": "Annual renewal submitted",
- "date": "2025-03-10T09:15:00+00:00",
- "active": true
}
]
}
]
}Retrieve state overview information for all or specified states for a brand.
Use the optional state_ids query parameter to filter results to specific states.
If state_ids is not provided, returns all states that have records for the brand.
| brandId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 UUID of the brand |
| state_ids | string Example: state_ids=ca,ny,tx Comma-separated list of state codes to filter results (e.g., "ca,ny,tx") |
{- "states": [
- {
- "id": "8fa6dbc4-edc6-404f-8f0b-6e8eb5057706",
- "created_at": "2025-05-22T09:45:30.684915+00:00",
- "state": "ca",
- "brand_id": "22a7b17b-6d95-4f7d-bc90-a687fcaeeab3",
- "is_active": true,
- "registration_required": true,
- "fdd_filing_required": true,
- "locations": 5,
- "filing_activity": [ ]
}
]
}Update multiple states for a single brand in one transactional operation.
Transaction Behavior: All updates are applied within a single database transaction. If any update fails, the entire operation is rolled back and no changes are persisted.
Validation: All state updates are validated before the transaction begins. If validation fails for any state, detailed error messages are returned with indices for easy identification.
| brandId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 UUID of the brand |
required | Array of objects (StateUpdateItem) [ 1 .. 69 ] items Array of state updates (maximum 69 jurisdictions - all US states, DC, territories, and Canadian provinces) |
{- "states": [
- {
- "state_id": "ca",
- "updates": {
- "registration_required": true,
- "fdd_filing_required": true,
- "registration_status": "filed_registered"
}
}, - {
- "state_id": "ny",
- "updates": {
- "registration_required": true,
- "fdd_filing_required": false,
- "registration_or_filing_fee": 750
}
}
]
}{- "updated": 2,
- "state_ids": [
- "ca",
- "ny"
]
}Update states for multiple brands in one transactional operation.
Transaction Behavior: All updates across all brands are applied within a single database transaction. If any update fails for any brand, the entire operation is rolled back and no changes are persisted.
Validation: All state updates for all brands are validated before the transaction begins. If validation fails for any state in any brand, detailed error messages are returned with brand IDs and indices for easy identification.
Authorization: The authenticated user must have write access to all brands in the request.
required | Array of objects (BrandStateUpdateItem) [ 1 .. 50 ] items Array of brand updates (maximum 50 brands) |
{- "brands": [
- {
- "brand_id": "123e4567-e89b-12d3-a456-426614174000",
- "states": [
- {
- "state_id": "ca",
- "updates": {
- "registration_required": true,
- "fdd_filing_required": true
}
}
]
}, - {
- "brand_id": "987fcdeb-51a2-3b4c-d5e6-789012345678",
- "states": [
- {
- "state_id": "tx",
- "updates": {
- "registration_required": false
}
}, - {
- "state_id": "fl",
- "updates": {
- "registration_required": false
}
}
]
}
]
}{- "updated": 4,
- "results": [
- {
- "brand_id": "123e4567-e89b-12d3-a456-426614174000",
- "state_ids": [
- "ca"
]
}, - {
- "brand_id": "987fcdeb-51a2-3b4c-d5e6-789012345678",
- "state_ids": [
- "tx",
- "fl"
]
}
]
}Manage DocuSign PowerForm signing links per state. When a signing link is set, it replaces the default DocuSeal signing flow for applicants in that state.
Set or update a signing link (e.g. DocuSign PowerForm URL) for a specific brand-state combination.
When set, the signing link replaces the default DocuSeal signing flow for applicants in that state. If a signing link already exists for the given state and document type, the URL is updated in place.
Pass url: null to remove the state's signing-link override. The state then falls
back to the brand's default signing link (if one is configured). Removal returns
{ "state_id": "<state>", "url": null }.
| brandId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 UUID of the brand |
| stateId required | string (State) Enum: "ak" "al" "ar" "az" "ca" "co" "ct" "dc" "de" "fl" "ga" "hi" "ia" "id" "il" "in" "ks" "ky" "la" "ma" "md" "me" "mi" "mn" "mo" "ms" "mt" "nc" "nd" "ne" "nh" "nj" "nm" "nv" "ny" "oh" "ok" "or" "pa" "ri" "sc" "sd" "tn" "tx" "ut" "va" "vt" "wa" "wi" "wv" "wy" "usot_gu" "usot_as" "usot_nmi" "usot_pr" "usot_vi" "ca_nl" "ca_pe" "ca_ns" "ca_nb" "ca_qc" "ca_on" "ca_mb" "ca_sk" "ca_ab" "ca_bc" "ca_yt" "ca_nt" "ca_nu" State identifier (US state abbreviation or Canadian province code) |
| url required | string <uri> The full signing link URL (e.g. DocuSign PowerForm URL) |
| provider required | string (SigningLinkProvider) Value: "docusign" The signing platform provider |
| document_type required | string (SigningLinkDocumentType) Enum: "fdd" "franchise_agreement" The type of document the signing link is for |
object or null (PowerformRoles) Maps role types to PowerForm role names as configured in the DocuSign template.
The |
{- "provider": "docusign",
- "document_type": "fdd"
}{- "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
- "provider": "docusign",
- "document_type": "fdd",
- "powerform_roles": {
- "signer_1": "PrincipalSigner",
- "viewer_1": "ViewerOne"
}, - "created_at": "2026-02-10T12:00:00+00:00",
- "updated_at": "2026-02-10T12:00:00+00:00"
}Set signing links for multiple states and optionally a default signing link in one transactional operation.
default_url sets or updates the default signing link on the external management organization relationship.
This default is used as a fallback for states that don't have a state-specific signing link.states array sets per-state signing links. Each state can have a different URL.
Pass url: null for a state to remove its override so it falls back to default_url.Note: The authenticated user must have write access to the brand.
| brandId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 UUID of the brand |
| provider required | string (SigningLinkProvider) Value: "docusign" The signing platform provider |
| document_type required | string (SigningLinkDocumentType) Enum: "fdd" "franchise_agreement" The type of document the signing link is for |
| default_url | string <uri> Default signing link URL to set on the external management organization. Used as a fallback for states that don't have a state-specific signing link. |
object or null (PowerformRoles) Maps role types to PowerForm role names as configured in the DocuSign template.
The | |
Array of objects (BulkSigningLinkStateItem) Per-state signing link overrides |
{- "provider": "docusign",
- "document_type": "fdd",
- "states": [
- {
- "state_id": "tx",
- "url": null
}
]
}{- "default": {
- "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
- "powerform_roles": {
- "signer_1": "PrincipalSigner"
}
}, - "states": [
- {
- "state_id": "ca",
- "id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
- "powerform_roles": {
- "signer_1": "PrincipalSigner",
- "viewer_1": "ViewerOne"
}
}, - {
- "state_id": "ny",
- "id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
- "powerform_roles": null
}, - {
- "state_id": "tx",
- "id": null,
- "url": null,
- "powerform_roles": null
}
]
}Set or update the organization-level default signing link for a brand.
The default signing link is used as a fallback for any state that does not have a state-specific signing link configured. If a default signing link already exists, the URL is updated in place.
Note: The brand must have an external management organization configured. The authenticated user must have write access to the brand.
| brandId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 UUID of the brand |
| url required | string <uri> The full signing link URL (e.g. DocuSign PowerForm URL) |
| provider required | string (SigningLinkProvider) Value: "docusign" The signing platform provider |
| document_type required | string (SigningLinkDocumentType) Enum: "fdd" "franchise_agreement" The type of document the signing link is for |
object or null (PowerformRoles) Maps role types to PowerForm role names as configured in the DocuSign template.
The |
{- "provider": "docusign",
- "document_type": "fdd"
}{- "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
- "provider": "docusign",
- "document_type": "fdd",
- "powerform_roles": {
- "signer_1": "PrincipalSigner",
- "viewer_1": "ViewerOne"
}, - "created_at": "2026-02-10T12:00:00+00:00",
- "updated_at": "2026-02-10T12:00:00+00:00"
}Retrieve the default signing link and all state-specific signing links for a brand.
Use this endpoint to verify which signing links are currently configured.
The default field contains the fallback signing link set on the external management organization.
The states array contains all state-specific overrides.
| brandId required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 UUID of the brand |
{- "default": {
- "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
- "provider": "docusign",
- "document_type": "fdd",
- "powerform_roles": {
- "signer_1": "PrincipalSigner"
}
}, - "states": [
- {
- "state_id": "ca",
- "id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
- "provider": "docusign",
- "document_type": "fdd",
- "powerform_roles": {
- "signer_1": "PrincipalSigner",
- "viewer_1": "ViewerOne"
}
}, - {
- "state_id": "ny",
- "id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
- "provider": "docusign",
- "document_type": "fdd",
- "powerform_roles": null
}
]
}Receive signing events from external systems. Events track document signing status and trigger application workflow side effects.
Receive a normalized document signing event from an external system.
When a DocuSign PowerForm event occurs (delivered, completed, voided, or declined), the external system forwards
the event to this endpoint. The fsai_reference_id in the payload is used to look up the
corresponding signing reference and update its status.
On completion, the applicant's FDD step is automatically marked as complete and the FDD lockout period begins.
| event_type required | string Enum: "envelope-completed" "envelope-voided" "envelope-declined" "envelope-delivered" The type of signing event. Deprecated: |
| fsai_reference_id required | string <uuid> The FSAI reference ID that was embedded in the PowerForm URL via the |
| envelope_id | string Optional DocuSign envelope ID. Not used for processing — the signing request is
identified via |
| status required | string Enum: "completed" "voided" "declined" "viewed" "started" The current status of the envelope |
| completed_at | string <date-time> When the envelope was completed (required when status is |
object Optional raw DocuSign Connect event data for audit purposes |
{- "event_type": "envelope-completed",
- "fsai_reference_id": "1c9ca540-47e5-4513-9c77-8d80bade9773",
- "envelope_id": "string",
- "status": "completed",
- "completed_at": "2019-08-24T14:15:22Z",
- "raw_event": { }
}{- "success": true
}