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

# Update BIMI

> Updates the BIMI configuration for the domain, including the SVG logo URL and optional Verified Mark Certificate (VMC) URL. Changes take effect immediately but DNS propagation may take up to 48 hours.

### Requirements

- **Permission:** `domains:write`.
- **Project access:** the path project must match the API key's project.
- **HTTP rate limit:** 30 requests per 300 seconds per API key.



## OpenAPI

````yaml /signal/api-reference/openapi.json patch /v1/projects/{projectId}/domains/{domainId}/bimi
openapi: 3.1.0
info:
  title: Apollo Signal API
  version: 1.0.0
  description: >-
    Public REST API for transactional email, contacts, audiences, webhooks,
    metrics, projects, and sending domains.
servers:
  - url: https://api.signal.apollodeploy.com
    description: Production
security: []
tags:
  - name: Emails
    description: Send, inspect, cancel, validate, and stream transactional email activity.
  - name: Metrics
    description: Read project, topic, message, and deliverability analytics.
  - name: Suppressions
    description: Manage addresses that Apollo Signal must not send to.
  - name: Segments
    description: Create dynamic contact groups and inspect their membership.
  - name: Topics
    description: Manage subscription topics and topic membership.
  - name: Contact properties
    description: Define the custom fields available on project contacts.
  - name: Contacts
    description: >-
      Manage contacts, audience membership, images, activity, and engagement
      data.
  - name: Webhooks
    description: Manage webhook endpoints, deliveries, tests, and replays.
  - name: API key usage
    description: Inspect API key metadata and request usage without exposing raw keys.
  - name: Projects
    description: Inspect projects and project-scoped email logs.
  - name: Sending domains
    description: >-
      Register, verify, inspect, and remove sending domains and BIMI
      configuration.
