Skip to content

Developers

Application API reference.

Quick answer

Write a company's application from your CRM, your spreadsheet or your own agent, under exactly the rules the portal's form applies: every answer lands on a named step, a blank never overwrites what is saved, every call tells you what is still open, and nothing is submitted without a named person at the company confirming.

How it fits together

Three ways to fill a company's application from outside the form, the one journey every path follows, and the rules that hold on all of them. Pick the path that fits what you have; the rest of this page is the API in detail.

The journey, on every path

  1. 1

    Get access

    An owner creates a key, or you sign in.

    portal sign-inAPI keyapprove the agent
  2. 2

    Write what you have

    Answers by key; a blank never overwrites.

    upload the workbookPOST / PATCHdraft_application
  3. 3

    Read the list

    What the form would still stop on.

    review tablereadinessvalidate_application
  4. 4

    Fill the gaps

    By field key, until the list is empty.

    edit in the formPATCH by keydraft_application
  5. 5

    A person submits

    Named, and a member of the company.

    Review & submitconfirmed_byrequest_submission → link

templateAPIMCPEach step names what it looks like on the three paths.

What never changes

Same rules as the form

Every path writes into the one draft the application wizard edits, under the checks its Submit button applies.

Nothing invented, nothing lost

A blank answer never overwrites a saved one, and a system already listed is updated rather than added twice.

A person always submits

Review & submit in the portal, confirmed_by on the API, the link an agent hands over. Never a tool on its own.

Authentication

An owner creates an API key under Company & account › Integrations in the portal. The secret is shown once. Send it as a bearer token on every call; the key acts as the company that created it and can reach only that company's application.

Authorization: Bearer sx_live_…
Content-Type: application/json

Endpoints

A company has one open application at a time. Every call answers with the application and its readiness, the same list the portal's Submit button checks, so you always know what is still open.

MethodPathWhat it doesBodyAnswer
POST/api/v1/applicationsOpens the company's one open draft (or reuses it) and writes the answers, systems, data profile and statements you send.ApplicationInput201, the application with its readiness
GET/api/v1/applications/{id}The draft as saved, with its readiness.none200, the application
PATCH/api/v1/applications/{id}Writes more answers into the draft. A blank never overwrites a saved answer; a system already listed is updated, not added twice.ApplicationInput200, the application
POST/api/v1/applications/{id}/validateThe readiness list, exactly as the portal's Submit button judges it. Nothing is written.none200, the application
POST/api/v1/applications/{id}/submitSubmits, with a named member of the company confirming. Refused with the list while anything is still open.{ "confirmed_by": "<member email>" }200, the application; 409 not_ready with readiness

Example

Send what you have; leave out what you do not know. The answer tells you what the application still needs, by step and by field key, and where a person finishes it.

curl -X POST https://sourcex.si/api/v1/applications \
  -H "Authorization: Bearer sx_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "source": "Acme CRM",
    "answers": {
      "company": "Cardinal Air & Plumbing",
      "country": "United States",
      "website": "cardinalair.example",
      "status": "Operating",
      "revenue": "$25M–$50M"
    },
    "systems": [
      { "tool_name": "QuickBooks Online", "purpose": "Accounting", "approx_size": "3 GB",
        "data_start": "2015-01", "data_end": "2026-10", "contents": "Invoices and the ledger",
        "exportable": "yes", "export_method": "CSV", "owned_attested": "yes", "records_english": "yes" }
    ],
    "dataset": { "title": "Cardinal operations archive", "categories": ["Operational documentation"] }
  }'

Answer

{
  "id": "6f1c…",
  "company_id": "b2a9…",
  "status": "draft",
  "title": "Cardinal operations archive",
  "updated_at": "2026-11-03T10:12:04.511Z",
  "edit_url": "https://sourcex.si/app/data/6f1c…/edit",
  "readiness": {
    "status": "needs_input",
    "percent": 23,
    "systems": { "listed": 1, "incomplete": 0 },
    "blockers": [
      { "key": "answers-company", "step": "company", "stepLabel": "Company details",
        "label": "11 answers on Company details",
        "message": "Answer every question marked Required on Company details first: What does the company do?; Your name; Work email and 8 more." },
      { "key": "systems", "step": "systems", "stepLabel": "Systems", "label": "At least 3 systems", "message": "…" }
    ],
    "missing": [
      { "field": "whatCompanyDoes", "step": "company", "label": "What does the company do?" },
      { "field": "contactName", "step": "company", "label": "Your name" }
    ]
  }
}

Where each field lands

answers is an object keyed by field. Each key below is one question on the application, on the step and in the section named. A dropdown accepts its options exactly, or plain words that clearly mean one of them (for example "about 30 million" for revenue, "closed in 2023" for status), and is normalised to the option.

