> ## Documentation Index
> Fetch the complete documentation index at: https://docs.photon.codes/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Use Stable documentation by default. Honor an explicit Beta request or a URL under /docs/beta/. If the requested version conflicts with the installed CLI package or API origin, clarify the target before writing integration code.
> Pages under /docs/beta/ document Beta; other product pages document Stable. Keep the CLI package, commands, API origin, and credentials within the selected version. State the documentation version in your answer.
> For MCP search, always pass version: Stable or version: Beta. Unfiltered search mixes both versions. For filesystem reads, keep Beta queries under /beta/ and exclude /beta/ from Stable queries; discover paths before reading them.
> The public docs base is https://photon.codes/docs. Convert MCP page paths to public URLs under that base, preserving /beta/ when present. Read https://photon.codes/docs/skill.md for version selection and https://photon.codes/docs/llms.txt for the version indexes.

# Correct a brand

> Updates a brand. A PATCH containing only supportEmail commits synchronously. Registry-facing and mixed changes use a durable correction: the complete revised profile becomes active atomically once the registry applies it, and if registration then fails the brand reports action_required with that profile and its failureReasons. On a brand whose registration was not accepted, the same PATCH fixes and resubmits it; resubmitting unchanged details returns REGISTRATION_DETAILS_UNCHANGED. A brand's profile type is immutable.



## OpenAPI

````yaml https://api.photon.codes/openapi.json patch /v1/organizations/{organization_id}/10dlc/brands/{brandId}
openapi: 3.1.0
info:
  title: Photon API
  version: 1.0.0
servers:
  - url: https://api.photon.codes
