WebhookSubscriptionInput schema has no callbackUrl in 2025-07

When I run the following introspection query to grab the schema from .../admin/api/2025-07.graphql.json

query IntrospectionQuery {
  __schema {
    queryType {
      name
    }
    mutationType {
      name
    }
    subscriptionType {
      name
    }
    types {
      ...FullType
    }
    directives {
      name
      description
      locations
      args {
        ...InputValue
      }
    }
  }
}

fragment FullType on __Type {
  kind
  name
  description
  fields(includeDeprecated: true) {
    name
    description
    args {
      ...InputValue
    }
    type {
      ...TypeRef
    }
    isDeprecated
    deprecationReason
  }
  inputFields {
    ...InputValue
  }
  interfaces {
    ...TypeRef
  }
  enumValues(includeDeprecated: true) {
    name
    description
    isDeprecated
    deprecationReason
  }
  possibleTypes {
    ...TypeRef
  }
}

fragment InputValue on __InputValue {
  name
  description
  type {
    ...TypeRef
  }
  defaultValue
}

fragment TypeRef on __Type {
  kind
  name
  ofType {
    kind
    name
    ofType {
      kind
      name
      ofType {
        kind
        name
        ofType {
          kind
          name
          ofType {
            kind
            name
            ofType {
              kind
              name
              ofType {
                kind
                name
              }
            }
          }
        }
      }
    }
  }
}

The resulting WebhookSubscriptionInput part of the schema doesn’t have the callbackUrl parameter. I see in unstable there’s a uri parameter but that one’s not present in 2025-07 either.

Here’s what I’m getting:

                {
                    "kind": "INPUT_OBJECT",
                    "name": "WebhookSubscriptionInput",
                    "description": "The input fields for a webhook subscription.",
                    "fields": null,
                    "inputFields": [
                        {
                            "name": "format",
                            "description": "The format in which the webhook subscription should send the data.",
                            "type": {
                                "kind": "ENUM",
                                "name": "WebhookSubscriptionFormat",
                                "ofType": null
                            },
                            "defaultValue": null
                        },
                        {
                            "name": "includeFields",
                            "description": "The list of fields to be included in the webhook subscription. Only the fields specified will be included in the webhook payload. If null, then all fields will be included. Learn more about [modifying webhook payloads](https://shopify.dev/docs/apps/build/webhooks/customize/modify_payloads).",
                            "type": {
                                "kind": "LIST",
                                "name": null,
                                "ofType": {
                                    "kind": "NON_NULL",
                                    "name": null,
                                    "ofType": {
                                        "kind": "SCALAR",
                                        "name": "String",
                                        "ofType": null
                                    }
                                }
                            },
                            "defaultValue": null
                        },
                        {
                            "name": "filter",
                            "description": "A constraint specified using search syntax that ensures only webhooks that match the specified filter are emitted. See our [guide on filters](https://shopify.dev/docs/apps/build/webhooks/customize/filters) for more details.",
                            "type": {
                                "kind": "SCALAR",
                                "name": "String",
                                "ofType": null
                            },
                            "defaultValue": null
                        },
                        {
                            "name": "metafieldNamespaces",
                            "description": "The list of namespaces for any metafields that should be included in the webhook subscription.",
                            "type": {
                                "kind": "LIST",
                                "name": null,
                                "ofType": {
                                    "kind": "NON_NULL",
                                    "name": null,
                                    "ofType": {
                                        "kind": "SCALAR",
                                        "name": "String",
                                        "ofType": null
                                    }
                                }
                            },
                            "defaultValue": null
                        },
                        {
                            "name": "metafields",
                            "description": "A list of identifiers specifying metafields to include in the webhook payload.",
                            "type": {
                                "kind": "LIST",
                                "name": null,
                                "ofType": {
                                    "kind": "NON_NULL",
                                    "name": null,
                                    "ofType": {
                                        "kind": "INPUT_OBJECT",
                                        "name": "HasMetafieldsMetafieldIdentifierInput",
                                        "ofType": null
                                    }
                                }
                            },
                            "defaultValue": null
                        }
                    ],
                    "interfaces": null,
                    "enumValues": null,
                    "possibleTypes": null
                },
1 Like

Hey @josephtaylor,

This would be expected. A little more context is available here:

so if i’m using 2025-07 i should manually update the schema and add the uri field and use that to specify the callbackUrl ? I’m not trying to do google pub/sub, I’m just trying to create webhooks with an http endpoint.

the schema should have either uri or callbackUrl, not having either of them is a bug

Could you retry running this now please :folded_hands:

I’ve just tried it and can see the callbackUrl, which I believe will be replaced by uri in the next API version

 {
          "kind": "INPUT_OBJECT",
          "name": "WebhookSubscriptionInput",
          "description": "The input fields for a webhook subscription.",
          "fields": null,
          "inputFields": [
            {
              "name": "format",
              "description": "The format in which the webhook subscription should send the data.",
              "type": {
                "kind": "ENUM",
                "name": "WebhookSubscriptionFormat",
                "ofType": null
              },
              "defaultValue": null,
              "isDeprecated": false,
              "deprecationReason": null
            },
            {
              "name": "includeFields",
              "description": "The list of fields to be included in the webhook subscription. Only the fields specified will be included in the webhook payload. If null, then all fields will be included. Learn more about [modifying webhook payloads](https://shopify.dev/docs/apps/build/webhooks/customize/modify_payloads).",
              "type": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "String",
                    "ofType": null
                  }
                }
              },
              "defaultValue": null,
              "isDeprecated": false,
              "deprecationReason": null
            },
            {
              "name": "filter",
              "description": "A constraint specified using search syntax that ensures only webhooks that match the specified filter are emitted. See our [guide on filters](https://shopify.dev/docs/apps/build/webhooks/customize/filters) for more details.",
              "type": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              },
              "defaultValue": null,
              "isDeprecated": false,
              "deprecationReason": null
            },
            {
              "name": "metafieldNamespaces",
              "description": "The list of namespaces for any metafields that should be included in the webhook subscription.",
              "type": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "String",
                    "ofType": null
                  }
                }
              },
              "defaultValue": null,
              "isDeprecated": false,
              "deprecationReason": null
            },
            {
              "name": "metafields",
              "description": "A list of identifiers specifying metafields to include in the webhook payload.",
              "type": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "INPUT_OBJECT",
                    "name": "HasMetafieldsMetafieldIdentifierInput",
                    "ofType": null
                  }
                }
              },
              "defaultValue": null,
              "isDeprecated": false,
              "deprecationReason": null
            },
            {
              "name": "callbackUrl",
              "description": "URL where the webhook subscription should send the POST request when the event occurs.",
              "type": {
                "kind": "SCALAR",
                "name": "URL",
                "ofType": null
              },
              "defaultValue": null,
              "isDeprecated": true,
              "deprecationReason": "Use `uri` instead."
            }
          ],
          "interfaces": null,
          "enumValues": null,
          "possibleTypes": null
        }
1 Like

I’m still not seeing it. What version of the API are you hitting? I’m hitting 2025-07.

Yeah that exact version. Just tried your query and can see it.

Perhaps theres something cache or if you are using a tool is it removing a field marked as deprecated?

I have the same problem, seems to be something related to when I transform json to graphql.

I’ve just updated to 2025-10 to not have to deal with this

1 Like