La búsqueda solo se carga cuando la usas. Explora todas las categorías a continuación.

Proyectos y contenido

Actualizar perfil del proyecto

Modifica los campos del perfil de marca de un proyecto. Los campos omitidos no cambian. Requiere expected_profile_version de la lectura más reciente y un idempotency_key (rol editor).

POST /studio-api/projects/profile/update

Contrato revisado: · sha256:563d2d581da0ad29

Descripción general

Modifica los campos del perfil de marca de un proyecto. Los campos omitidos no cambian. Requiere expected_profile_version de la lectura más reciente y un idempotency_key (rol editor).

Una respuesta HTTP exitosa puede indicar aceptación, no finalización. Para trabajo en segundo plano, guarda el ID devuelto y consulta la misma operación hasta que termine. Una publicación programada o aceptada solo está publicada cuando la plataforma lo confirma; un tiempo de espera agotado en el cliente no determina el resultado.

Autenticación y permisos

Clases de credenciales aceptadas
user_session, delegated_oauth, personal_access_token
Capacidad delegada
agent:operate
Rol mínimo del espacio de trabajo
editor
Alcance del acceso
Recursos a los que este usuario está autorizado a acceder
Se requiere consentimiento para todos los espacios de trabajo
No
Cambia el estado
Sí
Cuando la operación se completa
synchronous_http_response

Un token solo puede usar los derechos de su propietario. Cada solicitud comprueba pertenencia al espacio, propiedad del recurso, espacios elegidos y capacidades concedidas. Los perfiles core y full cambian qué herramientas se muestran; no conceden acceso.

Campos de solicitud

Obligatorio significa obligatorio dentro del objeto principal y la rama elegida. Un campo secundario obligatorio no convierte en obligatorio un objeto principal opcional. Las reglas y nombres de campos siguientes se copian del contrato.

Campos de solicitud
Campo / ramaTipo / obligatorioRestricciones
$objectObligatorio en el objeto principal
  • additionalProperties: false
project_idstringObligatorio en el objeto principal
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
expected_profile_versionintegerObligatorio en el objeto principal
  • maximum: 9007199254740991
  • exclusiveMinimum: 0
idempotency_keystringObligatorio en el objeto principal
  • minLength: 8
  • maxLength: 160
patchobjectObligatorio en el objeto principal
  • additionalProperties: false
patch.taglinestring | nullOpcional / elemento—
patch.taglineanyOf 1stringOpcional / elemento
  • maxLength: 300
patch.taglineanyOf 2nullOpcional / elemento—
patch.descriptionstring | nullOpcional / elemento—
patch.descriptionanyOf 1stringOpcional / elemento
  • maxLength: 4000
patch.descriptionanyOf 2nullOpcional / elemento—
patch.voicestring | nullOpcional / elemento—
patch.voiceanyOf 1stringOpcional / elemento
  • maxLength: 1000
patch.voiceanyOf 2nullOpcional / elemento—
patch.target_audiencestring | nullOpcional / elemento—
patch.target_audienceanyOf 1stringOpcional / elemento
  • maxLength: 1000
patch.target_audienceanyOf 2nullOpcional / elemento—
patch.color_palettearrayOpcional / elemento
  • maxItems: 20
patch.color_palette[]stringOpcional / elemento
  • maxLength: 64
patch.goalsarrayOpcional / elemento
  • maxItems: 50
patch.goals[]stringOpcional / elemento
  • maxLength: 160
patch.no_go_topicsarrayOpcional / elemento
  • maxItems: 100
patch.no_go_topics[]stringOpcional / elemento
  • maxLength: 160
patch.language_primarystringOpcional / elemento
  • minLength: 2
  • maxLength: 35
patch.positioningstring | nullOpcional / elemento—
patch.positioninganyOf 1stringOpcional / elemento
  • maxLength: 2000
patch.positioninganyOf 2nullOpcional / elemento—
patch.uspstring | nullOpcional / elemento—
patch.uspanyOf 1stringOpcional / elemento
  • maxLength: 1000
