Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.partneros.ai/llms.txt

Use this file to discover all available pages before exploring further.

The Partners API gives you programmatic control over partner records in your PartnerOS organization. You can trigger AI-powered domain enrichment that populates industry data, employee counts, revenue estimates, and a multi-dimensional fit score. You can also submit partner applications on behalf of prospective partners and upload banner images for application pages. All partner endpoints that read or modify your organization’s data require a valid session. The application submission endpoint (POST /api/partners/applications/submit) is public and does not require authentication, because it is designed to be called by prospective partners filling out your published application form.

Analyze a partner

Runs AI-powered domain analysis on a partner record. The pipeline scrapes and interprets the partner’s web presence to populate enriched fields (industry, description, employees, companyRevenue, regions, languages, services) and computes a multi-dimensional fit score. Results are cached by domain for 7 days to avoid redundant LLM calls. POST /api/partners/{partnerId}/analyze

Path parameters

partnerId
string
required
UUID of the partner record to analyze. The partner must belong to your active organization.

Response fields

partner
object
required
The updated partner record after enrichment.
aiInsights
object
required
Dimensional breakdown of the AI fit assessment.

Example

curl --request POST \
  --url "https://app.partneros.com/api/partners/3f2e1d4c-89ab-4cde-8f01-123456789abc/analyze" \
  --header "Content-Type: application/json" \
  --header "Cookie: session_token=<your-session-token>"
If the partner record has no domain set, the analysis runs on company name alone and may produce lower-confidence results. Set a domain on the partner record before triggering analysis for best results.

Submit a partner application

Accepts a public partner application submission. This endpoint is unauthenticated and is intended to be called from your published partner application form. You must provide the application’s public slug and valid form data that satisfies all required fields and agreements defined in the application builder. POST /api/partners/applications/submit

Body parameters

slug
string
required
Public slug identifier of the partner application form. Found in your application’s share settings.
submissionData
object
required
Key-value map of field responses. Keys are the fieldKey values defined in the application builder. Values are strings (use "true" for checkbox fields that are checked).
agreedSections
string[]
required
Array of agreement section IDs that the applicant has accepted. Required agreements must be present or the submission is rejected.
affiliateSlug
string
Optional affiliate tracking slug. When provided, the submission is attributed to the corresponding affiliate link and the link’s lead count is incremented.
turnstileToken
string
Cloudflare Turnstile verification token. Required in production to prevent automated submissions.

Response fields

success
boolean
required
true when the submission was accepted and recorded.
successMessage
string
Custom confirmation message configured in the application’s content settings, displayed to the applicant after submission.

Example

curl --request POST \
  --url "https://app.partneros.com/api/partners/applications/submit" \
  --header "Content-Type: application/json" \
  --data '{
    "slug": "acme-partner-application",
    "submissionData": {
      "company_name": "Bright Solutions Ltd",
      "company_website": "https://brightsolutions.example",
      "contact_name": "Jane Smith",
      "contact_email": "jane@brightsolutions.example",
      "years_in_business": "8",
      "partner_type": "consulting",
      "agree_to_nda": "true"
    },
    "agreedSections": ["nda-section", "terms-section"],
    "turnstileToken": "0.XXXX..."
  }'
The application must have a publishState of "published" and isPublic set to true in its share settings. Submissions to unpublished or private applications return 404 Not Found.

Upload an application banner image

Uploads a banner image for a partner application page. A public URL is returned for use in the application builder. POST /api/partners/applications/banner Accepts multipart/form-data. Requires authentication.

Form fields

file
file
required
The image file to upload. Accepted formats: JPEG, PNG, WebP, GIF. Maximum size: 5 MB.

Response fields

bannerImagePath
string
required
Storage path of the uploaded image within the banner bucket.
bannerImageUrl
string
required
Publicly accessible URL of the uploaded banner image.
storageProvider
string
required
Always "supabase".

Example

curl --request POST \
  --url "https://app.partneros.com/api/partners/applications/banner" \
  --header "Cookie: session_token=<your-session-token>" \
  --form "file=@/path/to/banner.png"
This endpoint enforces a rate limit of 20 uploads per minute per user per organization. Exceeding this limit returns 429 Too Many Requests.

Uploads a PDF legal template to Docuseal and records it as a reusable or one-off agreement template for a specific partner. Requires authentication and a non-partner role. POST /api/partners/legal-templates Accepts multipart/form-data.

Form fields

file
file
required
The PDF document to use as the agreement template. Only PDF files are accepted.
partnerId
string
required
UUID of the partner this template is associated with.
name
string
required
Display name of the template. Must be unique within your organization (case-insensitive).
description
string
Optional description of the template’s purpose.
scope
string
required
Template scope: "reusable" (available for multiple agreements) or "one_off" (single-use).
fieldPlacements
string
required
JSON-encoded array of field placement objects that define where signature, date, and other fields appear on the PDF pages.
roleDefinitions
string
required
JSON-encoded array of signer role names (e.g. ["Partner", "PartnerOS"]).

Response fields

success
boolean
required
true when the template was created successfully.
template
object
required
The newly created legal template record.

Example

curl --request POST \
  --url "https://app.partneros.com/api/partners/legal-templates" \
  --header "Cookie: session_token=<your-session-token>" \
  --form "file=@/path/to/partner-nda.pdf" \
  --form "partnerId=3f2e1d4c-89ab-4cde-8f01-123456789abc" \
  --form "name=Standard Partner NDA 2026" \
  --form "description=Mutual non-disclosure agreement for new partners" \
  --form 'scope=reusable' \
  --form 'fieldPlacements=[{"name":"Signature","type":"signature","role":"Partner","required":true,"page":1,"x":0.1,"y":0.8,"w":0.3,"h":0.05}]' \
  --form 'roleDefinitions=["Partner","PartnerOS"]'
If a template with the same name already exists in your organization, the API returns 409 Conflict with the existing template’s details in an existing field. Use the existing template or choose a different name.