Skip to content
TriedDocs
Account

Submit KYC

Submit or replace the business verification (KYC) profile of the workspace.

POSThttps://api.tried.com.au/kyc

Needs keys Submits the business profile used for carrier verification. Real review needs a Telnyx API key on the server. Without one, the mock reviewer approves a valid submission at once; with a key, the profile stays pending until the carrier review sets it to approved or rejected.

Submitting again replaces the whole profile and starts the review over. KYC only blocks buying numbers, outbound calls and SMS when the deployment sets TRIED_KYC_REQUIRED=1; those requests then return 403 until the profile is approved.

Request#

Field Type Required Description
business_name string Yes Registered business name, 2 to 200 characters.
country string Yes Two-letter country code in upper case, for example AU or NZ.
website string No Business website, a full URL.
business_registration_number string No ABN, EIN or other registration number, up to 64 characters.
contact_email string No Email for the reviewer to contact.
use_case string No What the workspace calls and texts people for, up to 1000 characters.

Example request#

curl -X POST https://api.tried.com.au/kyc \
  -H "Authorization: Bearer $TRIED_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "business_name": "Acme Dental Pty Ltd",
    "country": "AU",
    "website": "https://acmedental.example.com.au",
    "business_registration_number": "51824753556",
    "contact_email": "compliance@acmedental.example.com.au",
    "use_case": "Appointment reminders and inbound booking calls for patients."
  }'
const res = await fetch("https://api.tried.com.au/kyc", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.TRIED_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    business_name: "Acme Dental Pty Ltd",
    country: "AU",
    website: "https://acmedental.example.com.au",
    business_registration_number: "51824753556",
    contact_email: "compliance@acmedental.example.com.au",
    use_case: "Appointment reminders and inbound booking calls for patients.",
  }),
});
const kyc = await res.json();
import os, requests

res = requests.post(
    "https://api.tried.com.au/kyc",
    headers={"Authorization": f"Bearer {os.environ['TRIED_API_KEY']}"},
    json={
        "business_name": "Acme Dental Pty Ltd",
        "country": "AU",
        "website": "https://acmedental.example.com.au",
        "business_registration_number": "51824753556",
        "contact_email": "compliance@acmedental.example.com.au",
        "use_case": "Appointment reminders and inbound booking calls for patients.",
    },
)
kyc = res.json()

Response#

200 OK

{
  "status": "pending",
  "business_name": "Acme Dental Pty Ltd",
  "country": "AU",
  "website": "https://acmedental.example.com.au",
  "submitted_timestamp": 1760918400000,
  "reviewed_timestamp": null
}

The fields are described on Get KYC status. In mock mode status is approved and reviewed_timestamp equals submitted_timestamp. The submit is recorded in the audit log as kyc.submit.

Errors#

Status When
400 A field fails validation, for example a lower-case or three-letter country, an invalid website URL or contact_email.
401 Missing or invalid API key.
403 The key's IP allowlist or scopes reject the request (this route needs the admin scope), or a dashboard user without the admin role calls it (Requires role: admin).
429 Rate limit exceeded. See Rate limits.

See Errors for the body format.