paths:
  /v1/projects/{projectId}/domains/{domainId}/bimi:
    patch:
      tags:
        - Sending domains
      summary: Update BIMI
      description: >-
        Updates the BIMI configuration for the domain, including the SVG logo
        URL and optional Verified Mark Certificate (VMC) URL. Changes take
        effect immediately but DNS propagation may take up to 48 hours.


        ### Requirements


        - **Permission:** `domains:write`.

        - **Project access:** the path project must match the API key's project.

        - **HTTP rate limit:** 30 requests per 300 seconds per API key.
      operationId: updateBimi
      parameters:
        - name: projectId
          in: path
          description: The project the domain belongs to.
          required: true
          deprecated: false
          explode: false
          schema:
            type: string
            title: String
        - name: domainId
          in: path
          description: The unique identifier of the domain to update.
          required: true
          deprecated: false
          explode: false
          schema:
            type: string
            title: String
      requestBody:
        description: BIMI logo URL and optional VMC URL.
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/com.apollodeploy.signal.feature.domains.api.model.UpdateBimiRequest
        required: true
      responses:
        '200':
          description: BIMI configuration updated.
          headers: {}
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/com.apollodeploy.signal.feature.domains.api.model.DomainResponse
        '400':
          description: Invalid URL format or missing required fields.
          headers: {}
          content:
            application/problem+json:
              schema:
                $ref: >-
                  #/components/schemas/com.apollodeploy.commons.core.error.ApiProblem
        '401':
          description: Missing or invalid credentials.
          headers: {}
          content:
            application/problem+json:
              schema:
                $ref: >-
                  #/components/schemas/com.apollodeploy.commons.core.error.ApiProblem
        '403':
          description: >-
            The credential lacks the required permission or cannot access this
            project.
          headers: {}
          content:
            application/problem+json:
              schema:
                $ref: >-
                  #/components/schemas/com.apollodeploy.commons.core.error.ApiProblem
        '404':
          description: Domain or project not found.
          headers: {}
          content:
            application/problem+json:
              schema:
                $ref: >-
                  #/components/schemas/com.apollodeploy.commons.core.error.ApiProblem
        '429':
          description: >-
            The endpoint rate limit was exceeded. Wait for the `Retry-After`
            interval before retrying.
          headers:
            Retry-After:
              description: Whole seconds to wait before retrying.
              schema:
                type: integer
                minimum: 1
          content:
            application/problem+json:
              schema:
                $ref: >-
                  #/components/schemas/com.apollodeploy.commons.core.error.ApiProblem
      deprecated: false
      security:
        - bearerAuth: []
      x-codeSamples:
        - lang: TypeScript
          label: TypeScript
          source: >-
            import { createApolloSignalApiClient } from
            "@apollo-deploy/signal-sdk";


            const signal = createApolloSignalApiClient({ apiKey: "ap_signal_..."
            });


            const result = await signal.domains.updateBIMI(/* params */);


            console.log(result);
        - lang: Python
          label: Python
          source: |-
            from apollo_signal import SignalClient

            signal = SignalClient(api_key="ap_signal_...")

            result = signal.domains.updateBIMI(# params)

            print(result)
        - lang: Go
          label: Go
          source: >-
            import signal "github.com/apollo-deploy/signal-sdk-go"


            client := signal.NewClient("ap_signal_...")


            result, err := client.Domains.UpdateBIMI(context.Background() /*
            params */)

            if err != nil {
                log.Fatal(err)
            }

            fmt.Println(result)
        - lang: Java
          label: Java
          source: |-
            import com.apollodeploy.signal.SignalClient;

            SignalClient signal = new SignalClient("ap_signal_...");

            var result = signal.domains().updateBIMI(/* params */);
            System.out.println(result);
        - lang: Kotlin
          label: Kotlin
          source: |-
            import com.apollodeploy.signal.SignalClient

            val signal = SignalClient("ap_signal_...")

            val result = signal.domains.updateBIMI(/* params */)
            println(result)
        - lang: Ruby
          label: Ruby
          source: |-
            require "apollo_signal"

            signal = ApolloSignal::Client.new(api_key: "ap_signal_...")

            result = signal.domains.updateBIMI(# params)
            puts result
        - lang: PHP
          label: PHP
          source: |-
            use ApolloSignal\SignalClient;

            $signal = new SignalClient("ap_signal_...");

            $result = $signal->domains->updateBIMI(/* params */);
            var_dump($result);
        - lang: Rust
          label: Rust
          source: |-
            use apollo_signal::SignalClient;

            let signal = SignalClient::new("ap_signal_...");

            let result = signal.domains.updateBIMI(/* params */).await?;
            println!("{:?}", result);
        - lang: C#
          label: .NET
          source: |-
            using ApolloSignal;

            var signal = new SignalClient("ap_signal_...");

            var result = await signal.Domains.UpdateBIMIAsync(/* params */);
            Console.WriteLine(result);
components:
  schemas:
    com.apollodeploy.signal.feature.domains.api.model.UpdateBimiRequest:
      type: object
      properties:
        logoUrl:
          type: string
          title: String
          description: URL of the BIMI-compatible SVG logo to associate with the domain.
          format: uri
      title: UpdateBimiRequest
      description: >-
        BIMI logo configuration. Updating it returns the domain to `pending`
        verification.
    com.apollodeploy.signal.feature.domains.api.model.DomainResponse:
      type: object
      properties:
        bimiLogoUrl:
          type: string
          title: String
        bimiStatus:
          type: string
          title: String
        createdAt:
          type: string
          title: String
        dkimStatus:
          type: string
          title: String
        dmarcStatus:
          type: string
          title: String
        domain:
          type: string
          title: String
        id:
          type: string
          title: String
        mailFromDomain:
          type: string
          title: String
        mailFromStatus:
          type: string
          title: String
        projectId:
          type: string
          title: String
        region:
          type: string
          title: String
        spfStatus:
          type: string
          title: String
        status:
          type: string
          title: String
        updatedAt:
          type: string
          title: String
        verificationRecords:
          $ref: >-
            #/components/schemas/com.apollodeploy.signal.feature.domains.api.model.VerificationRecordsResponse
        verifiedAt:
          type: string
          title: String
      required:
        - bimiStatus
        - createdAt
        - dkimStatus
        - dmarcStatus
        - domain
        - id
        - mailFromDomain
        - mailFromStatus
        - projectId
        - region
        - spfStatus
        - status
        - updatedAt
        - verificationRecords
      title: DomainResponse
    com.apollodeploy.commons.core.error.ApiProblem:
      type: object
      properties:
        code:
          type: string
          title: ErrorCode
        detail:
          type: string
          title: String
        errors:
          type: array
          items:
            $ref: >-
              #/components/schemas/com.apollodeploy.commons.core.error.FieldProblem
          title: List<FieldProblem>
        instance:
          type: string
          title: ProblemInstance
        requestId:
          type: string
          title: String
        status:
          type: integer
          format: int32
          title: Int
        title:
          type: string
          title: String
        type:
          type: string
          title: ProblemType
      required:
        - code
        - status
        - title
        - type
      title: ApiProblem
    com.apollodeploy.signal.feature.domains.api.model.VerificationRecordsResponse:
      type: object
      properties:
        bimi:
          $ref: >-
            #/components/schemas/com.apollodeploy.signal.feature.domains.api.model.DnsRecordResponse
        dkim:
          type: array
          items:
            $ref: >-
              #/components/schemas/com.apollodeploy.signal.feature.domains.api.model.DkimRecordResponse
          title: List<DkimRecordResponse>
        dmarcRecommended:
          $ref: >-
            #/components/schemas/com.apollodeploy.signal.feature.domains.api.model.DnsRecordResponse
        mailFromMx:
          $ref: >-
            #/components/schemas/com.apollodeploy.signal.feature.domains.api.model.DnsRecordResponse
        mailFromSpf:
          $ref: >-
            #/components/schemas/com.apollodeploy.signal.feature.domains.api.model.DnsRecordResponse
        trackingCname:
          $ref: >-
            #/components/schemas/com.apollodeploy.signal.feature.domains.api.model.DnsRecordResponse
      required:
        - dkim
        - mailFromMx
        - mailFromSpf
      title: VerificationRecordsResponse
    com.apollodeploy.commons.core.error.FieldProblem:
      type: object
      properties:
        detail:
          type: string
          title: String
        pointer:
          type: string
          title: String
      required:
        - detail
        - pointer
      title: FieldProblem
    com.apollodeploy.signal.feature.domains.api.model.DnsRecordResponse:
      type: object
      properties:
        name:
          type: string
          title: String
        optional:
          type: boolean
          title: Boolean
        priority:
          type: integer
          format: int32
          title: Int
        status:
          type: string
          title: String
        type:
          type: string
          title: String
        value:
          type: string
          title: String
      required:
        - name
        - type
        - value
      title: DnsRecordResponse
    com.apollodeploy.signal.feature.domains.api.model.DkimRecordResponse:
      type: object
      properties:
        name:
          type: string
          title: String
        status:
          type: string
          title: String
        type:
          type: string
          title: String
        value:
          type: string
          title: String
      required:
        - name
        - type
        - value
      title: DkimRecordResponse
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Project-bound Apollo Signal API key. Keys begin with `ap_signal_` and
        must carry the permission shown on the operation.

````