patch.uspanyOf 2nullOpcional / elemento—
patch.visual_identityobject | nullOpcional / elemento—
patch.visual_identityanyOf 1objectOpcional / elemento
  • additionalProperties: {}
patch.visual_identity.*anyOf 1any JSON valueOpcional / elemento—
patch.visual_identityanyOf 2nullOpcional / elemento—
patch.forbidden_claimsarrayOpcional / elemento
  • maxItems: 100
patch.forbidden_claims[]stringOpcional / elemento
  • maxLength: 240
patch.north_star_metricstring | nullOpcional / elemento—
patch.north_star_metricanyOf 1stringOpcional / elemento
  • maxLength: 300
patch.north_star_metricanyOf 2nullOpcional / elemento—
patch.posting_cadenceobject | nullOpcional / elemento—
patch.posting_cadenceanyOf 1objectOpcional / elemento
  • additionalProperties: {}
patch.posting_cadence.*anyOf 1any JSON valueOpcional / elemento—
patch.posting_cadenceanyOf 2nullOpcional / elemento—
patch.app_store_url_iosstring | nullOpcional / elemento—
patch.app_store_url_iosanyOf 1stringOpcional / elemento
  • format: "uri"
patch.app_store_url_iosanyOf 2nullOpcional / elemento—
patch.app_store_url_androidstring | nullOpcional / elemento—
patch.app_store_url_androidanyOf 1stringOpcional / elemento
  • format: "uri"
patch.app_store_url_androidanyOf 2nullOpcional / elemento—
patch.app_metadataobjectOpcional / elemento
  • additionalProperties: {}
patch.app_metadata.*any JSON valueOpcional / elemento—
JSON Schema completo
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "project_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "expected_profile_version": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "idempotency_key": {
      "type": "string",
      "minLength": 8,
      "maxLength": 160
    },
    "patch": {
      "type": "object",
      "properties": {
        "tagline": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 300
            },
            {
              "type": "null"
            }
          ]
        },
        "description": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 4000
            },
            {
              "type": "null"
            }
          ]
        },
        "voice": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 1000
            },
            {
              "type": "null"
            }
          ]
        },
        "target_audience": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 1000
            },
            {
              "type": "null"
            }
          ]
        },
        "color_palette": {
          "maxItems": 20,
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 64
          }
        },
        "goals": {
          "maxItems": 50,
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 160
          }
        },
        "no_go_topics": {
          "maxItems": 100,
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 160
          }
        },
        "language_primary": {
          "type": "string",
          "minLength": 2,
          "maxLength": 35
        },
        "positioning": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 2000
            },
            {
              "type": "null"
            }
          ]
        },
        "usp": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 1000
            },
            {
              "type": "null"
            }
          ]
        },
        "visual_identity": {
          "anyOf": [
            {
              "type": "object",
              "propertyNames": {
                "type": "string"
              },
              "additionalProperties": {}
            },
            {
              "type": "null"
            }
          ]
        },
        "forbidden_claims": {
          "maxItems": 100,
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 240
          }
        },
        "north_star_metric": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 300
            },
            {
              "type": "null"
            }
          ]
        },
        "posting_cadence": {
          "anyOf": [
            {
              "type": "object",
              "propertyNames": {
                "type": "string"
              },
              "additionalProperties": {}
            },
            {
              "type": "null"
            }
          ]
        },
        "app_store_url_ios": {
          "anyOf": [
            {
              "type": "string",
              "format": "uri"
            },
            {
              "type": "null"
            }
          ]
        },
        "app_store_url_android": {
          "anyOf": [
            {
              "type": "string",
              "format": "uri"
            },
            {
              "type": "null"
            }
          ]
        },
        "app_metadata": {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {}
        }
      },
      "additionalProperties": false
    }
  },
  "required": [
    "project_id",
    "expected_profile_version",
    "idempotency_key",
    "patch"
  ],
  "additionalProperties": false
}