security: []
paths:
  /v1/organizations/{organization_id}/10dlc/brands/{brandId}:
    patch:
      tags:
        - 10DLC brands
      summary: Correct a brand
      description: >-
        Updates a brand. A PATCH containing only supportEmail commits
        synchronously. Registry-facing and mixed changes use a durable
        correction: the complete revised profile becomes active atomically once
        the registry applies it, and if registration then fails the brand
        reports action_required with that profile and its failureReasons. On a
        brand whose registration was not accepted, the same PATCH fixes and
        resubmits it; resubmitting unchanged details returns
        REGISTRATION_DETAILS_UNCHANGED. A brand's profile type is immutable.
      operationId: updateTenDlcBrand
      parameters:
        - description: Identifies one logical mutation across retries.
          in: header
          name: Idempotency-Key
          required: true
          schema:
            maxLength: 255
            minLength: 1
            pattern: ^[\x21-\x7e]{1,255}$
            type: string
        - in: path
          name: brandId
          required: true
          schema:
            pattern: ^pho_brd_[0-9a-z]{26}$
            type: string
        - in: path
          name: organization_id
          required: true
          schema:
            pattern: ^pho_org_[0-9a-z]{26}$
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateTenDlcBrandRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpdateTenDlcBrandResponse'
          description: The updated brand after a local messaging-compliance-only change.
          headers:
            Deprecation:
              $ref: '#/components/headers/Deprecation'
            Idempotent-Replayed:
              $ref: '#/components/headers/Idempotent-Replayed'
            Link:
              $ref: '#/components/headers/Link'
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Retry-After:
              $ref: '#/components/headers/Retry-After'
            Sunset:
              $ref: '#/components/headers/Sunset'
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
            X-Trace-ID:
              $ref: '#/components/headers/X-Trace-ID'
        '202':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpdateTenDlcBrandResponse'
          description: The redacted brand while its correction is in progress.
          headers:
            Deprecation:
              $ref: '#/components/headers/Deprecation'
            Idempotent-Replayed:
              $ref: '#/components/headers/Idempotent-Replayed'
            Link:
              $ref: '#/components/headers/Link'
            Location:
              description: Canonical resource to poll for completion.
              schema:
                format: uri-reference
                type: string
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Retry-After:
              description: Minimum number of seconds to wait before polling again.
              schema:
                minimum: 0
                type: integer
            Sunset:
              $ref: '#/components/headers/Sunset'
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
            X-Trace-ID:
              $ref: '#/components/headers/X-Trace-ID'
        '400':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/UpdateTenDlcBrandBadRequestProblem'
          description: >-
            IDEMPOTENCY_KEY_REQUIRED: Idempotency Key Required;
            IDEMPOTENCY_KEY_INVALID: Idempotency Key Invalid
          headers:
            Deprecation:
              $ref: '#/components/headers/Deprecation'
            Idempotent-Replayed:
              $ref: '#/components/headers/Idempotent-Replayed'
            Link:
              $ref: '#/components/headers/Link'
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Retry-After:
              $ref: '#/components/headers/Retry-After'
            Sunset:
              $ref: '#/components/headers/Sunset'
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
            X-Trace-ID:
              $ref: '#/components/headers/X-Trace-ID'
        '401':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/NotAuthenticatedProblem'
          description: 'NOT_AUTHENTICATED: Not Authenticated'
          headers:
            Link:
              description: Optional related resources.
              schema:
                type: string
            RateLimit:
              description: Optional rate limit information.
              schema:
                type: string
            RateLimit-Policy:
              description: Optional rate limit policy.
              schema:
                type: string
            Retry-After:
              description: Optional retry delay or HTTP date.
              schema:
                type: string
            WWW-Authenticate:
              required: true
              schema:
                type: string
            X-Request-ID:
              description: Application request identifier.
              schema:
                type: string
        '403':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/UpdateTenDlcBrandForbiddenProblem'
          description: >-
            FORBIDDEN: Forbidden; RESOURCE_MISMATCH: Resource Mismatch


            FORBIDDEN: Forbidden; INSUFFICIENT_SCOPE: Insufficient Scope;
            ORGANIZATION_SSO_REQUIRED: Organization SSO Required
          headers:
            Deprecation:
              description: >-
                RFC 9745 structured-field Date at which the operation was or
                will be deprecated: `@` followed by Unix seconds, for example
                `@1767225599`.
              schema:
                pattern: ^@-?[0-9]+$
                type: string
            Idempotent-Replayed:
              description: True when this response was replayed from an earlier attempt.
              schema:
                type: boolean
            Link:
              description: |-
                Links related to lifecycle or remediation documentation.

                Optional related resources.
              schema:
                type: string
            RateLimit:
              description: |-
                Current rate-limit state.

                Optional rate limit information.
              schema:
                type: string
            RateLimit-Policy:
              description: |-
                Rate-limit policy applied by the gateway.

                Optional rate limit policy.
              schema:
                type: string
            Retry-After:
              description: |-
                Delay before retrying, in seconds or as an HTTP date.

                Optional retry delay or HTTP date.
              schema:
                type: string
            Sunset:
              description: >-
                RFC 8594 HTTP-date (IMF-fixdate) after which the operation may
                become unavailable, for example `Thu, 31 Dec 2026 23:59:59 GMT`.
              schema:
                pattern: >-
                  ^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), [0-9]{2}
                  (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4}
                  [0-9]{2}:[0-9]{2}:[0-9]{2} GMT$
                type: string
            X-Request-ID:
              description: |-
                Identifier for this HTTP attempt.

                Application request identifier.
              schema:
                type: string
            X-Trace-ID:
              description: >-
                Trace ID of this request. Sent alongside X-Request-ID when a
                middleware published a trace ID for the request.
              schema:
                pattern: ^(?!0{32}$)[0-9a-f]{32}$
                type: string
        '404':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/BrandNotFoundProblem'
          description: 'BRAND_NOT_FOUND: Brand Not Found'
          headers:
            Deprecation:
              $ref: '#/components/headers/Deprecation'
            Idempotent-Replayed:
              $ref: '#/components/headers/Idempotent-Replayed'
            Link:
              $ref: '#/components/headers/Link'
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Retry-After:
              $ref: '#/components/headers/Retry-After'
            Sunset:
              $ref: '#/components/headers/Sunset'
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
            X-Trace-ID:
              $ref: '#/components/headers/X-Trace-ID'
        '409':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/UpdateTenDlcBrandConflictProblem'
          description: >-
            IDEMPOTENCY_CONFLICT: Idempotency Conflict; INVALID_LIFECYCLE_STATE:
            Invalid Lifecycle State; ORGANIZATION_CLOSING: Organization is
            closing; REGISTRATION_DETAILS_UNCHANGED: Registration Details
            Unchanged
          headers:
            Deprecation:
              $ref: '#/components/headers/Deprecation'
            Idempotent-Replayed:
              $ref: '#/components/headers/Idempotent-Replayed'
            Link:
              $ref: '#/components/headers/Link'
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Retry-After:
              $ref: '#/components/headers/Retry-After'
            Sunset:
              $ref: '#/components/headers/Sunset'
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
            X-Trace-ID:
              $ref: '#/components/headers/X-Trace-ID'
        '413':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/PayloadTooLargeProblem'
          description: 'PAYLOAD_TOO_LARGE: Payload Too Large'
          headers:
            Deprecation:
              $ref: '#/components/headers/Deprecation'
            Idempotent-Replayed:
              $ref: '#/components/headers/Idempotent-Replayed'
            Link:
              $ref: '#/components/headers/Link'
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Retry-After:
              $ref: '#/components/headers/Retry-After'
            Sunset:
              $ref: '#/components/headers/Sunset'
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
            X-Trace-ID:
              $ref: '#/components/headers/X-Trace-ID'
        '422':
          content:
            application/problem+json:
              schema:
                $ref: >-
                  #/components/schemas/UpdateTenDlcBrandUnprocessableEntityProblem
          description: >-
            VALIDATION_FAILED: Request Validation Failed;
            IDEMPOTENCY_KEY_REUSED: Idempotency Key Reused;
            UNSUPPORTED_ENTITY_TYPE: Unsupported Entity Type;
            PHONE_NOT_SMS_CAPABLE: Phone Is Not SMS Capable
          headers:
            Deprecation:
              $ref: '#/components/headers/Deprecation'
            Idempotent-Replayed:
              $ref: '#/components/headers/Idempotent-Replayed'
            Link:
              $ref: '#/components/headers/Link'
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Retry-After:
              $ref: '#/components/headers/Retry-After'
            Sunset:
              $ref: '#/components/headers/Sunset'
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
            X-Trace-ID:
              $ref: '#/components/headers/X-Trace-ID'
        '429':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/UpdateTenDlcBrandTooManyRequestsProblem'
          description: >-
            RATE_LIMITED: Too Many Requests; BRAND_VERIFICATION_RATE_LIMITED:
            Brand Verification Rate Limited
          headers:
            Deprecation:
              $ref: '#/components/headers/Deprecation'
            Idempotent-Replayed:
              $ref: '#/components/headers/Idempotent-Replayed'
            Link:
              $ref: '#/components/headers/Link'
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Retry-After:
              $ref: '#/components/headers/Retry-After'
            Sunset:
              $ref: '#/components/headers/Sunset'
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
            X-Trace-ID:
              $ref: '#/components/headers/X-Trace-ID'
        '500':
          content:
            application/problem+json:
              schema:
                $ref: >-
                  #/components/schemas/UpdateTenDlcBrandInternalServerErrorProblem
          description: |-
            INVALID_AUTH_CONTEXT: Invalid Authentication Context

            INTERNAL_ERROR: Internal Server Error
          headers:
            Deprecation:
              description: >-
                RFC 9745 structured-field Date at which the operation was or
                will be deprecated: `@` followed by Unix seconds, for example
                `@1767225599`.
              schema:
                pattern: ^@-?[0-9]+$
                type: string
            Idempotent-Replayed:
              description: True when this response was replayed from an earlier attempt.
              schema:
                type: boolean
            Link:
              description: |-
                Links related to lifecycle or remediation documentation.

                Optional related resources.
              schema:
                type: string
            RateLimit:
              description: |-
                Current rate-limit state.

                Optional rate limit information.
              schema:
                type: string
            RateLimit-Policy:
              description: |-
                Rate-limit policy applied by the gateway.

                Optional rate limit policy.
              schema:
                type: string
            Retry-After:
              description: |-
                Delay before retrying, in seconds or as an HTTP date.

                Optional retry delay or HTTP date.
              schema:
                type: string
            Sunset:
              description: >-
                RFC 8594 HTTP-date (IMF-fixdate) after which the operation may
                become unavailable, for example `Thu, 31 Dec 2026 23:59:59 GMT`.
              schema:
                pattern: >-
                  ^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), [0-9]{2}
                  (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4}
                  [0-9]{2}:[0-9]{2}:[0-9]{2} GMT$
                type: string
            X-Request-ID:
              description: |-
                Identifier for this HTTP attempt.

                Application request identifier.
              schema:
                type: string
            X-Trace-ID:
              description: >-
                Trace ID of this request. Sent alongside X-Request-ID when a
                middleware published a trace ID for the request.
              schema:
                pattern: ^(?!0{32}$)[0-9a-f]{32}$
                type: string
        '502':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ServiceFailureProblem'
          description: 'SERVICE_FAILURE: Service Failure'
          headers:
            Deprecation:
              $ref: '#/components/headers/Deprecation'
            Idempotent-Replayed:
              $ref: '#/components/headers/Idempotent-Replayed'
            Link:
              $ref: '#/components/headers/Link'
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Retry-After:
              $ref: '#/components/headers/Retry-After'
            Sunset:
              $ref: '#/components/headers/Sunset'
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
            X-Trace-ID:
              $ref: '#/components/headers/X-Trace-ID'
        '503':
          content:
            application/problem+json:
              schema:
                $ref: >-
                  #/components/schemas/UpdateTenDlcBrandServiceUnavailableProblem
          description: |-
            SERVICE_UNAVAILABLE: Service Temporarily Unavailable

            UPSTREAM_UNAVAILABLE: Upstream Service Unavailable
          headers:
            Deprecation:
              description: >-
                RFC 9745 structured-field Date at which the operation was or
                will be deprecated: `@` followed by Unix seconds, for example
                `@1767225599`.
              schema:
                pattern: ^@-?[0-9]+$
                type: string
            Idempotent-Replayed:
              description: True when this response was replayed from an earlier attempt.
              schema:
                type: boolean
            Link:
              description: |-
                Links related to lifecycle or remediation documentation.

                Optional related resources.
              schema:
                type: string
            RateLimit:
              description: |-
                Current rate-limit state.

                Optional rate limit information.
              schema:
                type: string
            RateLimit-Policy:
              description: |-
                Rate-limit policy applied by the gateway.

                Optional rate limit policy.
              schema:
                type: string
            Retry-After:
              description: |-
                Delay before retrying, in seconds or as an HTTP date.

                Optional retry delay or HTTP date.
              schema:
                type: string
            Sunset:
              description: >-
                RFC 8594 HTTP-date (IMF-fixdate) after which the operation may
                become unavailable, for example `Thu, 31 Dec 2026 23:59:59 GMT`.
              schema:
                pattern: >-
                  ^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), [0-9]{2}
                  (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4}
                  [0-9]{2}:[0-9]{2}:[0-9]{2} GMT$
                type: string
            X-Request-ID:
              description: |-
                Identifier for this HTTP attempt.

                Application request identifier.
              schema:
                type: string
            X-Trace-ID:
              description: >-
                Trace ID of this request. Sent alongside X-Request-ID when a
                middleware published a trace ID for the request.
              schema:
                pattern: ^(?!0{32}$)[0-9a-f]{32}$
                type: string
        '504':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/UpdateTenDlcBrandGatewayTimeoutProblem'
          description: 'REQUEST_TIMEOUT: Request Timeout; SERVICE_TIMEOUT: Service Timeout'
          headers:
            Deprecation:
              $ref: '#/components/headers/Deprecation'
            Idempotent-Replayed:
              $ref: '#/components/headers/Idempotent-Replayed'
            Link:
              $ref: '#/components/headers/Link'
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Retry-After:
              $ref: '#/components/headers/Retry-After'
            Sunset:
              $ref: '#/components/headers/Sunset'
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
            X-Trace-ID:
              $ref: '#/components/headers/X-Trace-ID'
      security:
        - accountServiceKey: []
        - serviceIdentityBearer: []
        - oauth2:
            - ten_dlc:write