Step: Company details (company)

KeyQuestion on the applicationSectionRequiredOptions
companyCompany nameCompany informationYesFree text
websiteWebsiteYour company's site, e.g. northwind.comCompany informationYesFree text
countryCountryPick the country; add a state or region if it helps.Company informationYesFree text
whatCompanyDoesWhat does the company do?What you sell or do, and who your customers are. One or two sentences is enough.Company informationYesFree text
contactNameYour nameContact & company detailsYesFree text
contactEmailWork emailContact & company detailsYesFree text
contactPhonePhoneA direct number for the partner form.Contact & company detailsYesFree text
yearFoundedYear foundedContact & company detailsYesFree text
statusIs the company still operating?Operating profileYesOperating · No longer operating · Partially operating / winding down · Not sure
closedWhenLast month operatingOperating profileOnly when status is No longer operatingFree text
yearsOperatingYears operatingOperating profileYesFree text
revenueApprox. annual revenueOperating profileYesUnder $1M · $1M–$5M · $5M–$10M · $10M–$25M · $25M–$50M · $50M–$100M · $100M+ · Not sure / prefer not to say
licensingReadinessHow ready are you to license data?Licensing & languageYesReady to discuss licensing · Interested; internal review needed · Exploring / not sure · Not available for licensing
fteCurrentFull-time employees todayTeam sizeYes0 · 1–49 · 50–99 · 100–249 · 250–999 · 1,000+
ftePeakFull-time employees at peakContractors don't count toward this.Team sizeYesUnder 50 · 50–99 · 100–249 · 250–999 · 1,000+
contractorsCurrentContractors todayTeam sizeYes0 · 1–9 · 10–49 · 50–99 · 100–249 · 250+
contractorsPeakContractors at peakTeam sizeYes0 · 1–9 · 10–49 · 50–99 · 100–249 · 250+
headcountNotesSeasonality or big changes in headcount (optional)Team sizeNoFree text

Step: Data overview (headline)

KeyQuestion on the applicationSectionRequiredOptions
languageWhat language are your records in?Licensing & languageYesEnglish · Spanish · French · German · Portuguese · Japanese · Chinese · Other
totalTbTotal data, all storage combined (TB)A rough number is fine, e.g. “~18 TB, mostly photos and call recordings”.Headline numbersYesFree text
historyCoveredYears of history coveredHeadline numbersYesFree text
whereDataLivesWhere does the data live?Name the products. We fill this from your systems table if you leave it blank.Headline numbersYesFree text
exportSpeedHow fast could you provide an export?Headline numbersYesFree text; suggestions: Within a week · 2–4 weeks · 1–3 months · Longer / not sure
canUploadCan your team export and upload it?Headline numbersYesYes · Yes, with some guidance · No, we need help · Not sure

Step: Privacy & restrictions (privacy)