Respuesta y finalización

Estados HTTP de éxito: 200. Cuando la operación se completa: synchronous_http_response.

Una respuesta HTTP exitosa puede indicar aceptación, no finalización. Para trabajo en segundo plano, guarda el ID devuelto y consulta la misma operación hasta que termine. Una publicación programada o aceptada solo está publicada cuando la plataforma lo confirma; un tiempo de espera agotado en el cliente no determina el resultado.

Obligatorio significa obligatorio dentro del objeto principal y la rama elegida. Un campo secundario obligatorio no convierte en obligatorio un objeto principal opcional. Las reglas y nombres de campos siguientes se copian del contrato.

Respuesta y finalización
Campo / ramaTipo / obligatorioRestricciones
$objectObligatorio en el objeto principal—
contract_versionstringObligatorio en el objeto principal
  • const: "project/v1"
profileobjectObligatorio en el objeto principal—
profile.project_idstringObligatorio en el objeto principal
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
profile.workspace_idstringObligatorio en el objeto principal
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
profile.taglinestring | nullObligatorio en el objeto principal—
profile.taglineanyOf 1stringObligatorio en el objeto principal—
profile.taglineanyOf 2nullObligatorio en el objeto principal—
profile.descriptionstring | nullObligatorio en el objeto principal—
profile.descriptionanyOf 1stringObligatorio en el objeto principal—
profile.descriptionanyOf 2nullObligatorio en el objeto principal—
profile.voicestring | nullObligatorio en el objeto principal—
profile.voiceanyOf 1stringObligatorio en el objeto principal—
profile.voiceanyOf 2nullObligatorio en el objeto principal—
profile.target_audiencestring | nullObligatorio en el objeto principal—
profile.target_audienceanyOf 1stringObligatorio en el objeto principal—
profile.target_audienceanyOf 2nullObligatorio en el objeto principal—
profile.color_palettearrayObligatorio en el objeto principal—
profile.color_palette[]stringOpcional / elemento—
profile.goalsarrayObligatorio en el objeto principal—
profile.goals[]stringOpcional / elemento—
profile.no_go_topicsarrayObligatorio en el objeto principal—
profile.no_go_topics[]stringOpcional / elemento—
profile.language_primarystringObligatorio en el objeto principal—
profile.positioningstring | nullObligatorio en el objeto principal—
profile.positioninganyOf 1stringObligatorio en el objeto principal—
profile.positioninganyOf 2nullObligatorio en el objeto principal—
profile.uspstring | nullObligatorio en el objeto principal—
profile.uspanyOf 1stringObligatorio en el objeto principal—
profile.uspanyOf 2nullObligatorio en el objeto principal—
profile.visual_identityobject | nullObligatorio en el objeto principal—
profile.visual_identityanyOf 1objectObligatorio en el objeto principal
  • additionalProperties: {}
profile.visual_identity.*anyOf 1any JSON valueOpcional / elemento—
profile.visual_identityanyOf 2nullObligatorio en el objeto principal—
profile.forbidden_claimsarrayObligatorio en el objeto principal—
profile.forbidden_claims[]stringOpcional / elemento—
profile.north_star_metricstring | nullObligatorio en el objeto principal—
profile.north_star_metricanyOf 1stringObligatorio en el objeto principal—
profile.north_star_metricanyOf 2nullObligatorio en el objeto principal—
profile.posting_cadenceobject | nullObligatorio en el objeto principal—
profile.posting_cadenceanyOf 1objectObligatorio en el objeto principal
  • additionalProperties: {}
profile.posting_cadence.*anyOf 1any JSON valueOpcional / elemento—
profile.posting_cadenceanyOf 2nullObligatorio en el objeto principal—
profile.app_store_url_iosstring | nullObligatorio en el objeto principal—
profile.app_store_url_iosanyOf 1stringObligatorio en el objeto principal—
profile.app_store_url_iosanyOf 2nullObligatorio en el objeto principal—
profile.app_store_url_androidstring | nullObligatorio en el objeto principal—
profile.app_store_url_androidanyOf 1stringObligatorio en el objeto principal—
profile.app_store_url_androidanyOf 2nullObligatorio en el objeto principal—
profile.app_metadataobjectObligatorio en el objeto principal
  • additionalProperties: {}
