---
updatedAt: 2026-05-13T12:32:56.000Z
agentTools:
  projectIndex: https://docs.texter.id/llms.txt
---

# Submit a RCS PreCheck

Creates a verification project for the RCS channel and kicks off precheck analysis. The OpenAPI spec lists every field this channel could accept as optional; the server validates the actual required-set at request time against the merged requirement schema resolved from `(country, countryOfRegistration, analysisSteps)`.

# OpenAPI definition

```json
{
  "openapi": "3.1.0",
  "info": {
    "title": "TexterID Public API",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://api.texter.id"
    }
  ],
  "paths": {
    "/v1/precheck/rcs": {
      "post": {
        "operationId": "submit_rcs",
        "summary": "Submit a RCS PreCheck",
        "description": "Creates a verification project for the RCS channel and kicks off precheck analysis. The OpenAPI spec lists every field this channel could accept as optional; the server validates the actual required-set at request time against the merged requirement schema resolved from `(country, countryOfRegistration, analysisSteps)`.",
        "tags": [
          "PreCheck"
        ],
        "security": [
          {
            "BearerAuth": []
          },
          {
            "PrecheckOAuth": [
              "precheck:verify"
            ]
          }
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "country": {
                    "type": "string",
                    "enum": [
                      "US"
                    ],
                    "description": "ISO 3166-1 alpha-2 target country code for the project."
                  },
                  "countryOfRegistration": {
                    "type": "string",
                    "enum": [
                      "US"
                    ],
                    "description": "ISO 3166-1 alpha-2 country code where the brand is registered."
                  },
                  "analysisSteps": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "brand_background_check",
                        "brand_online_presence_check",
                        "rcs_asset_relevance_check",
                        "rcs_asset_trademark_check",
                        "rcs_asset_impersonation_check",
                        "rcs_display_name_relevance_check",
                        "rcs_display_name_trademark_check",
                        "rcs_description_relevance_check",
                        "rcs_description_trademark_check",
                        "privacy_policy_check",
                        "terms_of_service_check",
                        "opt_out_message_check",
                        "interactions_check",
                        "poc_email_domain_check",
                        "help_message_check",
                        "rcs_asset_safety_check",
                        "rcs_display_name_safety_check",
                        "rcs_description_safety_check",
                        "rcs_description_use_case_check",
                        "opt_in_method_check",
                        "triggers_check"
                      ]
                    },
                    "description": "Analysis steps to run on the project. Required; at least one step must be specified.\n\n**Available steps for this channel:**\n\n- **brand_background_check** (Brand Background Check)  \n  Verifies the submitted EIN and business information align with public records. POC Name and Address may be included in the check.\n\n- **brand_online_presence_check** (Analyze Brand Online Presence)  \n  Analyze the brand's online presence to better understand business activities and support TM review.\n\n- **rcs_asset_relevance_check** (RCS Asset Relevance Check)  \n  Ensures logo and banner align with website and brand identity.\n\n- **rcs_asset_trademark_check** (RCS Asset Trademark Check)  \n  Verifies assets do not infringe existing marks (e.g., via USPTO database).  \n  Depends on step: *brand_online_presence_check*\n\n- **rcs_asset_impersonation_check** (RCS Asset Reverse Image Impersonation Check)  \n  Detects potential brand impersonation via reverse image search.\n\n- **rcs_display_name_relevance_check** (RCS Display Name Relevance Check)  \n  Ensures display name is relevant to the brand.  \n  Depends on step: *brand_online_presence_check*\n\n- **rcs_display_name_trademark_check** (RCS Display Name Trademark and Impersonation Check)  \n  Detects potential TM/impersonation issues.  \n  Depends on step: *brand_online_presence_check*\n\n- **rcs_description_relevance_check** (RCS Agent Description Relevance Check)  \n  Ensures the agent description is relevant to the brand's identity and activities.\n\n- **rcs_description_trademark_check** (RCS Agent Description Trademark and Impersonation Check)  \n  Detects potential trademark or impersonation issues in the agent description.  \n  Depends on step: *brand_online_presence_check*\n\n- **privacy_policy_check** (Privacy Policy Verification)  \n  Checks URL accessibility and suitability for an RCS message sender.  \n  Depends on step: *brand_online_presence_check*\n\n- **terms_of_service_check** (Terms of Service Verification)  \n  Checks URL accessibility and suitability for messaging terms.  \n  Depends on step: *brand_online_presence_check*\n\n- **opt_out_message_check** (Opt-out Message Validation)  \n  Ensures opt-out message clearly stops messaging and is compliant.\n\n- **interactions_check** (Interactions Description Validation)  \n  Ensures message types align with business activities.  \n  Depends on step: *brand_online_presence_check*\n\n- **poc_email_domain_check** (POC Email Domain Verification)  \n  Verifies the POC email domain is a plausible business domain tied to the brand.  \n  Depends on step: *brand_online_presence_check*\n\n- **help_message_check** (HELP Message Validation)  \n  Ensures HELP response describes purpose and opt-out clearly.  \n  Depends on step: *brand_online_presence_check*\n\n- **rcs_asset_safety_check** (RCS Asset Safety Review)  \n  Ensures assets do not depict sex, violence, drugs, or other harmful content.\n\n- **rcs_display_name_safety_check** (RCS Display Name Safety Check)  \n  Ensures display name does not contain inappropriate content.\n\n- **rcs_description_safety_check** (RCS Agent Description Safety Check)  \n  Ensures the agent description does not contain inappropriate content.\n\n- **rcs_description_use_case_check** (RCS Agent Description Use Case Check)  \n  Ensures the agent description is aligned with the declared messaging use case.\n\n- **opt_in_method_check** (Opt-in Method Validation)  \n  Ensures consent mechanism is lawful and clearly described.\n\n- **triggers_check** (Triggers Description Validation)  \n  Ensures triggers are clear and informative for carrier review.",
                    "markdown": true
                  },
                  "externalProjectId": {
                    "description": "External identifier for the project. Note: each API call creates a new project even if the same externalProjectId is provided.",
                    "examples": [
                      "crm-10dlc-acme-retail"
                    ],
                    "type": "string"
                  },
                  "callbackUrl": {
                    "description": "HTTPS URL to receive webhook notifications when analysis is complete.",
                    "examples": [
                      "https://api.yourplatform.com/v1/webhooks/texter-precheck"
                    ],
                    "type": "string",
                    "format": "uri"
                  },
                  "legalName": {
                    "type": "string",
                    "minLength": 1,
                    "title": "Legal Name",
                    "examples": [
                      "Acme Retail Group LLC"
                    ],
                    "description": "Enter the exact registered business name that matches your tax documents"
                  },
                  "dbaName": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "title": "Organization / DBA Name",
                    "examples": [
                      "Acme Boutique"
                    ],
                    "description": "The trading name or 'doing business as' name, if different from the legal name"
                  },
                  "legalForm": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "examples": [
                      "LLC"
                    ],
                    "oneOf": [
                      {
                        "const": "CORPORATION",
                        "title": "Corporation"
                      },
                      {
                        "const": "S_CORPORATION",
                        "title": "S Corporation"
                      },
                      {
                        "const": "LLC",
                        "title": "LLC"
                      },
                      {
                        "const": "PARTNERSHIP",
                        "title": "Partnership"
                      },
                      {
                        "const": "SOLE_PROPRIETORSHIP",
                        "title": "Sole Proprietorship"
                      },
                      {
                        "const": "NON_PROFIT",
                        "title": "Nonprofit"
                      },
                      {
                        "const": "GOVERNMENT",
                        "title": "Government"
                      }
                    ],
                    "title": "Legal Form",
                    "description": "Select the legal structure of your business entity"
                  },
                  "legalEntityType": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "examples": [
                      "PRIVATE"
                    ],
                    "oneOf": [
                      {
                        "const": "PRIVATE",
                        "title": "Private"
                      },
                      {
                        "const": "PUBLIC",
                        "title": "Public"
                      },
                      {
                        "const": "GOVERNMENT",
                        "title": "Government"
                      },
                      {
                        "const": "NON_PROFIT",
                        "title": "Nonprofit"
                      }
                    ],
                    "title": "Legal Entity Type",
                    "description": "Classification of your business entity for regulatory purposes"
                  },
                  "stockSymbol": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "minLength": 2,
                    "maxLength": 5,
                    "title": "Stock Symbol",
                    "examples": [
                      "ACME"
                    ],
                    "description": "Trading symbol for publicly traded companies (leave empty for private companies)"
                  },
                  "stockExchange": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "minLength": 2,
                    "maxLength": 5,
                    "title": "Stock Exchange",
                    "examples": [
                      "NYSE"
                    ],
                    "description": "The stock exchange abbreviation where the company is listed (e.g., NYSE)"
                  },
                  "businessIdentifier": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 10,
                    "pattern": "^\\d{2}-\\d{7}$",
                    "title": "Federal Tax ID (EIN)",
                    "examples": [
                      "98-7654321"
                    ],
                    "description": "Your 9-digit Federal Tax ID/EIN (e.g. 12-3456789)"
                  },
                  "businessWebsiteUrl": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "uri",
                    "pattern": "^https://(([A-Za-z\\d]([A-Za-z\\d-]*[A-Za-z\\d])*)\\.)+[A-Za-z]{2,}(:\\d+)?(/[-A-Za-z\\d%_.~+]*)*([?][;&A-Za-z\\d%_.~+=-]*)?(#[-A-Za-z\\d_]*)?$",
                    "title": "Business Website URL",
                    "examples": [
                      "https://www.acme-boutique-example.com"
                    ],
                    "description": "Your primary business website (must start with https://)"
                  },
                  "registeredBusinessAddress": {
                    "type": "object",
                    "title": "Registered Business Address",
                    "required": [
                      "line1",
                      "city",
                      "state",
                      "zip"
                    ],
                    "properties": {
                      "line1": {
                        "type": [
                          "string",
                          "null"
                        ],
                        "title": "Address Line 1",
                        "examples": [
                          "789 Broadway St"
                        ],
                        "description": "Street address of your registered business location"
                      },
                      "line2": {
                        "type": [
                          "string",
                          "null"
                        ],
                        "title": "Address Line 2",
                        "examples": [
                          "Suite 100"
                        ],
                        "description": "Additional address information such as suite, unit, building, or floor (optional)"
                      },
                      "city": {
                        "type": [
                          "string",
                          "null"
                        ],
                        "title": "City",
                        "examples": [
                          "New York"
                        ],
                        "description": "City where your business is registered"
                      },
                      "state": {
                        "type": "string",
                        "examples": [
                          "NY"
                        ],
                        "oneOf": [
                          {
                            "const": "AL",
                            "title": "Alabama"
                          },
                          {
                            "const": "AK",
                            "title": "Alaska"
                          },
                          {
                            "const": "AZ",
                            "title": "Arizona"
                          },
                          {
                            "const": "AR",
                            "title": "Arkansas"
                          },
                          {
                            "const": "CA",
                            "title": "California"
                          },
                          {
                            "const": "CO",
                            "title": "Colorado"
                          },
                          {
                            "const": "CT",
                            "title": "Connecticut"
                          },
                          {
                            "const": "DE",
                            "title": "Delaware"
                          },
                          {
                            "const": "FL",
                            "title": "Florida"
                          },
                          {
                            "const": "GA",
                            "title": "Georgia"
                          },
                          {
                            "const": "HI",
                            "title": "Hawaii"
                          },
                          {
                            "const": "ID",
                            "title": "Idaho"
                          },
                          {
                            "const": "IL",
                            "title": "Illinois"
                          },
                          {
                            "const": "IN",
                            "title": "Indiana"
                          },
                          {
                            "const": "IA",
                            "title": "Iowa"
                          },
                          {
                            "const": "KS",
                            "title": "Kansas"
                          },
                          {
                            "const": "KY",
                            "title": "Kentucky"
                          },
                          {
                            "const": "LA",
                            "title": "Louisiana"
                          },
                          {
                            "const": "ME",
                            "title": "Maine"
                          },
                          {
                            "const": "MD",
                            "title": "Maryland"
                          },
                          {
                            "const": "MA",
                            "title": "Massachusetts"
                          },
                          {
                            "const": "MI",
                            "title": "Michigan"
                          },
                          {
                            "const": "MN",
                            "title": "Minnesota"
                          },
                          {
                            "const": "MS",
                            "title": "Mississippi"
                          },
                          {
                            "const": "MO",
                            "title": "Missouri"
                          },
                          {
                            "const": "MT",
                            "title": "Montana"
                          },
                          {
                            "const": "NE",
                            "title": "Nebraska"
                          },
                          {
                            "const": "NV",
                            "title": "Nevada"
                          },
                          {
                            "const": "NH",
                            "title": "New Hampshire"
                          },
                          {
                            "const": "NJ",
                            "title": "New Jersey"
                          },
                          {
                            "const": "NM",
                            "title": "New Mexico"
                          },
                          {
                            "const": "NY",
                            "title": "New York"
                          },
                          {
                            "const": "NC",
                            "title": "North Carolina"
                          },
                          {
                            "const": "ND",
                            "title": "North Dakota"
                          },
                          {
                            "const": "OH",
                            "title": "Ohio"
                          },
                          {
                            "const": "OK",
                            "title": "Oklahoma"
                          },
                          {
                            "const": "OR",
                            "title": "Oregon"
                          },
                          {
                            "const": "PA",
                            "title": "Pennsylvania"
                          },
                          {
                            "const": "RI",
                            "title": "Rhode Island"
                          },
                          {
                            "const": "SC",
                            "title": "South Carolina"
                          },
                          {
                            "const": "SD",
                            "title": "South Dakota"
                          },
                          {
                            "const": "TN",
                            "title": "Tennessee"
                          },
                          {
                            "const": "TX",
                            "title": "Texas"
                          },
                          {
                            "const": "UT",
                            "title": "Utah"
                          },
                          {
                            "const": "VT",
                            "title": "Vermont"
                          },
                          {
                            "const": "VA",
                            "title": "Virginia"
                          },
                          {
                            "const": "WA",
                            "title": "Washington"
                          },
                          {
                            "const": "WV",
                            "title": "West Virginia"
                          },
                          {
                            "const": "WI",
                            "title": "Wisconsin"
                          },
                          {
                            "const": "WY",
                            "title": "Wyoming"
                          }
                        ],
                        "title": "State",
                        "description": "State or province where your business is registered"
                      },
                      "zip": {
                        "type": [
                          "string",
                          "null"
                        ],
                        "maxLength": 5,
                        "pattern": "^\\d{5}$",
                        "title": "ZIP Code",
                        "examples": [
                          "10003"
                        ],
                        "description": "ZIP or postal code for your registered business address"
                      }
                    },
                    "additionalProperties": false
                  },
                  "helpMessage": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "title": "Help interaction",
                    "description": "What message does the agent send when a user sends the HELP message?",
                    "maxLength": 1000,
                    "examples": [
                      "Acme Boutique: For customer support, reply to this thread, email support@acme-boutique-example.com, or call 1-800-555-0144. Freq varies. Msg&Data rates may apply."
                    ]
                  },
                  "displayName": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 40,
                    "title": "Agent Display Name",
                    "description": "The name of your agent as it will appear to users in their messaging app",
                    "examples": [
                      "Acme Verify"
                    ]
                  },
                  "descriptionForUsers": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 100,
                    "title": "Description (Display)",
                    "description": "This is a description of the purpose of the Agent that will be displayed to customers on certain devices.",
                    "examples": [
                      "Receive secure one-time passcodes and account alerts."
                    ]
                  },
                  "logoUrl": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "uri",
                    "pattern": "^https://(([A-Za-z\\d]([A-Za-z\\d-]*[A-Za-z\\d])*)\\.)+[A-Za-z]{2,}(:\\d+)?(/[-A-Za-z\\d%_.~+]*)*([?][;&A-Za-z\\d%_.~+=-]*)?(#[-A-Za-z\\d_]*)?$",
                    "title": "Logo",
                    "description": "Upload a square logo image in JPEG or PNG format (224 x 224 pixels, max 50KB) that represents your agent.",
                    "examples": [
                      "https://example.com/assets/logo-224.png"
                    ]
                  },
                  "bannerUrl": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "uri",
                    "pattern": "^https://(([A-Za-z\\d]([A-Za-z\\d-]*[A-Za-z\\d])*)\\.)+[A-Za-z]{2,}(:\\d+)?(/[-A-Za-z\\d%_.~+]*)*([?][;&A-Za-z\\d%_.~+=-]*)?(#[-A-Za-z\\d_]*)?$",
                    "title": "Banner",
                    "description": "Upload a banner image in JPEG or PNG format (1440 x 448 pixels, max 200KB) shown when users view your agent information.",
                    "examples": [
                      "https://example.com/assets/banner-1440x448.png"
                    ]
                  },
                  "useCase": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "oneOf": [
                      {
                        "const": "OTP",
                        "title": "One Time Password",
                        "description": "Used for one-time passwords (OTP) and two-step authentication codes (2FA)."
                      },
                      {
                        "const": "TRANSACTIONAL",
                        "title": "Transactional",
                        "description": "Notifications about services, account updates, or other non-marketing alerts."
                      },
                      {
                        "const": "PROMOTIONAL",
                        "title": "Promotional",
                        "description": "Messages for marketing, such as special offers, promotions, or cart reminders."
                      },
                      {
                        "const": "MULTI_USE",
                        "title": "Multi-Use",
                        "description": "Covers one or multiple cases listed above."
                      }
                    ],
                    "title": "RCS Use Case",
                    "description": "Select the primary use case that best describes how your agent will communicate with users",
                    "examples": [
                      "OTP"
                    ]
                  },
                  "brandPocFirstName": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "title": "Brand POC First Name",
                    "description": "First name of brand point of contact for verification and carrier requests",
                    "examples": [
                      "Jane"
                    ]
                  },
                  "brandPocLastName": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "title": "Brand POC Last Name",
                    "description": "Last name of brand point of contact for verification and carrier requests",
                    "examples": [
                      "Doe"
                    ]
                  },
                  "brandPocEmail": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "email",
                    "title": "Brand POC Email",
                    "description": "Business email address for the brand POC (public domains like Gmail/Yahoo are not allowed). This contact may receive verification emails.",
                    "examples": [
                      "contact@acmehealth.com"
                    ]
                  },
                  "privacyPolicyUrl": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "uri",
                    "pattern": "^https://(([A-Za-z\\d]([A-Za-z\\d-]*[A-Za-z\\d])*)\\.)+[A-Za-z]{2,}(:\\d+)?(/[-A-Za-z\\d%_.~+]*)*([?][;&A-Za-z\\d%_.~+=-]*)?(#[-A-Za-z\\d_]*)?$",
                    "title": "Privacy Policy URL",
                    "description": "URL to your privacy policy (must start with https://)",
                    "examples": [
                      "https://example.com/privacy"
                    ]
                  },
                  "termsOfServiceUrl": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "uri",
                    "pattern": "^https://(([A-Za-z\\d]([A-Za-z\\d-]*[A-Za-z\\d])*)\\.)+[A-Za-z]{2,}(:\\d+)?(/[-A-Za-z\\d%_.~+]*)*([?][;&A-Za-z\\d%_.~+=-]*)?(#[-A-Za-z\\d_]*)?$",
                    "title": "Terms Of Service URL",
                    "description": "URL to your terms of service (must start with https://)",
                    "examples": [
                      "https://example.com/terms"
                    ]
                  },
                  "optInMethod": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "title": "Opt-in method",
                    "description": "How will you obtain opt-in to message users with your agent?",
                    "examples": [
                      "Users opt in via website signup and explicit consent checkbox before receiving OTP messages."
                    ]
                  },
                  "optOutMessage": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "title": "Opt-out confirmation message",
                    "description": "What message does the agent send when a user opts out?",
                    "examples": [
                      "You have been unsubscribed. Reply START to re-subscribe."
                    ]
                  },
                  "triggers": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "title": "Agent triggers",
                    "description": "What actions will trigger messages to users?",
                    "examples": [
                      "Messages are triggered when users request login verification or account recovery."
                    ]
                  },
                  "interactions": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "title": "Agent interactions",
                    "description": "What types of interactions will the agent have with users?",
                    "examples": [
                      "Two-way interaction limited to OTP, HELP, and STOP responses."
                    ]
                  }
                },
                "required": [
                  "country",
                  "countryOfRegistration",
                  "analysisSteps"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "projectId": {
                      "type": "string",
                      "description": "Verification project identifier.",
                      "examples": [
                        "1234567890"
                      ]
                    },
                    "externalProjectId": {
                      "description": "External identifier for the project (echoed from the request).",
                      "examples": [
                        "external-project-123"
                      ],
                      "type": "string"
                    },
                    "projectUrl": {
                      "type": "string",
                      "format": "uri",
                      "description": "Console URL to view the project.",
                      "examples": [
                        "https://example.com/projects/1234567890"
                      ]
                    },
                    "analysisId": {
                      "type": "string",
                      "description": "Analysis identifier.",
                      "examples": [
                        "1234567890"
                      ]
                    }
                  },
                  "required": [
                    "projectId",
                    "projectUrl",
                    "analysisId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error.BAD_REQUEST"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error.UNAUTHORIZED"
                }
              }
            }
          },
          "403": {
            "description": "Monthly limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error.FORBIDDEN"
                }
              }
            }
          },
          "429": {
            "description": "Rate Limit Exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error.TOO_MANY_REQUESTS"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR"
                }
              }
            }
          }
        },
        "x-texterid-dynamic-body": {
          "discriminators": [
            "country",
            "countryOfRegistration",
            "analysisSteps"
          ],
          "staticDiscoveryParams": {
            "channel": "rcs"
          }
        },
        "callbacks": {
          "PrecheckRcsCallback": {
            "{$request.body#/callbackUrl}": {
              "post": {
                "parameters": [
                  {
                    "$ref": "#/components/parameters/CallbackSignatureHeader"
                  }
                ],
                "requestBody": {
                  "required": true,
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/AnalysisResult"
                      }
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Acknowledged"
                  },
                  "204": {
                    "description": "No content"
                  }
                }
              }
            }
          }
        },
        "x-not-implemented": false
      }
    }
  },
  "components": {
    "schemas": {
      "error.BAD_REQUEST": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "description": "The error message",
            "example": "Bad Request"
          },
          "code": {
            "type": "string",
            "description": "The error code",
            "example": "BAD_REQUEST"
          },
          "issues": {
            "description": "An array of issues that were responsible for the error",
            "example": [],
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "message": {
                  "type": "string"
                }
              },
              "required": [
                "message"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "message",
          "code"
        ],
        "additionalProperties": false,
        "title": "Bad Request error (400)",
        "description": "The error information",
        "example": {
          "code": "BAD_REQUEST",
          "message": "Bad Request",
          "issues": []
        }
      },
      "error.UNAUTHORIZED": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "description": "The error message",
            "example": "Unauthorized"
          },
          "code": {
            "type": "string",
            "description": "The error code",
            "example": "UNAUTHORIZED"
          },
          "issues": {
            "description": "An array of issues that were responsible for the error",
            "example": [],
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "message": {
                  "type": "string"
                }
              },
              "required": [
                "message"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "message",
          "code"
        ],
        "additionalProperties": false,
        "title": "Unauthorized error (401)",
        "description": "The error information",
        "example": {
          "code": "UNAUTHORIZED",
          "message": "Unauthorized",
          "issues": []
        }
      },
      "error.FORBIDDEN": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "description": "The error message",
            "example": "Monthly limit exceeded"
          },
          "code": {
            "type": "string",
            "description": "The error code",
            "example": "FORBIDDEN"
          },
          "issues": {
            "description": "An array of issues that were responsible for the error",
            "example": [],
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "message": {
                  "type": "string"
                }
              },
              "required": [
                "message"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "message",
          "code"
        ],
        "additionalProperties": false,
        "title": "Monthly limit exceeded error (403)",
        "description": "The error information",
        "example": {
          "code": "FORBIDDEN",
          "message": "Monthly limit exceeded",
          "issues": []
        }
      },
      "error.TOO_MANY_REQUESTS": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "description": "The error message",
            "example": "Rate Limit Exceeded"
          },
          "code": {
            "type": "string",
            "description": "The error code",
            "example": "TOO_MANY_REQUESTS"
          },
          "issues": {
            "description": "An array of issues that were responsible for the error",
            "example": [],
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "message": {
                  "type": "string"
                }
              },
              "required": [
                "message"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "message",
          "code"
        ],
        "additionalProperties": false,
        "title": "Rate Limit Exceeded error (429)",
        "description": "The error information",
        "example": {
          "code": "TOO_MANY_REQUESTS",
          "message": "Rate Limit Exceeded",
          "issues": []
        }
      },
      "error.INTERNAL_SERVER_ERROR": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "description": "The error message",
            "example": "Internal server error"
          },
          "code": {
            "type": "string",
            "description": "The error code",
            "example": "INTERNAL_SERVER_ERROR"
          },
          "issues": {
            "description": "An array of issues that were responsible for the error",
            "example": [],
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "message": {
                  "type": "string"
                }
              },
              "required": [
                "message"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "message",
          "code"
        ],
        "additionalProperties": false,
        "title": "Internal server error error (500)",
        "description": "The error information",
        "example": {
          "code": "INTERNAL_SERVER_ERROR",
          "message": "Internal server error",
          "issues": []
        }
      },
      "AnalysisResult": {
        "type": "object",
        "properties": {
          "projectId": {
            "type": "string",
            "description": "Verification project identifier.",
            "examples": [
              "proj_650a2c5e9d7f1",
              "proj_8b4f3e2a1c9d7"
            ]
          },
          "externalProjectId": {
            "description": "External identifier for the project (echoed from the request).",
            "examples": [
              "customer-brand-acme-2024",
              "ext_verification_001"
            ],
            "type": "string"
          },
          "analysisId": {
            "type": "string",
            "description": "Analysis identifier.",
            "examples": [
              "ana_750f2d6e1e8f2",
              "ana_9c5g4f3b2d0e8"
            ]
          },
          "analysisResult": {
            "type": "string",
            "enum": [
              "PASS",
              "FAIL",
              "ERROR"
            ],
            "description": "PASS (approved), FAIL (rejected with issues), or ERROR (failed to complete)."
          },
          "analysisIssues": {
            "deprecated": true,
            "description": "List of issues per failing step. Null/absent when the analysis result is PASS or ERROR. Prefer stepDetails[].findings, which carries the same information with document citations.",
            "anyOf": [
              {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "stepId": {
                      "type": "string",
                      "enum": [
                        "brand_background_check",
                        "brand_online_presence_check",
                        "rcs_asset_safety_check",
                        "rcs_asset_relevance_check",
                        "rcs_asset_trademark_check",
                        "rcs_asset_impersonation_check",
                        "rcs_display_name_safety_check",
                        "rcs_display_name_relevance_check",
                        "rcs_display_name_trademark_check",
                        "rcs_description_safety_check",
                        "rcs_description_relevance_check",
                        "rcs_description_trademark_check",
                        "rcs_description_use_case_check",
                        "privacy_policy_check",
                        "terms_of_service_check",
                        "help_message_check",
                        "opt_out_message_check",
                        "opt_in_method_check",
                        "interactions_check",
                        "triggers_check",
                        "poc_email_domain_check",
                        "campaign_description_check",
                        "opt_in_message_check",
                        "prohibited_use_case_check",
                        "sample_messages_check",
                        "shaft_content_check",
                        "use_case_consistency_check"
                      ],
                      "description": "Step identifier."
                    },
                    "issues": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "List of issue strings for the step.",
                      "examples": [
                        [
                          "Company name not clearly displayed on homepage",
                          "Legal entity registration details missing from footer"
                        ]
                      ]
                    }
                  },
                  "required": [
                    "stepId",
                    "issues"
                  ],
                  "additionalProperties": false
                }
              },
              {
                "type": "null"
              }
            ]
          },
          "analysisScore": {
            "description": "Score assigned by the analysis (0-100). Present when the analysis result is PASS or FAIL. Null/absent when the analysis result is ERROR, or when an enabled step was skipped so no aggregate could be computed. The precheck passes if the score is at least 80.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "examples": [
                  70
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "stepDetails": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "step_id": {
                  "type": "string",
                  "enum": [
                    "brand_background_check",
                    "brand_online_presence_check",
                    "rcs_asset_safety_check",
                    "rcs_asset_relevance_check",
                    "rcs_asset_trademark_check",
                    "rcs_asset_impersonation_check",
                    "rcs_display_name_safety_check",
                    "rcs_display_name_relevance_check",
                    "rcs_display_name_trademark_check",
                    "rcs_description_safety_check",
                    "rcs_description_relevance_check",
                    "rcs_description_trademark_check",
                    "rcs_description_use_case_check",
                    "privacy_policy_check",
                    "terms_of_service_check",
                    "help_message_check",
                    "opt_out_message_check",
                    "opt_in_method_check",
                    "interactions_check",
                    "triggers_check",
                    "poc_email_domain_check",
                    "campaign_description_check",
                    "opt_in_message_check",
                    "prohibited_use_case_check",
                    "sample_messages_check",
                    "shaft_content_check",
                    "use_case_consistency_check"
                  ],
                  "description": "Step identifier."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PASS",
                    "FAIL",
                    "ERROR"
                  ],
                  "description": "Per-step result status."
                },
                "score": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 100,
                      "examples": [
                        70
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Per-step score (0-100). Null when the step did not complete (ERROR/SKIPPED) or when the step type does not emit a numeric score."
                },
                "issues": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "deprecated": true,
                  "description": "Issues found by the step, concatenated into a single string. Prefer findings[].issue.",
                  "examples": [
                    "Company name not on homepage; Legal details missing from footer"
                  ]
                },
                "suggestions": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "deprecated": true,
                  "description": "Step-specific suggestions, concatenated into a single string. Prefer findings[].suggestion.",
                  "examples": [
                    "Add company name to homepage header; Include legal entity info in footer"
                  ]
                },
                "justification": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Step-specific justification text.",
                  "examples": [
                    "Checks that company name and official branding are clearly visible on the website",
                    "Ensures legal entity information and registration details are properly documented"
                  ]
                },
                "findings": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "issue": {
                        "type": "string",
                        "description": "The specific compliance issue identified by this step.",
                        "examples": [
                          "Company name not clearly displayed on homepage",
                          "Official logo missing or unclear"
                        ]
                      },
                      "suggestion": {
                        "type": "string",
                        "description": "The recommended change to resolve the issue.",
                        "examples": [
                          "Ensure company name is prominently displayed on the homepage header",
                          "Add official logo with minimum size requirements and clear visibility"
                        ]
                      },
                      "documentReferences": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "documentShortId": {
                              "type": "string",
                              "description": "Stable short identifier for the source document (e.g. \"ctia\", \"google-rcs-aup\").",
                              "examples": [
                                "brand-policy",
                                "ctia"
                              ]
                            },
                            "documentName": {
                              "type": "string",
                              "description": "Human-readable document name.",
                              "examples": [
                                "Brand Identity Verification Guidelines",
                                "CTIA Branding Requirements"
                              ]
                            },
                            "publicUrl": {
                              "type": "string",
                              "description": "Public URL of the source document. Empty string if the document has no public URL.",
                              "examples": [
                                "https://example.com/brand-identity-verification.pdf",
                                ""
                              ]
                            },
                            "page": {
                              "description": "Page reference within the document, when extractable.",
                              "examples": [
                                "12",
                                "42"
                              ],
                              "type": "string"
                            },
                            "section": {
                              "description": "Section heading within the document, when extractable.",
                              "examples": [
                                "2.1.3",
                                "4.2 Website Branding Requirements"
                              ],
                              "type": "string"
                            },
                            "sectionUrl": {
                              "description": "Deep link to the section anchor on the public URL, when resolvable.",
                              "examples": [
                                "https://example.com/guidelines.pdf#section-2.1",
                                "https://example.com/spec#branding"
                              ],
                              "type": "string"
                            }
                          },
                          "required": [
                            "documentShortId",
                            "documentName",
                            "publicUrl"
                          ],
                          "additionalProperties": false
                        },
                        "description": "Source documents cited by this finding."
                      }
                    },
                    "required": [
                      "issue",
                      "suggestion",
                      "documentReferences"
                    ],
                    "additionalProperties": false
                  },
                  "description": "Structured findings emitted by the step, each pairing an issue with a suggestion and its citing documents. Empty when the step passed or did not complete."
                },
                "documentReferences": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "documentShortId": {
                        "type": "string",
                        "description": "Stable short identifier for the source document (e.g. \"ctia\", \"google-rcs-aup\").",
                        "examples": [
                          "brand-policy",
                          "ctia"
                        ]
                      },
                      "documentName": {
                        "type": "string",
                        "description": "Human-readable document name.",
                        "examples": [
                          "Brand Identity Verification Guidelines",
                          "CTIA Branding Requirements"
                        ]
                      },
                      "publicUrl": {
                        "type": "string",
                        "description": "Public URL of the source document. Empty string if the document has no public URL.",
                        "examples": [
                          "https://example.com/brand-identity-verification.pdf",
                          ""
                        ]
                      },
                      "page": {
                        "description": "Page reference within the document, when extractable.",
                        "examples": [
                          "12",
                          "42"
                        ],
                        "type": "string"
                      },
                      "section": {
                        "description": "Section heading within the document, when extractable.",
                        "examples": [
                          "2.1.3",
                          "4.2 Website Branding Requirements"
                        ],
                        "type": "string"
                      },
                      "sectionUrl": {
                        "description": "Deep link to the section anchor on the public URL, when resolvable.",
                        "examples": [
                          "https://example.com/guidelines.pdf#section-2.1",
                          "https://example.com/spec#branding"
                        ],
                        "type": "string"
                      }
                    },
                    "required": [
                      "documentShortId",
                      "documentName",
                      "publicUrl"
                    ],
                    "additionalProperties": false
                  },
                  "description": "Deduplicated union of all source documents cited across this step's findings. Empty when the step passed or did not complete."
                }
              },
              "required": [
                "step_id",
                "status",
                "score",
                "issues",
                "suggestions",
                "justification",
                "findings",
                "documentReferences"
              ],
              "additionalProperties": false
            },
            "description": "Detailed per-step analysis results."
          },
          "errorCode": {
            "description": "Machine-readable error code when the analysis result is ERROR. Null/absent when the analysis result is PASS or FAIL.",
            "examples": [
              null,
              "ERR_NETWORK_FAILURE",
              "ERR_INVALID_DOCUMENT_FORMAT"
            ],
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "errorMessage": {
            "description": "Human-readable error message when the analysis result is ERROR. Null/absent when the analysis result is PASS or FAIL.",
            "examples": [
              null,
              "Network failure during analysis",
              "Invalid document format encountered"
            ],
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "projectId",
          "analysisId",
          "analysisResult",
          "stepDetails"
        ],
        "additionalProperties": false
      }
    },
    "securitySchemes": {
      "BearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "API key via Bearer token"
      },
      "PrecheckOAuth": {
        "type": "oauth2",
        "description": "PreCheck OAuth2 client-credentials token",
        "flows": {
          "clientCredentials": {
            "tokenUrl": "/auth",
            "scopes": {
              "precheck:verify": "Submit PreCheck analysis"
            }
          }
        }
      }
    },
    "parameters": {
      "CallbackSignatureHeader": {
        "name": "x-texterid-request-signature",
        "in": "header",
        "required": false,
        "description": "HMAC-SHA256 signature over the payload, signed by the client API key (canonical JSON including null fields).",
        "schema": {
          "type": "string"
        }
      }
    }
  }
}
```