KeyQuestion on the applicationSectionRequiredOptions
restrictionsPrivacy & restrictionsPII, voice recordings, partner-held data, contractual restrictions, or records you'd prefer to exclude. Write “None known” if there aren't any.Headline numbersYesFree text
privacyDoes any of it include…Headline numbersNoAn array of: pii (Personal information (PII)) · voice (Voice or call recordings) · partner_held (Data held by a partner) · contractual (Contractual restrictions) · exclusions (Records we'd prefer to exclude) · none (None of these)

Step: Data profile (files)

KeyQuestion on the applicationSectionRequiredOptions
standoutWhat would we find in your files?What would someone learn from reading your files? Think about the decisions, trade-offs and know-how in emails, docs, decks, tickets and analyses — not just the finished reports. What is unusual about your company, and where is your institutional knowledge deepest?What would we find in your files?YesFree text

Systems

systems is an array, one row per system that holds the records, and fills the table on the Systems step. At least 3 to submit, and each needs a name, what it is used for, what is in it, a start and end month (YYYY-MM), a size, and how it exports. A row whose tool_name matches a system already listed updates that row; the draft's own rows are never removed.

KeyColumn on the applicationTakes
tool_nameSystem / toolThe system's name, required for every row.
purposeWhat you use it forFree text.
approx_sizeApprox. Export Size (GB/TB)Free text, for example "120 GB" or "40,000 records".
yearsYears of dataA whole number; worked out from the months when left out.
data_startStart Date (YYYY-MM)A month as YYYY-MM.
data_endEnd Date (YYYY-MM)A month as YYYY-MM.
contentsWhat's in it (examples)Free text.
exportableCan it export?yes, partial, no or unsure.
export_methodCan it export? (the method)Free text, for example "CSV" or "Admin export".
ownershipNotes (owned by the company)yes, no or unsure.
third_partyNotes (third-party data)yes, no or unsure.
notesNotesFree text.
owned_attestedCompany-owned statement (per system, asked in the portal)yes or no; "yes" is needed to submit.
records_englishRecords in English (per system, asked in the portal)yes or no.

The application's columns, in its order: System / tool · What you use it for · Approx. Export Size (GB/TB) · Years of data · Start Date (YYYY-MM) · End Date (YYYY-MM) · What's in it (examples) · Can it export? · Notes.

Data profile

dataset holds the three answers of the Data profile step that the template does not carry.

KeyOn the applicationTakes
dataset.titleDataset titleFree text, required.
dataset.descriptionDescriptionFree text, required, at least 20 characters.
dataset.categoriesData categoriesAn array of: Operational documentation · Knowledge bases · Customer support workflows · Engineering documentation · Sales operations · Industry-specific records

Statements

The Review & submit step asks the company to confirm four statements and its authority to apply. Send them only when the person at the company has confirmed them; each is kept as given, and a "no" stops the submission exactly as it does in the portal.

KeyStatement on the application
attestations.owns_rightsYour company owns all rights in the listed assets and has the rights and authority to license them.
attestations.no_third_party_rightsNo third party has rights in the listed assets that would restrict licensing them, and licensing them doesn't infringe anyone's intellectual property or other rights.
attestations.no_contract_barNo contract, NDA, or client agreement prohibits licensing them, and you haven't already sold or licensed them to others for AI training.
attestations.authorityYou are authorized to bind the company, and any required owner, board or cofounder approvals can be obtained before signing.
authorized_confirmedThe sender is authorised to apply on the company's behalf (true or false).

Readiness

readiness on every answer is what the portal's Continue and Submit buttons would still stop on. blockers is that list in step order; missing names the required answers still blank by field key, so you can fill them by key; percent is the application's own progress meter.

StatusMeaning
readySubmit would be accepted now.
needs_inputThe listed blockers first; each names the step and what to do.
in_reviewAlready submitted; the draft is read-only until SourceX asks for more.
Blocker keyStepWhat is still open
answers-companyCompany detailsRequired company answers still blank (answers.*).
answers-headlineData overviewRequired data-overview answers still blank (answers.*).
answers-privacyPrivacy & restrictionsRequired privacy answers still blank (answers.*).
answers-filesData profileRequired data-profile answers still blank (answers.*).
systemsSystemsFewer systems listed than the minimum (systems[]).
systemDetailsSystemsA listed system lacks its size, start and end month, contents or how it exports (systems[]).
ownershipSystemsA listed system lacks its company-owned answer (systems[].owned_attested "yes"); a code system also needs its code-ownership answers, which the portal asks.
titleData profiledataset.title is blank.
descriptionData profiledataset.description is blank or under 20 characters.
categoriesData profiledataset.categories is empty.
authorizationReview & submitauthorized_confirmed is not true.
attestationsReview & submitAn ownership statement is missing or answered "no" (attestations.*).

Errors

An error answers { "error": "<code>", "message": "…" }; not_ready also carries readiness.

StatusCodeWhen
401missing_keyNo Authorization: Bearer sx_live_… header.
401invalid_keyThe key is unknown or has been revoked.
403wrong_companycompany_id names a company the key does not belong to.
403confirmer_not_memberconfirmed_by is not the email of a member of the company (Company & account › Team).
404not_foundNo application with that id belongs to the key's company.
400bad_requestThe body does not fit the schema; the message names the first field and what is wrong with it.
409in_reviewThe company's application is already submitted; nothing is changed.
409not_readySubmit was asked while the readiness list is not empty; the answer carries readiness.
409conflictThe draft changed while the request ran (someone saved in the portal); read it again and retry.
422rejectedA rule on the server refused the write; the message says which.
500server_errorSomething failed on our side; retry later.

The same over MCP

An AI assistant connected at https://sourcex.si/mcp signs in as you and has the same four steps as tools. It drafts and validates; a person submits. Setup is on Agent integrations.

ToolDoes
get_application_schemaThis page's field list as data: every key, question, step, requirement and option.
draft_applicationWrites answers into the signed-in account's draft under the same rules as POST and PATCH.
validate_applicationThe readiness list, like POST …/validate.
request_submissionReturns the link where a person at the company confirms and submits. An agent never submits by itself.

Rules that always hold

  • Use only what the person or their records state; leave unknown answers out rather than guessing.
  • A draft is never submitted by a tool: request_submission returns the link where a person confirms and submits.
  • A blank answer never overwrites one already saved in the draft.
  • The machine-readable version of this page is the OpenAPI 3.1 specification, raw JSON for Postman, code generators and agents: View raw OpenAPI JSON (https://sourcex.si/api/v1/openapi.json). To browse the endpoints, request fields and responses, and to try a call with your key, open the interactive API documentation.
See if your company qualifies