profile.app_metadata.*any JSON valueOpcional / elemento—
profile.profile_versionintegerObligatorio en el objeto principal
  • maximum: 9007199254740991
  • exclusiveMinimum: 0
profile.updated_bystring | nullObligatorio en el objeto principal—
profile.updated_byanyOf 1stringObligatorio en el objeto principal
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
profile.updated_byanyOf 2nullObligatorio en el objeto principal—
profile.updated_by_kindstringObligatorio en el objeto principal
  • enum: ["jwt","api_key","delegated_ai","migration"]
profile.updated_by_api_key_idstring | nullObligatorio en el objeto principal—
profile.updated_by_api_key_idanyOf 1stringObligatorio en el objeto principal
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
profile.updated_by_api_key_idanyOf 2nullObligatorio en el objeto principal—
profile.updated_by_delegated_grant_idstring | nullObligatorio en el objeto principal—
profile.updated_by_delegated_grant_idanyOf 1stringObligatorio en el objeto principal
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
profile.updated_by_delegated_grant_idanyOf 2nullObligatorio en el objeto principal—
profile.created_atstringObligatorio en el objeto principal
  • format: "date-time"
  • pattern: "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
profile.updated_atstringObligatorio en el objeto principal
  • format: "date-time"
  • pattern: "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
receipt_idstringObligatorio en el objeto principal
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
appliedbooleanObligatorio en el objeto principal—
dedupedbooleanObligatorio en el objeto principal—
JSON Schema completo
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "contract_version": {
      "type": "string",
      "const": "project/v1"
    },
    "profile": {
      "type": "object",
      "properties": {
        "project_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        "workspace_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        "tagline": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "description": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "voice": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "target_audience": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "color_palette": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "goals": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "no_go_topics": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "language_primary": {
          "type": "string"
        },
        "positioning": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "usp": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "visual_identity": {
          "anyOf": [
            {
              "type": "object",
              "propertyNames": {
                "type": "string"
              },
              "additionalProperties": {}
            },
            {
              "type": "null"
            }
          ]
        },
        "forbidden_claims": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "north_star_metric": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "posting_cadence": {
          "anyOf": [
            {
              "type": "object",
              "propertyNames": {
                "type": "string"
              },
              "additionalProperties": {}
            },
            {
              "type": "null"
            }
          ]
        },
        "app_store_url_ios": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "app_store_url_android": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "app_metadata": {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {}
        },
        "profile_version": {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        "updated_by": {
          "anyOf": [
            {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            },
            {
              "type": "null"
            }
          ]
        },
        "updated_by_kind": {
          "type": "string",
          "enum": [
            "jwt",
            "api_key",
            "delegated_ai",
            "migration"
          ]
        },
        "updated_by_api_key_id": {
          "anyOf": [
            {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            },
            {
              "type": "null"
            }
          ]
        },
        "updated_by_delegated_grant_id": {
          "anyOf": [
            {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            },
            {
              "type": "null"
            }
          ]
        },
        "created_at": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
        },
        "updated_at": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
        }
      },
      "required": [
        "project_id",
        "workspace_id",
        "tagline",
        "description",
        "voice",
        "target_audience",
        "color_palette",
        "goals",
        "no_go_topics",
        "language_primary",
        "positioning",
        "usp",
        "visual_identity",
        "forbidden_claims",
        "north_star_metric",
        "posting_cadence",
        "app_store_url_ios",
        "app_store_url_android",
        "app_metadata",
        "profile_version",
        "updated_by",
        "updated_by_kind",
        "updated_by_api_key_id",
        "updated_by_delegated_grant_id",
        "created_at",
        "updated_at"
      ]
    },
    "receipt_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "applied": {
      "type": "boolean"
    },
    "deduped": {
      "type": "boolean"
    }
  },
  "required": [
    "contract_version",
    "profile",
    "receipt_id",
    "applied",
    "deduped"
  ]
}