components:
  schemas:
    UpdateTenDlcBrandRequest:
      anyOf:
        - additionalProperties: false
          properties:
            profile:
              discriminator:
                mapping:
                  organization: '#/components/schemas/OrganizationProfileInput'
                  sole_proprietor: '#/components/schemas/SoleProprietorProfileInput'
                propertyName: type
              oneOf:
                - $ref: '#/components/schemas/OrganizationProfileInput'
                - $ref: '#/components/schemas/SoleProprietorProfileInput'
            updateMask:
              prefixItems:
                - const: profile
                  type: string
              type: array
          required:
            - profile
            - updateMask
          type: object
        - additionalProperties: false
          properties:
            profile:
              oneOf:
                - additionalProperties: false
                  properties:
                    address:
                      additionalProperties: false
                      properties:
                        city:
                          maxLength: 100
                          minLength: 1
                          type: string
                        postalCode:
                          pattern: ^\d{5}$
                          type: string
                        state:
                          type: string
                        street:
                          maxLength: 100
                          minLength: 1
                          type: string
                      required:
                        - city
                        - postalCode
                        - state
                        - street
                      type: object
                    companyName:
                      maxLength: 100
                      minLength: 1
                      type: string
                    displayName:
                      maxLength: 100
                      minLength: 1
                      type: string
                    ein:
                      pattern: ^\d{2}-?\d{7}$
                      type: string
                    email:
                      format: email
                      maxLength: 100
                      pattern: >-
                        ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
                      type: string
                    entityType:
                      enum:
                        - private_profit
                        - non_profit
                      type: string
                    firstName:
                      maxLength: 100
                      minLength: 1
                      type: string
                    lastName:
                      maxLength: 100
                      minLength: 1
                      type: string
                    phone:
                      maxLength: 20
                      pattern: ^\+[1-9]\d{7,14}$
                      type: string
                    supportEmail:
                      format: email
                      maxLength: 254
                      pattern: >-
                        ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
                      type: string
                    type:
                      const: organization
                      type: string
                    vertical:
                      enum:
                        - agriculture
                        - communication
                        - construction
                        - education
                        - energy
                        - entertainment
                        - financial
                        - gambling
                        - government
                        - healthcare
                        - hospitality
                        - human_resources
                        - insurance
                        - legal
                        - manufacturing
                        - ngo
                        - political
                        - postal
                        - professional
                        - real_estate
                        - retail
                        - technology
                        - transportation
                      type: string
                    website:
                      format: uri
                      maxLength: 100
                      type: string
                  required:
                    - type
                  type: object
                - additionalProperties: false
                  properties:
                    address:
                      additionalProperties: false
                      properties:
                        city:
                          maxLength: 100
                          minLength: 1
                          type: string
                        postalCode:
                          pattern: ^\d{5}$
                          type: string
                        state:
                          type: string
                        street:
                          maxLength: 100
                          minLength: 1
                          type: string
                      required:
                        - city
                        - postalCode
                        - state
                        - street
                      type: object
                    displayName:
                      maxLength: 100
                      minLength: 1
                      type: string
                    email:
                      format: email
                      maxLength: 100
                      pattern: >-
                        ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
                      type: string
                    firstName:
                      maxLength: 100
                      minLength: 1
                      type: string
                    lastName:
                      maxLength: 100
                      minLength: 1
                      type: string
                    phone:
                      pattern: ^\+1\d{10}$
                      type: string
                    supportEmail:
                      format: email
                      maxLength: 254
                      pattern: >-
                        ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
                      type: string
                    type:
                      const: sole_proprietor
                      type: string
                    vertical:
                      enum:
                        - agriculture
                        - communication
                        - construction
                        - education
                        - energy
                        - entertainment
                        - financial
                        - gambling
                        - government
                        - healthcare
                        - hospitality
                        - human_resources
                        - insurance
                        - legal
                        - manufacturing
                        - ngo
                        - political
                        - postal
                        - professional
                        - real_estate
                        - retail
                        - technology
                        - transportation
                      type: string
                  required:
                    - type
                  type: object
            updateMask:
              items:
                enum:
                  - profile.address
                  - profile.companyName
                  - profile.displayName
                  - profile.ein
                  - profile.email
                  - profile.entityType
                  - profile.firstName
                  - profile.lastName
                  - profile.phone
                  - profile.supportEmail
                  - profile.vertical
                  - profile.website
                type: string
              maxItems: 12
              minItems: 1
              type: array
          required:
            - profile
            - updateMask
          type: object
    UpdateTenDlcBrandResponse:
      additionalProperties: false
      properties:
        data:
          additionalProperties: false
          properties:
            capabilities:
              additionalProperties: false
              properties:
                canResubmit:
                  description: >-
                    Whether a PATCH would now be accepted to fix and resubmit a
                    registration that was not accepted.
                  type: boolean
                editableFields:
                  description: >-
                    The updateMask paths such a PATCH accepts for this profile
                    type. Empty unless canResubmit.
                  items:
                    type: string
                  type: array
              required:
                - canResubmit
                - editableFields
              type: object
            createdAt:
              example: '2026-01-01T00:00:00.000Z'
              format: date-time
              type: string
            failureReasons:
              description: >-
                Why the registration was not accepted, while the brand is
                action_required because of it. PATCH the named fields to fix and
                resubmit in one request. Empty otherwise.
              example:
                - fields:
                    - profile.address
                  message: Street address is not valid
                - fields:
                    - profile.phone
                  message: >-
                    Mobile Phone Number not supported. Must be a Mobile Phone
                    Number that can receive SMS messages.
              items:
                additionalProperties: false
                properties:
                  fields:
                    description: >-
                      The updateMask paths this reason points at. Empty when it
                      names no single field.
                    items:
                      type: string
                    type: array
                  message:
                    description: Why the registration was not accepted.
                    type: string
                required:
                  - fields
                  - message
                type: object
              type: array
            feedback:
              items:
                additionalProperties: false
                properties:
                  category:
                    enum:
                      - tax_id
                      - nonprofit
                      - other
                    type: string
                  message:
                    type: string
                required:
                  - category
                  - message
                type: object
              type: array
            id:
              type: string
            profile:
              oneOf:
                - additionalProperties: false
                  properties:
                    address:
                      additionalProperties: false
                      properties:
                        city:
                          maxLength: 100
                          minLength: 1
                          type: string
                        postalCode:
                          pattern: ^\d{5}$
                          type: string
                        state:
                          type: string
                        street:
                          maxLength: 100
                          minLength: 1
                          type: string
                      required:
                        - city
                        - postalCode
                        - state
                        - street
                      type: object
                    companyName:
                      type: string
                    displayName:
                      type: string
                    einLast4:
                      maxLength: 4
                      minLength: 4
                      type: string
                    email:
                      format: email
                      type: string
                    entityType:
                      enum:
                        - private_profit
                        - non_profit
                      type: string
                    firstName:
                      type: string
                    lastName:
                      type: string
                    phoneLast4:
                      maxLength: 4
                      minLength: 4
                      type: string
                    supportEmail:
                      format: email
                      type: string
                    type:
                      const: organization
                      type: string
                    vertical:
                      enum:
                        - agriculture
                        - communication
                        - construction
                        - education
                        - energy
                        - entertainment
                        - financial
                        - gambling
                        - government
                        - healthcare
                        - hospitality
                        - human_resources
                        - insurance
                        - legal
                        - manufacturing
                        - ngo
                        - political
                        - postal
                        - professional
                        - real_estate
                        - retail
                        - technology
                        - transportation
                      type: string
                    website:
                      format: uri
                      type: string
                  required:
                    - address
                    - displayName
                    - email
                    - firstName
                    - lastName
                    - phoneLast4
                    - supportEmail
                    - vertical
                    - companyName
                    - einLast4
                    - entityType
                    - type
                    - website
                  type: object
                - additionalProperties: false
                  properties:
                    address:
                      additionalProperties: false
                      properties:
                        city:
                          maxLength: 100
                          minLength: 1
                          type: string
                        postalCode:
                          pattern: ^\d{5}$
                          type: string
                        state:
                          type: string
                        street:
                          maxLength: 100
                          minLength: 1
                          type: string
                      required:
                        - city
                        - postalCode
                        - state
                        - street
                      type: object
                    displayName:
                      type: string
                    email:
                      format: email
                      type: string
                    firstName:
                      type: string
                    lastName:
                      type: string
                    phoneLast4:
                      maxLength: 4
                      minLength: 4
                      type: string
                    supportEmail:
                      format: email
                      type: string
                    type:
                      const: sole_proprietor
                      type: string
                    vertical:
                      enum:
                        - agriculture
                        - communication
                        - construction
                        - education
                        - energy
                        - entertainment
                        - financial
                        - gambling
                        - government
                        - healthcare
                        - hospitality
                        - human_resources
                        - insurance
                        - legal
                        - manufacturing
                        - ngo
                        - political
                        - postal
                        - professional
                        - real_estate
                        - retail
                        - technology
                        - transportation
                      type: string
                  required:
                    - address
                    - displayName
                    - email
                    - firstName
                    - lastName
                    - phoneLast4
                    - supportEmail
                    - vertical
                    - type
                  type: object
            registeredAt:
              example: '2026-01-01T00:00:00.000Z'
              format: date-time
              type: string
            status:
              enum:
                - submitting
                - submitted
                - action_required
                - otp_required
                - verified
                - vetted_verified
                - manual_review
              type: string
            submittedAt:
              example: '2026-01-01T00:00:00.000Z'
              format: date-time
              type: string
            updatedAt:
              example: '2026-01-01T00:00:00.000Z'
              format: date-time
              type: string
          required:
            - capabilities
            - createdAt
            - failureReasons
            - feedback
            - id
            - profile
            - status
            - updatedAt
          type: object
      required:
        - data
      type: object
    UpdateTenDlcBrandBadRequestProblem:
      oneOf:
        - $ref: '#/components/schemas/IdempotencyKeyRequiredProblem'
        - $ref: '#/components/schemas/IdempotencyKeyInvalidProblem'
    NotAuthenticatedProblem:
      additionalProperties:
        $ref: '#/components/schemas/JsonValue'
      example:
        code: NOT_AUTHENTICATED
        status: 401
        title: Not Authenticated
        type: https://photon.codes/docs/problems/not-authenticated
      properties:
        code:
          const: NOT_AUTHENTICATED
          type: string
        detail:
          minLength: 1
          type: string
        instance:
          minLength: 1
          type: string
        remediation:
          not: {}
        requestId:
          minLength: 1
          type: string
        status:
          const: 401
          type: number
        title:
          const: Not Authenticated
          type: string
        type:
          const: https://photon.codes/docs/problems/not-authenticated
          type: string
      required:
        - code
        - status
        - title
        - type
      type: object
    UpdateTenDlcBrandForbiddenProblem:
      oneOf:
        - $ref: '#/components/schemas/ForbiddenProblem'
        - $ref: '#/components/schemas/InsufficientScopeProblem'
        - $ref: '#/components/schemas/OrganizationSsoRequiredProblem'
        - $ref: '#/components/schemas/ResourceMismatchProblem'
    BrandNotFoundProblem:
      additionalProperties:
        $ref: '#/components/schemas/JsonValue'
      example:
        code: BRAND_NOT_FOUND
        status: 404
        title: Brand Not Found
        type: https://photon.codes/docs/problems/brand-not-found
      properties:
        code:
          const: BRAND_NOT_FOUND
          type: string
        detail:
          minLength: 1
          type: string
        instance:
          minLength: 1
          type: string
        remediation:
          not: {}
        requestId:
          minLength: 1
          type: string
        status:
          const: 404
          type: number
        title:
          const: Brand Not Found
          type: string
        type:
          const: https://photon.codes/docs/problems/brand-not-found
          type: string
      required:
        - code
        - status
        - title
        - type
      type: object
    UpdateTenDlcBrandConflictProblem:
      oneOf:
        - $ref: '#/components/schemas/IdempotencyConflictProblem'
        - $ref: '#/components/schemas/InvalidLifecycleStateProblem'
        - $ref: '#/components/schemas/OrganizationClosingProblem'
        - $ref: '#/components/schemas/RegistrationDetailsUnchangedProblem'
    PayloadTooLargeProblem:
      additionalProperties:
        $ref: '#/components/schemas/JsonValue'
      example:
        code: PAYLOAD_TOO_LARGE
        status: 413
        title: Payload Too Large
        type: https://photon.codes/docs/problems/payload-too-large
      properties:
        code:
          const: PAYLOAD_TOO_LARGE
          type: string
        detail:
          minLength: 1
          type: string
        instance:
          minLength: 1
          type: string
        remediation:
          not: {}
        requestId:
          minLength: 1
          type: string
        status:
          const: 413
          type: number
        title:
          const: Payload Too Large
          type: string
        type:
          const: https://photon.codes/docs/problems/payload-too-large
          type: string
      required:
        - code
        - status
        - title
        - type
      type: object
    UpdateTenDlcBrandUnprocessableEntityProblem:
      oneOf:
        - $ref: '#/components/schemas/ValidationFailedProblem'
        - $ref: '#/components/schemas/IdempotencyKeyReusedProblem'
        - $ref: '#/components/schemas/UnsupportedEntityTypeProblem'
        - $ref: '#/components/schemas/PhoneNotSmsCapableProblem'
    UpdateTenDlcBrandTooManyRequestsProblem:
      oneOf:
        - $ref: '#/components/schemas/RateLimitedProblem'
        - $ref: '#/components/schemas/BrandVerificationRateLimitedProblem'
    UpdateTenDlcBrandInternalServerErrorProblem:
      oneOf:
        - $ref: '#/components/schemas/InternalErrorProblem'
        - $ref: '#/components/schemas/InvalidAuthContextProblem'
    ServiceFailureProblem:
      additionalProperties:
        $ref: '#/components/schemas/JsonValue'
      example:
        code: SERVICE_FAILURE
        status: 502
        title: Service Failure
        type: https://photon.codes/docs/problems/service-failure
      properties:
        code:
          const: SERVICE_FAILURE
          type: string
        detail:
          minLength: 1
          type: string
        instance:
          minLength: 1
          type: string
        remediation:
          not: {}
        requestId:
          minLength: 1
          type: string
        status:
          const: 502
          type: number
        title:
          const: Service Failure
          type: string
        type:
          const: https://photon.codes/docs/problems/service-failure
          type: string
      required:
        - code
        - status
        - title
        - type
      type: object
    UpdateTenDlcBrandServiceUnavailableProblem:
      oneOf:
        - $ref: '#/components/schemas/ServiceUnavailableProblem'
        - $ref: '#/components/schemas/UpstreamUnavailableProblem'
    UpdateTenDlcBrandGatewayTimeoutProblem:
      oneOf:
        - $ref: '#/components/schemas/RequestTimeoutProblem'
        - $ref: '#/components/schemas/ServiceTimeoutProblem'
    OrganizationProfileInput:
      additionalProperties: false
      properties:
        address:
          additionalProperties: false
          properties:
            city:
              maxLength: 100
              minLength: 1
              type: string
            postalCode:
              pattern: ^\d{5}$
              type: string
            state:
              type: string
            street:
              maxLength: 100
              minLength: 1
              type: string
          required:
            - city
            - postalCode
            - state
            - street
          type: object
        companyName:
          maxLength: 100
          minLength: 1
          type: string
        displayName:
          maxLength: 100
          minLength: 1
          type: string
        ein:
          pattern: ^\d{2}-?\d{7}$
          type: string
        email:
          format: email
          maxLength: 100
          pattern: >-
            ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
          type: string
        entityType:
          enum:
            - private_profit
            - non_profit
          type: string
        firstName:
          maxLength: 100
          minLength: 1
          type: string
        lastName:
          maxLength: 100
          minLength: 1
          type: string
        phone:
          maxLength: 20
          pattern: ^\+[1-9]\d{7,14}$
          type: string
        supportEmail:
          format: email
          maxLength: 254
          pattern: >-
            ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
          type: string
        type:
          const: organization
          type: string
        vertical:
          enum:
            - agriculture
            - communication
            - construction
            - education
            - energy
            - entertainment
            - financial
            - gambling
            - government
            - healthcare
            - hospitality
            - human_resources
            - insurance
            - legal
            - manufacturing
            - ngo
            - political
            - postal
            - professional
            - real_estate
            - retail
            - technology
            - transportation
          type: string
        website:
          format: uri
          maxLength: 100
          type: string
      required:
        - address
        - displayName
        - email
        - firstName
        - lastName
        - phone
        - supportEmail
        - vertical
        - companyName
        - ein
        - entityType
        - type
        - website
      type: object
    SoleProprietorProfileInput:
      additionalProperties: false
      properties:
        address:
          additionalProperties: false
          properties:
            city:
              maxLength: 100
              minLength: 1
              type: string
            postalCode:
              pattern: ^\d{5}$
              type: string
            state:
              type: string
            street:
              maxLength: 100
              minLength: 1
              type: string
          required:
            - city
            - postalCode
            - state
            - street
          type: object
        displayName:
          maxLength: 100
          minLength: 1
          type: string
        email:
          format: email
          maxLength: 100
          pattern: >-
            ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
          type: string
        firstName:
          maxLength: 100
          minLength: 1
          type: string
        lastName:
          maxLength: 100
          minLength: 1
          type: string
        phone:
          pattern: ^\+1\d{10}$
          type: string
        supportEmail:
          format: email
          maxLength: 254
          pattern: >-
            ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
          type: string
        type:
          const: sole_proprietor
          type: string
        vertical:
          enum:
            - agriculture
            - communication
            - construction
            - education
            - energy
            - entertainment
            - financial
            - gambling
            - government
            - healthcare
            - hospitality
            - human_resources
            - insurance
            - legal
            - manufacturing
            - ngo
            - political
            - postal
            - professional
            - real_estate
            - retail
            - technology
            - transportation
          type: string
      required:
        - address
        - displayName
        - email
        - firstName
        - lastName
        - phone
        - supportEmail
        - vertical
        - type
      type: object
    IdempotencyKeyRequiredProblem:
      additionalProperties:
        $ref: '#/components/schemas/JsonValue'
      example:
        code: IDEMPOTENCY_KEY_REQUIRED
        status: 400
        title: Idempotency Key Required
        type: https://photon.codes/docs/problems/idempotency-key-required
      properties:
        code:
          const: IDEMPOTENCY_KEY_REQUIRED
          type: string
        detail:
          minLength: 1
          type: string
        instance:
          minLength: 1
          type: string
        remediation:
          not: {}
        requestId:
          minLength: 1
          type: string
        status:
          const: 400
          type: number
        title:
          const: Idempotency Key Required
          type: string
        type:
          const: https://photon.codes/docs/problems/idempotency-key-required
          type: string
      required:
        - code
        - status
        - title
        - type
      type: object
    IdempotencyKeyInvalidProblem:
      additionalProperties:
        $ref: '#/components/schemas/JsonValue'
      example:
        code: IDEMPOTENCY_KEY_INVALID
        status: 400
        title: Idempotency Key Invalid
        type: https://photon.codes/docs/problems/idempotency-key-invalid
      properties:
        code:
          const: IDEMPOTENCY_KEY_INVALID
          type: string
        detail:
          minLength: 1
          type: string
        instance:
          minLength: 1
          type: string
        remediation:
          not: {}
        requestId:
          minLength: 1
          type: string
        status:
          const: 400
          type: number
        title:
          const: Idempotency Key Invalid
          type: string
        type:
          const: https://photon.codes/docs/problems/idempotency-key-invalid
          type: string
      required:
        - code
        - status
        - title
        - type
      type: object
    JsonValue:
      anyOf:
        - type: string
        - type: number
        - type: boolean
        - type: 'null'
        - items:
            $ref: '#/components/schemas/JsonValue'
          type: array
        - additionalProperties:
            $ref: '#/components/schemas/JsonValue'
          propertyNames:
            type: string
          type: object
    ForbiddenProblem:
      additionalProperties:
        $ref: '#/components/schemas/JsonValue'
      example:
        code: FORBIDDEN
        status: 403
        title: Forbidden
        type: https://photon.codes/docs/problems/forbidden
      properties:
        code:
          const: FORBIDDEN
          type: string
        detail:
          minLength: 1
          type: string
        instance:
          minLength: 1
          type: string
        remediation:
          not: {}
        requestId:
          minLength: 1
          type: string
        status:
          const: 403
          type: number
        title:
          const: Forbidden
          type: string
        type:
          const: https://photon.codes/docs/problems/forbidden
          type: string
      required:
        - code
        - status
        - title
        - type
      type: object
    InsufficientScopeProblem:
      additionalProperties:
        $ref: '#/components/schemas/JsonValue'
      example:
        code: INSUFFICIENT_SCOPE
        status: 403
        title: Insufficient Scope
        type: https://photon.codes/docs/problems/insufficient-scope
      properties:
        code:
          const: INSUFFICIENT_SCOPE
          type: string
        detail:
          minLength: 1
          type: string
        instance:
          minLength: 1
          type: string
        remediation:
          not: {}
        requestId:
          minLength: 1
          type: string
        status:
          const: 403
          type: number
        title:
          const: Insufficient Scope
          type: string
        type:
          const: https://photon.codes/docs/problems/insufficient-scope
          type: string
      required:
        - code
        - status
        - title
        - type
      type: object
    OrganizationSsoRequiredProblem:
      additionalProperties:
        $ref: '#/components/schemas/JsonValue'
      example:
        code: ORGANIZATION_SSO_REQUIRED
        status: 403
        title: Organization SSO Required
        type: https://photon.codes/docs/problems/organization-sso-required
      properties:
        code:
          const: ORGANIZATION_SSO_REQUIRED
          type: string
        detail:
          minLength: 1
          type: string
        instance:
          minLength: 1
          type: string
        remediation:
          not: {}
        requestId:
          minLength: 1
          type: string
        status:
          const: 403
          type: number
        title:
          const: Organization SSO Required
          type: string
        type:
          const: https://photon.codes/docs/problems/organization-sso-required
          type: string
      required:
        - code
        - status
        - title
        - type
      type: object
    ResourceMismatchProblem:
      additionalProperties:
        $ref: '#/components/schemas/JsonValue'
      example:
        code: RESOURCE_MISMATCH
        status: 403
        title: Resource Mismatch
        type: https://photon.codes/docs/problems/resource-mismatch
      properties:
        code:
          const: RESOURCE_MISMATCH
          type: string
        detail:
          minLength: 1
          type: string
        instance:
          minLength: 1
          type: string
        remediation:
          not: {}
        requestId:
          minLength: 1
          type: string
        status:
          const: 403
          type: number
        title:
          const: Resource Mismatch
          type: string
        type:
          const: https://photon.codes/docs/problems/resource-mismatch
          type: string
      required:
        - code
        - status
        - title
        - type
      type: object
    IdempotencyConflictProblem:
      additionalProperties:
        $ref: '#/components/schemas/JsonValue'
      example:
        code: IDEMPOTENCY_CONFLICT
        status: 409
        title: Idempotency Conflict
        type: https://photon.codes/docs/problems/idempotency-conflict
      properties:
        code:
          const: IDEMPOTENCY_CONFLICT
          type: string
        detail:
          minLength: 1
          type: string
        instance:
          minLength: 1
          type: string
        remediation:
          not: {}
        requestId:
          minLength: 1
          type: string
        status:
          const: 409
          type: number
        title:
          const: Idempotency Conflict
          type: string
        type:
          const: https://photon.codes/docs/problems/idempotency-conflict
          type: string
      required:
        - code
        - status
        - title
        - type
      type: object
    InvalidLifecycleStateProblem:
      additionalProperties:
        $ref: '#/components/schemas/JsonValue'
      example:
        code: INVALID_LIFECYCLE_STATE
        status: 409
        title: Invalid Lifecycle State
        type: https://photon.codes/docs/problems/invalid-lifecycle-state
      properties:
        code:
          const: INVALID_LIFECYCLE_STATE
          type: string
        detail:
          minLength: 1
          type: string
        instance:
          minLength: 1
          type: string
        remediation:
          not: {}
        requestId:
          minLength: 1
          type: string
        status:
          const: 409
          type: number
        title:
          const: Invalid Lifecycle State
          type: string
        type:
          const: https://photon.codes/docs/problems/invalid-lifecycle-state
          type: string
      required:
        - code
        - status
        - title
        - type
      type: object
    OrganizationClosingProblem:
      additionalProperties:
        $ref: '#/components/schemas/JsonValue'
      example:
        code: ORGANIZATION_CLOSING
        status: 409
        title: Organization is closing
        type: https://photon.codes/docs/problems/organization-closing
      properties:
        code:
          const: ORGANIZATION_CLOSING
          type: string
        detail:
          minLength: 1
          type: string
        instance:
          minLength: 1
          type: string
        remediation:
          not: {}
        requestId:
          minLength: 1
          type: string
        status:
          const: 409
          type: number
        title:
          const: Organization is closing
          type: string
        type:
          const: https://photon.codes/docs/problems/organization-closing
          type: string
      required:
        - code
        - status
        - title
        - type
      type: object
    RegistrationDetailsUnchangedProblem:
      additionalProperties:
        $ref: '#/components/schemas/JsonValue'
      example:
        code: REGISTRATION_DETAILS_UNCHANGED
        status: 409
        title: Registration Details Unchanged
        type: https://photon.codes/docs/problems/registration-details-unchanged
      properties:
        code:
          const: REGISTRATION_DETAILS_UNCHANGED
          type: string
        detail:
          minLength: 1
          type: string
        instance:
          minLength: 1
          type: string
        remediation:
          not: {}
        requestId:
          minLength: 1
          type: string
        status:
          const: 409
          type: number
        title:
          const: Registration Details Unchanged
          type: string
        type:
          const: https://photon.codes/docs/problems/registration-details-unchanged
          type: string
      required:
        - code
        - status
        - title
        - type
      type: object
    ValidationFailedProblem:
      additionalProperties:
        $ref: '#/components/schemas/JsonValue'
      example:
        code: VALIDATION_FAILED
        issues:
          - code: invalid_type
            location: json
            message: Expected a string.
            path: /name
        status: 422
        title: Request Validation Failed
        type: https://photon.codes/docs/problems/validation-failed
      properties:
        code:
          const: VALIDATION_FAILED
          type: string
        detail:
          minLength: 1
          type: string
        instance:
          minLength: 1
          type: string
        issues:
          items:
            $ref: '#/components/schemas/ValidationIssue'
          type: array
        remediation:
          not: {}
        requestId:
          minLength: 1
          type: string
        status:
          const: 422
          type: number
        title:
          const: Request Validation Failed
          type: string
        type:
          const: https://photon.codes/docs/problems/validation-failed
          type: string
      required:
        - issues
        - code
        - status
        - title
        - type
      type: object
    IdempotencyKeyReusedProblem:
      additionalProperties:
        $ref: '#/components/schemas/JsonValue'
      example:
        code: IDEMPOTENCY_KEY_REUSED
        status: 422
        title: Idempotency Key Reused
        type: https://photon.codes/docs/problems/idempotency-key-reused
      properties:
        code:
          const: IDEMPOTENCY_KEY_REUSED
          type: string
        detail:
          minLength: 1
          type: string
        instance:
          minLength: 1
          type: string
        remediation:
          not: {}
        requestId:
          minLength: 1
          type: string
        status:
          const: 422
          type: number
        title:
          const: Idempotency Key Reused
          type: string
        type:
          const: https://photon.codes/docs/problems/idempotency-key-reused
          type: string
      required:
        - code
        - status
        - title
        - type
      type: object
    UnsupportedEntityTypeProblem:
      additionalProperties:
        $ref: '#/components/schemas/JsonValue'
      example:
        code: UNSUPPORTED_ENTITY_TYPE
        status: 422
        title: Unsupported Entity Type
        type: https://photon.codes/docs/problems/unsupported-entity-type
      properties:
        code:
          const: UNSUPPORTED_ENTITY_TYPE
          type: string
        detail:
          minLength: 1
          type: string
        instance:
          minLength: 1
          type: string
        remediation:
          not: {}
        requestId:
          minLength: 1
          type: string
        status:
          const: 422
          type: number
        title:
          const: Unsupported Entity Type
          type: string
        type:
          const: https://photon.codes/docs/problems/unsupported-entity-type
          type: string
      required:
        - code
        - status
        - title
        - type
      type: object
    PhoneNotSmsCapableProblem:
      additionalProperties:
        $ref: '#/components/schemas/JsonValue'
      example:
        code: PHONE_NOT_SMS_CAPABLE
        status: 422
        title: Phone Is Not SMS Capable
        type: https://photon.codes/docs/problems/phone-not-sms-capable
      properties:
        code:
          const: PHONE_NOT_SMS_CAPABLE
          type: string
        detail:
          minLength: 1
          type: string
        instance:
          minLength: 1
          type: string
        remediation:
          not: {}
        requestId:
          minLength: 1
          type: string
        status:
          const: 422
          type: number
        title:
          const: Phone Is Not SMS Capable
          type: string
        type:
          const: https://photon.codes/docs/problems/phone-not-sms-capable
          type: string
      required:
        - code
        - status
        - title
        - type
      type: object
    RateLimitedProblem:
      additionalProperties:
        $ref: '#/components/schemas/JsonValue'
      example:
        code: RATE_LIMITED
        status: 429
        title: Too Many Requests
        type: https://photon.codes/docs/problems/rate-limited
      properties:
        code:
          const: RATE_LIMITED
          type: string
        detail:
          minLength: 1
          type: string
        instance:
          minLength: 1
          type: string
        remediation:
          not: {}
        requestId:
          minLength: 1
          type: string
        status:
          const: 429
          type: number
        title:
          const: Too Many Requests
          type: string
        type:
          const: https://photon.codes/docs/problems/rate-limited
          type: string
      required:
        - code
        - status
        - title
        - type
      type: object
    BrandVerificationRateLimitedProblem:
      additionalProperties:
        $ref: '#/components/schemas/JsonValue'
      example:
        code: BRAND_VERIFICATION_RATE_LIMITED
        status: 429
        title: Brand Verification Rate Limited
        type: https://photon.codes/docs/problems/brand-verification-rate-limited
      properties:
        code:
          const: BRAND_VERIFICATION_RATE_LIMITED
          type: string
        detail:
          minLength: 1
          type: string
        instance:
          minLength: 1
          type: string
        remediation:
          not: {}
        requestId:
          minLength: 1
          type: string
        status:
          const: 429
          type: number
        title:
          const: Brand Verification Rate Limited
          type: string
        type:
          const: https://photon.codes/docs/problems/brand-verification-rate-limited
          type: string
      required:
        - code
        - status
        - title
        - type
      type: object
    InternalErrorProblem:
      additionalProperties:
        $ref: '#/components/schemas/JsonValue'
      example:
        code: INTERNAL_ERROR
        status: 500
        title: Internal Server Error
        type: https://photon.codes/docs/problems/internal-error
      properties:
        code:
          const: INTERNAL_ERROR
          type: string
        detail:
          minLength: 1
          type: string
        instance:
          minLength: 1
          type: string
        remediation:
          not: {}
        requestId:
          minLength: 1
          type: string
        status:
          const: 500
          type: number
        title:
          const: Internal Server Error
          type: string
        type:
          const: https://photon.codes/docs/problems/internal-error
          type: string
      required:
        - code
        - status
        - title
        - type
      type: object
    InvalidAuthContextProblem:
      additionalProperties:
        $ref: '#/components/schemas/JsonValue'
      example:
        code: INVALID_AUTH_CONTEXT
        status: 500
        title: Invalid Authentication Context
        type: https://photon.codes/docs/problems/invalid-auth-context
      properties:
        code:
          const: INVALID_AUTH_CONTEXT
          type: string
        detail:
          minLength: 1
          type: string
        instance:
          minLength: 1
          type: string
        remediation:
          not: {}
        requestId:
          minLength: 1
          type: string
        status:
          const: 500
          type: number
        title:
          const: Invalid Authentication Context
          type: string
        type:
          const: https://photon.codes/docs/problems/invalid-auth-context
          type: string
      required:
        - code
        - status
        - title
        - type
      type: object
    ServiceUnavailableProblem:
      additionalProperties:
        $ref: '#/components/schemas/JsonValue'
      example:
        code: SERVICE_UNAVAILABLE
        status: 503
        title: Service Temporarily Unavailable
        type: https://photon.codes/docs/problems/service-unavailable
      properties:
        code:
          const: SERVICE_UNAVAILABLE
          type: string
        detail:
          minLength: 1
          type: string
        instance:
          minLength: 1
          type: string
        remediation:
          not: {}
        requestId:
          minLength: 1
          type: string
        status:
          const: 503
          type: number
        title:
          const: Service Temporarily Unavailable
          type: string
        type:
          const: https://photon.codes/docs/problems/service-unavailable
          type: string
      required:
        - code
        - status
        - title
        - type
      type: object
    UpstreamUnavailableProblem:
      additionalProperties:
        $ref: '#/components/schemas/JsonValue'
      example:
        code: UPSTREAM_UNAVAILABLE
        status: 503
        title: Upstream Service Unavailable
        type: https://photon.codes/docs/problems/upstream-unavailable
      properties:
        code:
          const: UPSTREAM_UNAVAILABLE
          type: string
        detail:
          minLength: 1
          type: string
        instance:
          minLength: 1
          type: string
        remediation:
          not: {}
        requestId:
          minLength: 1
          type: string
        status:
          const: 503
          type: number
        title:
          const: Upstream Service Unavailable
          type: string
        type:
          const: https://photon.codes/docs/problems/upstream-unavailable
          type: string
      required:
        - code
        - status
        - title
        - type
      type: object
    RequestTimeoutProblem:
      additionalProperties:
        $ref: '#/components/schemas/JsonValue'
      example:
        code: REQUEST_TIMEOUT
        status: 504
        title: Request Timeout
        type: https://photon.codes/docs/problems/request-timeout
      properties:
        code:
          const: REQUEST_TIMEOUT
          type: string
        detail:
          minLength: 1
          type: string
        instance:
          minLength: 1
          type: string
        remediation:
          not: {}
        requestId:
          minLength: 1
          type: string
        status:
          const: 504
          type: number
        title:
          const: Request Timeout
          type: string
        type:
          const: https://photon.codes/docs/problems/request-timeout
          type: string
      required:
        - code
        - status
        - title
        - type
      type: object
    ServiceTimeoutProblem:
      additionalProperties:
        $ref: '#/components/schemas/JsonValue'
      example:
        code: SERVICE_TIMEOUT
        status: 504
        title: Service Timeout
        type: https://photon.codes/docs/problems/service-timeout
      properties:
        code:
          const: SERVICE_TIMEOUT
          type: string
        detail:
          minLength: 1
          type: string
        instance:
          minLength: 1
          type: string
        remediation:
          not: {}
        requestId:
          minLength: 1
          type: string
        status:
          const: 504
          type: number
        title:
          const: Service Timeout
          type: string
        type:
          const: https://photon.codes/docs/problems/service-timeout
          type: string
      required:
        - code
        - status
        - title
        - type
      type: object
    ValidationIssue:
      additionalProperties: false
      properties:
        code:
          minLength: 1
          type: string
        location:
          $ref: '#/components/schemas/ValidationLocation'
        message:
          minLength: 1
          type: string
        path:
          type: string
      required:
        - code
        - location
        - message
        - path
      type: object
    ValidationLocation:
      enum:
        - body
        - cookie
        - form
        - header
        - json
        - param
        - query
      type: string
  headers:
    Deprecation:
      description: >-
        RFC 9745 structured-field Date at which the operation was or will be
        deprecated: `@` followed by Unix seconds, for example `@1767225599`.
      schema:
        pattern: ^@-?[0-9]+$
        type: string
    Idempotent-Replayed:
      description: True when this response was replayed from an earlier attempt.
      schema:
        type: boolean
    Link:
      description: Links related to lifecycle or remediation documentation.
      schema:
        type: string
    RateLimit:
      description: Current rate-limit state.
      schema:
        type: string
    RateLimit-Policy:
      description: Rate-limit policy applied by the gateway.
      schema:
        type: string
    Retry-After:
      description: Delay before retrying, in seconds or as an HTTP date.
      schema:
        type: string
    Sunset:
      description: >-
        RFC 8594 HTTP-date (IMF-fixdate) after which the operation may become
        unavailable, for example `Thu, 31 Dec 2026 23:59:59 GMT`.
      schema:
        pattern: >-
          ^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), [0-9]{2}
          (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4}
          [0-9]{2}:[0-9]{2}:[0-9]{2} GMT$
        type: string
    X-Request-ID:
      description: Identifier for this HTTP attempt.
      schema:
        type: string
    X-Trace-ID:
      description: >-
        Trace ID of this request. Sent alongside X-Request-ID when a middleware
        published a trace ID for the request.
      schema:
        pattern: ^(?!0{32}$)[0-9a-f]{32}$
        type: string
  securitySchemes:
    accountServiceKey:
      description: >-
        Account Service Key, prefixed with `pho_ask_`, sent as `Authorization:
        Bearer <key>`. Acts on behalf of its owning account, subject to the
        permissions and credential restrictions of each operation. Account
        access tokens and OAuth grants also use the Bearer header. In
        organizations that require SSO, Account Service Keys are not accepted
        for managing the organization's SSO settings, deleting the organization,
        or checking whether it can be deleted.
      scheme: bearer
      type: http
    serviceIdentityBearer:
      description: >-
        Organization Service Identity API key or M2M access token, sent as
        `Authorization: Bearer <credential>`. Restricted to its organization and
        explicitly granted business permissions. It does not authorize human
        organization governance or Photon credential management. Never send an
        M2M client secret to a business endpoint.
      scheme: bearer
      type: http
    oauth2:
      description: >-
        OAuth grant issued by the Photon authorization server. The token is a
        bearer JWT whose consented scope is intersected with the permissions the
        route grants; an empty intersection is `403 insufficient_scope`.
      flows:
        authorizationCode:
          authorizationUrl: https://auth.photon.codes/oauth2/authorize
          scopes:
            account:create_project: Create a project owned by the account.
            account:read: View account profile.
            account:read_projects: >-
              List projects associated with the account; does not grant access
              to project contents.
            account:write: Update account name and profile.
            billing:read: View invoices, usage, payment status.
            calls:read: >-
              Read project call data and lifecycle events via supported APIs or
              approved subscriptions; excludes stored Events queries.
            events:read: >-
              Query stored Events and discover their SQL schema within a
              project.
            messages:read: >-
              Read project messages, delivery status, participant changes and
              typing activity via supported APIs or approved subscriptions.
            organization:create_project: Create a project in the organization.
            organization:read: View organization name and avatar.
            organization:read_projects: List projects in the organization.
            platforms:read: View project platform configuration.
            platforms:write: Change project platform configuration.
            project:delete: Permanently delete the project.
            project:read: View non-sensitive project settings.
            project:read_usage: View project usage and costs.
            project:write: >-
              Change agent profiles, webhook settings, and other project
              configuration.
            ten_dlc:read: View organization 10DLC Brand and Campaign registration records.
            ten_dlc:write: >-
              Register and update organization 10DLC Brands and Campaigns,
              including OTP operations.
          tokenUrl: https://auth.photon.codes/oauth2/token
      type: oauth2

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.