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

# Update organization API keys and details

> Updates org-level details (name/phoneNumber/address/logoUrl) and replaces the OrganizationCredentials document. Validates the new credentials are not already in use by another org, uploads logo to R2 if provided as data URL, and backfills missing DynamicProperties section.properties fields.



## OpenAPI

````yaml /api-reference/openapi.yaml put /api/organizations/api-keys
openapi: 3.0.3
info:
  title: Tether Relay and Tether API
  version: 1.0.0
  description: >-
    Route-derived OpenAPI contract generated from tether-relay backend sources.
    Regenerate with scripts/sync-openapi-from-backend.mjs.
servers:
  - url: https://your-instance.example.com
    description: Production
  - url: http://localhost:2212
    description: Local API service
security: []
tags:
  - name: AI
  - name: Applications
  - name: Approval
  - name: Auth
  - name: Automations
  - name: Calls
  - name: Campaigns
  - name: Contact Analytics
  - name: Contact Metrics
  - name: Contact Notes
  - name: Contacts
  - name: Conversation Monitor
  - name: Conversations
  - name: Departments
  - name: Email
  - name: Escalation Dashboard
  - name: Event Logs
  - name: Google Sheets
  - name: Marketplace
  - name: Messages
  - name: Notification Sounds
  - name: Notifications
  - name: Org Snapshots
  - name: Organizations
  - name: Outreach
  - name: Outreach Metrics
  - name: Outreach Sources
  - name: Pipelines
  - name: Processes
  - name: Prompts
  - name: Reminders
  - name: Sms
  - name: Templates
  - name: Traces
  - name: Training
  - name: Upload
  - name: User Snapshots
  - name: Users
  - name: Vertical
  - name: Webchats
  - name: Webhook
paths:
  /api/organizations/api-keys:
    put:
      tags:
        - Organizations
      summary: Update organization API keys and details
      description: >-
        Updates org-level details (name/phoneNumber/address/logoUrl) and
        replaces the OrganizationCredentials document. Validates the new
        credentials are not already in use by another org, uploads logo to R2 if
        provided as data URL, and backfills missing DynamicProperties
        section.properties fields.
      operationId: put_organizations_api_keys
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateApiKeysRequest'
      responses:
        '200':
          description: API keys updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrganizationMessageResponse'
        '400':
          description: Missing organization ID
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrganizationErrorResponse'
        '404':
          description: Organization not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrganizationErrorResponse'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrganizationErrorResponse'
      security:
        - bearerAuth: []
components:
  schemas:
    UpdateApiKeysRequest:
      type: object
      properties:
        id:
          type: string
          description: Organization ID whose details and credentials should be updated.
        name:
          type: string
          description: Updated organization display name.
        phoneNumber:
          type: string
          description: Updated primary organization phone number in E.164 format.
        address:
          type: string
          description: Updated mailing/business address.
        logoUrl:
          type: string
          description: >-
            Optional logo image; accepts a data URI which the server uploads and
            stores.
        creds:
          $ref: '#/components/schemas/CredsInput'
          description: >-
            Replacement third-party API credentials (Anthropic, Sinch SMS/MMS)
            attached to the organization.
      required:
        - id
        - creds
      additionalProperties: true
      example:
        id: 5f7b1c2e8a1d4e0012c3b400
        name: Acme Corp
        phoneNumber: '+14165550100'
        address: 123 Yonge St, Toronto, ON
        creds:
          anthropicApiKey: sk-ant-api03-EXAMPLE-key-redacted
          sinchServicePlanId: srv-plan-example-123
    OrganizationMessageResponse:
      type: object
      properties:
        message:
          type: string
      additionalProperties: true
      example:
        message: Organization details updated successfully
    OrganizationErrorResponse:
      type: object
      properties:
        error:
          type: string
        details:
          type: string
      additionalProperties: true
      example:
        error: Organization not found
        details: No organization exists with the provided id
    CredsInput:
      type: object
      properties:
        anthropicApiKey:
          type: string
        sinchServicePlanId:
          type: string
        sinchApiToken:
          type: string
        sinchMmsApiKey:
          type: string
        sinchMmsServiceId:
          type: string
      additionalProperties: true
      example:
        anthropicApiKey: sk-ant-api03-EXAMPLE-key-redacted
        sinchServicePlanId: srv-plan-example-123
        sinchApiToken: sinch-token-example-redacted
        sinchMmsApiKey: sinch-mms-key-example
        sinchMmsServiceId: sinch-mms-service-example
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````