Errores y reintentos seguros

Comprueba el estado HTTP y el cuerpo de respuesta. Un error de validación 400 puede contener un ZodError; los errores del controlador usan los campos error, message y code. Conserva request_id o x-request-id para el diagnóstico, sin credenciales. Corrige los errores de acceso 401/403 antes de reintentar y respeta Retry-After para 429. Si una escritura es incierta o devuelve 5xx, consulta primero el resultado existente. Reutiliza una clave de idempotencia solo donde se admita; el comportamiento de reintento varía por operación y no garantiza una entrega exactamente una vez.

Guía de solución de problemas

Ejemplos

Estos ejemplos usan valores ficticios comprobados con los esquemas. Sustituye los IDs por otros autorizados, los archivos multimedia por recursos listos y las fechas por tu hora de publicación confirmada. Comprueba la elegibilidad de la cuenta antes de enviar una escritura. Esta página no envía solicitudes API.

Establece SOSOAPI_ACCESS_TOKEN en tu servidor con una credencial aceptada por esta operación y mantenla fuera del código del navegador. Para un agente, usa sosoapi auth login para iniciar sesión en el navegador y deja a la CLI renovar sus credenciales.

request.json

{
  "project_id": "11111111-1111-4111-8111-111111111111",
  "expected_profile_version": 1,
  "idempotency_key": "example-intent-0001",
  "patch": {
    "tagline": "A fictional project for the documentation example."
  }
}

cURL

curl --request POST \
  "https://gqeshlawtcexsapabaui.supabase.co/functions/v1/studio-api/projects/profile/update" \
  -H "Authorization: Bearer $SOSOAPI_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  --data-binary @request.json

JavaScript

// Server-side JavaScript. Do not print tokens or credential-bearing responses.
const token = process.env.SOSOAPI_ACCESS_TOKEN;
if (!token) throw new Error("Set an accepted credential for this operation");
const response = await fetch("https://gqeshlawtcexsapabaui.supabase.co/functions/v1/studio-api/projects/profile/update", {
  method: "POST",
  headers: { "Content-Type": "application/json", Authorization: "Bearer " + token },
  body: JSON.stringify({
  "project_id": "11111111-1111-4111-8111-111111111111",
  "expected_profile_version": 1,
  "idempotency_key": "example-intent-0001",
  "patch": {
    "tagline": "A fictional project for the documentation example."
  }
})
});
const result = await response.json();
// Check response.ok, the operation-specific body and completion state before continuing.

CLI

npx sosoapi api post /studio-api/projects/profile/update < request.json

Ejemplo de respuesta sintética

{
  "contract_version": "project/v1",
  "profile": {
    "project_id": "11111111-1111-4111-8111-111111111111",
    "workspace_id": "11111111-1111-4111-8111-111111111111",
    "tagline": null,
    "description": null,
    "voice": null,
    "target_audience": null,
    "color_palette": [],
    "goals": [],
    "no_go_topics": [],
    "language_primary": "example",
    "positioning": null,
    "usp": null,
    "visual_identity": null,
    "forbidden_claims": [],
    "north_star_metric": null,
    "posting_cadence": null,
    "app_store_url_ios": null,
    "app_store_url_android": null,
    "app_metadata": {},
    "profile_version": 1,
    "updated_by": null,
    "updated_by_kind": "jwt",
    "updated_by_api_key_id": null,
    "updated_by_delegated_grant_id": null,
    "created_at": "2099-01-15T09:00:00Z",
    "updated_at": "2099-01-15T09:00:00Z"
  },
  "receipt_id": "11111111-1111-4111-8111-111111111111",
  "applied": false,
  "deduped": false
}

MCP: sosoapi_update_project_profile