https://pact.io logo
Join Slack
Powered by
# pactflow
  • o

    Otoniel Rodriguez Delgado

    04/04/2025, 7:20 PM
    Hi I would like to know if it is possible to configure Pactflow to automatically assign users to teams upon authentication via SSO, for example, using Azure Active Directory (Azure AD). The goal is for Pactflow to map the groups a user belongs to in the Active Directory (AD) during the login process, and based on that information, automatically assign them to one or more specific teams within the platform. This would allow the appropriate permissions and roles to be applied from the first login, without requiring manual assignments. Is it possible to enable this functionality to map SSO groups to Pactflow teams?
    m
    • 2
    • 2
  • s

    Simon Raess

    04/17/2025, 9:07 AM
    I am trying to understand https://docs.pactflow.io/docs/bi-directional-contract-testing/provider. Why would I want to publish a failed provider verification? If my provider verification test fails, my pipeline will be in a failed state. I will never move on and e.g. try to install this on an environment. I already know the version is broken.
    y
    • 2
    • 26
  • r

    Rui

    04/24/2025, 4:02 PM
    Hi, I hope this is the right channel to ask this question. I am getting this error (Http 503) when trying to run the contract tests against pactflow. I am validating the contract against deploy or released contracts (.deployedOrReleased()). if I remove this method call it works. Can anyone here help me with this or redirect me to the correct channel? I'm using java and here is the stacktrace:
    Copy code
    at au.com.dius.pact.core.pactbroker.HalClient.handleHalResponse(HalClient.kt:336)
    at au.com.dius.pact.core.pactbroker.HalClient.access$handleHalResponse(HalClient.kt:158)
    at au.com.dius.pact.core.pactbroker.HalClient$getJson$1.invoke$lambda$0(HalClient.kt:311)
    at org.apache.hc.client5.http.impl.classic.CloseableHttpClient.execute(CloseableHttpClient.java:247)
    at org.apache.hc.client5.http.impl.classic.CloseableHttpClient.execute(CloseableHttpClient.java:188)
    at au.com.dius.pact.core.pactbroker.HalClient$getJson$1.invoke(HalClient.kt:310)
    at au.com.dius.pact.core.support.KotlinLanguageSupportKt.handleWith(KotlinLanguageSupport.kt:35)
    at au.com.dius.pact.core.pactbroker.HalClient.getJson(HalClient.kt:305)
    at au.com.dius.pact.core.pactbroker.HalClient.fetch(HalClient.kt:269)
    at au.com.dius.pact.core.pactbroker.PactBrokerClient.fetchPact(PactBrokerClient.kt:782)
    at au.com.dius.pact.core.model.PactReaderKt.loadPactFromUrl(PactReader.kt:60)
    at au.com.dius.pact.core.model.DefaultPactReader.loadFile(PactReader.kt:413)
    at au.com.dius.pact.core.model.DefaultPactReader.loadPact(PactReader.kt:210)
    at au.com.dius.pact.provider.junitsupport.loader.PactBrokerLoader.loadPactsForProvider(PactBrokerLoader.kt:266)
    at au.com.dius.pact.provider.junitsupport.loader.PactBrokerLoader.load(PactBrokerLoader.kt:128)
    at au.com.dius.pact.provider.junit5.PactVerificationInvocationContextProvider$resolvePactSources$pactSources$1$pacts$1.invoke(PactJUnit5VerificationProvider.kt:78)
    at au.com.dius.pact.core.support.KotlinLanguageSupportKt.handleWith(KotlinLanguageSupport.kt:35)
    at au.com.dius.pact.provider.junit5.PactVerificationInvocationContextProvider.resolvePactSources(PactJUnit5VerificationProvider.kt:78)
    at au.com.dius.pact.provider.junit5.PactVerificationInvocationContextProvider.provideTestTemplateInvocationContexts(PactJUnit5VerificationProvider.kt:45)
    at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273)
    at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1708)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
    at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
    at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
    m
    y
    • 3
    • 14
  • j

    James Fraser

    04/29/2025, 9:00 AM
    Hey folks 👋 I was wondering is it possible to disable a Pactflow user via the API?
    p
    m
    • 3
    • 5
  • j

    James Fraser

    05/15/2025, 4:03 PM
    Hey there 👋 I’ve had some engineers reach out to me about their can-i-deploy failing It seems that their BDCT integration hasn’t verified the interactions between a consumer branch and the provider version that’s deployed in an environment - is there a way to force that verification to take place?
    m
    s
    • 3
    • 5
  • s

    Simon Raess

    05/16/2025, 12:20 PM
    There seems to be a bug in the latest pactflow UI. It shows on multiple versions the same deployed environment, e.g. production. It seems the UI is showing the env "production" on all previously deployed versions. On the CLI (with -o json) it looks fine.
    m
    s
    • 3
    • 3
  • i

    ismail

    05/19/2025, 12:00 PM
    will be discussed here
    m
    • 2
    • 6
  • e

    Eddie Stanley

    05/20/2025, 2:44 AM
    Currently, with the bi-directional workflow consumers must upload a contract in Pact format. Wheras the provider uploads an OAS. Is support for consumers uploading an OAS (instead of Pact contract) on your roadmap?
    m
    • 2
    • 6
  • s

    Stephan Sommer

    05/20/2025, 12:54 PM
    Hi 👋 We're using PactFlow and have created a custom interaction type for Microfrontends, where we generate Pact V4 files ourselves (without using the standard Pact tooling), following the official spec. These interactions are added under the
    interactions[]
    array in the pact file, using a custom
    type
    and domain-specific fields in place of `request`/`response`. Our PoC showed promising results, and we'd now like to validate whether this is a supported and future-proof approach before rolling it out more broadly. Our main concern is whether PactFlow will continue to support contracts that contain custom interaction types and properties — or if there's a risk that the broker might reject these files in future versions. Does this sound like a safe path to go down? Thanks!
    m
    • 2
    • 3
  • r

    Rishav Singh

    06/09/2025, 10:20 AM
    Hi!, is there a way to check to about pacticipant deletion on pactflow like who deleted it, when it is deleted it ?
  • g

    Gabriel Vasconcelos

    06/09/2025, 10:56 AM
    Hello. I tried accessing our audit logs via /audit, but all we get are entries from over 1 month ago. Are there special parameters to use? I don't see anything in the docs about it.
    m
    • 2
    • 9
  • j

    James Fraser

    06/17/2025, 8:41 AM
    Hey folks 👋 possibly daft question - since I’ve moved to the new UI I can’t see where to find a system account token? If I click on the account options the only option I get is
    Copy Sys. Account UUID
    Where can I get it? 😅
    m
    • 2
    • 2
  • d

    David McKinney

    06/20/2025, 10:31 AM
    Hi folks, appreciate any help. Already have BDCT setup using Pactflow. Now I'm currently setting up MBCT but it looks like its trying to send http requests like for a normal provider verification.
    Copy code
    2025-06-20T09:55:08.050264Z  INFO ThreadId(16) pact_verifier: Running setup provider state change handler with empty state for 'a setCurrentPage event with empty pageId'
    2025-06-20T09:55:08.050280Z  INFO ThreadId(16) pact_verifier: Running provider verification for 'a setCurrentPage event with empty pageId'
    2025-06-20T09:55:08.050295Z  INFO ThreadId(16) pact_verifier::provider_client: Sending request to provider at <http://localhost:56254/>
    2025-06-20T09:55:08.050300Z  INFO ThreadId(16) pact_verifier::provider_client: Sending request HTTP Request ( method: POST, path: /, query: None, headers: Some({"Content-Type": ["application/json"]}), body: Present(58 bytes, application/json) )
    [10:55:08.052] ERROR (8141): pact@15.0.1: no handler found for message a setCurrentPage event with empty pageId
    Pactfile - https://pastebin.com/zqtfunst Consumer - https://pastebin.com/8MqM3Sre Provider - https://pastebin.com/fNTH9cSc My consumer tests will pass, generate the pactfile, it looks correct But on running the provider tests using jest it seems to use default http verifier
    m
    s
    • 3
    • 33
  • j

    Jocelyn Lecomte

    06/21/2025, 10:14 AM
    Hi Pactflow team. I just want to tell you about a little glitch in the webhook creation page: when you add a new header, it deletes the header key of all the headers that were previously configured.
    m
    • 2
    • 2
  • m

    Milda

    06/24/2025, 9:23 AM
    hi, we're seeing this error intermittently, seemingly when the publish is called, the hash that gets created for the contract is invalid, though I believe we're not the ones hashing the json? Any thoughts on how to guard against this? Was advised it's intermittent and it is on the OAS file upload
    Copy code
    status=400 {"title":"Validation errors","type":"<https://problems-registry.smartbear.com/validation-error>","status":400,"instance":"/","errors":[{"detail":"content could not be parsed as application/json","pointer":"#/contract/content"},{"detail":"content when Base64 decoded and parsed must be a hash","pointer":"#/contract/content"}]}
    m
    p
    • 3
    • 9
  • z

    Zachary Lysobey

    06/24/2025, 9:42 PM
    @Zachary Lysobey has left the channel
  • c

    Cody Jenkins

    07/08/2025, 5:27 AM
    We're having trouble signing in to our pactflow instance. This is what I get even when I do a private mode window:
    👀 1
    👋 1
    m
    • 2
    • 3
  • m

    Matt Corby

    07/09/2025, 9:06 AM
    Hi people, we seem to have lost our PactFlow user (at least the details we have don’t work any more): https://sdx.pactflow.io/ un: connect.engineering@sedex.com Any ideas?
    👋 1
    m
    • 2
    • 29
  • d

    Dominic Gara

    07/09/2025, 10:05 AM
    Hi folks! I've been following the ci-cd workshop, and for the life of me cannot get the damned webhook to work. Would anyone be able to provide some assistance? Keen to get past this step in prep for a team demo to showcase contract testing in action. Notes: • Attached is the webhook setup in APIHub • Link to my forked provider and forked consumer • The github personal access token is still listing as 'unused' and the "triggered webhooks" tab in ApiHub is empty - suggesting it's not getting that far in the process Huge thanks in advance!
    m
    • 2
    • 6
  • m

    Matt Corby

    07/09/2025, 2:22 PM
    @Matt (pactflow.io / pact-js / pact-go) different problem this time, I’ve got a 404 trying to record a pact to the following endpoint:
    /pacticipants/saq-summary-etl/versions/4b4c8962c8f7243a28cdeda7cbcbf7b7d90ae41a/deployed-versions/environment/6433116c-b3cd-48ce-bd0d-ed2a12b844ee
    - any ideas? The response is:
    Copy code
    404 . {"error":"The requested document was not found on this server."}
    m
    • 2
    • 21
  • k

    Kevin de Boer

    07/10/2025, 8:05 AM
    Hi, I am setting up bidirectional contract testing with an external provider, and they ask me if there are any possibilities for them to receive a notification with the comparison results after they've uploaded their new OAS file. Naturally I thought it would be possible with a webhook. But I've just tried a simple example where I have set up a webhook, and upload a modified OAS file with breaking changes, and the webhook does not seem to trigger. Am I missing anything here?
    m
    • 2
    • 3
  • d

    Dmytro Kryvenko

    07/11/2025, 10:55 AM
    Hello everyone! I'm just wondering if the webhook "Contract published that requires verification" should be triggered should cover initial contract publishing? I expected it should, but when I started testing, it was triggered only in case the existing contract was updated. When I choose "Contract published" option for webhook is is triggered successfully, but with option "Contract published that requires verification" - not.
    m
    • 2
    • 3
  • r

    Rishav Singh

    07/23/2025, 11:07 AM
    Hi team!, I am trying to use Pactflow-ai to generate the consumer contract test from our openapi spec file but every time the getting the
    ERROR: Server error: 500 Internal Server Error
    , maybe can you help ? it is generating for happy path but failing 400, 404 etc
    m
    • 2
    • 47
  • d

    David Mason

    07/28/2025, 8:05 AM
    I'm getting an error in our pipelines this morning that is new. I can't see how it is caused by changes our end. Any changes made recently to pactflow? Our pactflow /matrix endpoint is returning 404 😞
    Copy code
    FAILED integration_tests/pact/v3/test_can_i_merge.py::test_can_i_merge - RuntimeError: can-i-merge failed: Error retrieving matrix. PactBroker::Client::Hal::ErrorResponseReturned - Error making request to <https://xxx-xxx.pactflow.io/matrix> status=404 Not Found. The requested document was not found on this server.
    Using pact-cli to run can-i-merge (unchanged):
    docker run --rm pactfoundation/pact-cli:latest pact-broker can-i-merge --broker-base-url={pact_broker_base_url} --broker-token={pact_broker_token} --pacticipant a --pacticipant b
    y
    m
    • 3
    • 11
  • o

    Oleksandr.Boiko

    07/28/2025, 8:19 AM
    Hi we have implemented consumer driven contract testing in our company but in some cases we need to implement bi-directional testing And while implementing it we have run into a problem. When using the pactflow publish-provider-contract it expects the provider to self verify the open api specification, is there a way to skip it?, Our providers are .Net based and we generate the specification from the provider code, so we dont need to self verify anything, and our verification should be ok automattically. We have tried with --skip-verification-success option but it stil expects to upload the verification info, and it says that contract is not compatible with provider codebase. Thanks
    blobwave 2
    y
    • 2
    • 3
  • m

    Marlin Dalpozzo

    07/28/2025, 8:38 PM
    Hi, we are implementing a bi-directional contract testing system and we use
    can-i-deploy
    in our CI/CD system to check the compatibility of our Provider with our Consumer contracts. We would like detailed information about the contract validation failure (i.e. what specific request properties don't match etc), but unfortunately it seems like the default response from
    can-i-deploy
    lacks that information and links to the
    /contracts/bi-directional/provider/<provider>/version/<version>/consumer/<consumer>/version/<version>/cross-contract-verification-results
    page in the pactflow ui. There is documentation that implies that this information can be retrieved programmatically via the pactflow API https://docs.pactflow.io/docs/bi-directional-contract-testing/compatibility-checks/#api-resources
    crossContractVerificationResults
    contains the information we want We have tried various ways to make requests to that url, but couldn't get it to work. We always receive
    {"title":"404 Not Found","type":"<https://problems-registry.smartbear.com/not-found>","detail":"The requested document was not found on this server.","status":404}
    How can we retrieve the contract verification results programmatically?
    m
    j
    • 3
    • 8
  • d

    David Mason

    07/29/2025, 2:32 PM
    Hello, me again. I'm implementing webhooks now, and when testing some variables are not being populated.
    Copy code
    {
      "target": {
        "ref_type": "branch",
        "type": "pipeline_ref_target",
        "ref_name": "${pactbroker.providerVersionBranch}",
        "selector": {
          "type": "custom",
          "pattern": "pi-verify-pacts"
        }
      },
      "variables": [
        {
          "key": "PACT_URL",
          "value": "${pactbroker.pactUrl}"
        },
        {
          "key": "PACT_PROVIDER_VERSION",
          "value": "${pactbroker.providerVersionNumber}"
        },
        {
          "key": "PACT_PROVIDER_BRANCH",
          "value": "${pactbroker.providerVersionBranch}"
        },
        {
          "key": "PACT_PROVIDER_NAME",
          "value": "${pactbroker.providerName}"
        },
        {
          "key": "PACT_CONSUMER_VERSION",
          "value": "${pactbroker.consumerVersionNumber}"
        },
        {
          "key": "PACT_CONSUMER_BRANCH",
          "value": "${pactbroker.consumerVersionBranch}"
        },
        {
          "key": "PACT_CONSUMER_NAME",
          "value": "${pactbroker.consumerName}"
        }
      ]
    }
    ${pactbroker.providerVersionBranch}
    and
    ${pactbroker.providerVersionNumber}
    are resolving to an empty string, which causes the webhook to fail. For now I'll hope that this is just the "test webhook" functionality that's broken at the moment. I'll let you know if the problem persists.
    m
    • 2
    • 2
  • e

    Eddie Stanley

    08/11/2025, 8:48 PM
    Hey, When a webhook runs (specifically, the
    Contract published that requires verification
    webhook), what are the rules for determining the
    pactbroker.pactUrl
    that we use in the payload? If the webhook runs for two different provider versions (as shown in the screenshot), should that
    pactbroker.pactUrl
    be the same or different for the two invocations?
    m
    • 2
    • 1
  • k

    Kinkini Gamage

    08/13/2025, 12:38 AM
    I think I posted in the wrong channel, So reposting here. Hi team! 👋 I'm working on a provider verification setup and have a question about stateHandlers. Current Setup: In my pact.setup.js, I'm using stateHandlers to set up test data as in the sample project.
    Copy code
    const stateHandlers = {
      "products exists": () => {
        controller.repository.products = new Map([
          ["10", new Product("10", "CREDIT_CARD", "28 Degrees", "5678")],
        ]);
      },
      "products exist": () => {
        controller.repository.products = new Map([
          ["10", new Product("10", "CREDIT_CARD", "28 Degrees", "5678")],
        ]);
      },
      "a product with ID 10 exists": () => {
        controller.repository.products = new Map([
          ["10", new Product("10", "CREDIT_CARD", "28 Degrees", "5678")],
        ]);
      },
      "a product with ID 11 does not exist": () => {
        controller.repository.products = new Map();
      },
    };
    My Question: 1. Can I use a real database instead? Instead of manually setting up test data in stateHandlers, can I point my provider verification to use a real database environment (like staging/test DB) to fetch actual data? 2. Can I completely avoid stateHandlers? Is it possible to connect directly to my working environment (staging/test database) and eliminate the need for stateHandlers altogether? Use Case: • I want to avoid maintaining test data in code • Prefer using real data from my test/staging environment • This would be especially useful for webhook-triggered verifications when consumer contracts are updated Is this possible/recommended? If so, how would I configure the provider verification to use an actual database connection instead of in-memory test data? Any guidance or examples would be greatly appreciated! 🙏 Thanks!
    m
    • 2
    • 2
  • d

    Daniel Phillips

    08/14/2025, 10:27 AM
    Hi Team! I'm having trouble getting my OpenAPI specification to be parsed by Pactflow using discriminators. I have followed the guidelines outlined here: Keyword Support | PactFlow Documentation The error I am seeing is:
    "message": "discriminator: oneOf subschemas (or referenced schemas) must have \"properties/transactionType\""
    What I cannot understand is why it's complaining about the transactionType not being declared within subschemas, when all of them explicityly define it alongside a fixed enum value. Here is a sample of what my schema definitions look like:
    Copy code
    Transaction:
          required:
            - transactionDetails
            - transactionType
          type: object
          properties:
            transactionType:
              type: string
              description: 'Type of transaction. Used as a discriminator for polymorphic deserialization.'
              example: transaction_a
            transactionDetails:
              $ref: '#/components/schemas/TransactionDetails'
          description: Transaction Details
          discriminator:
            propertyName: transactionType
          oneOf:
            - $ref: '#/components/schemas/TransactionA'
            - $ref: '#/components/schemas/TransactionB'
    TransactionA:
          required:
            - transactionDetails
            - transactionType
          type: object
          description: Transaction A Details
          allOf:
            - $ref: '#/components/schemas/Transaction'
            - type: object
              properties:
                transactionDetails:
                  $ref: '#/components/schemas/TransactionADetails'
                transactionType:
                  type: string
                  description: Constant discriminator identifying this transaction subtype
                  readOnly: true
                  example: transaction_a
                  enum:
                    - transaction_a        
    TransactionB:
          required:
            - transactionDetails
            - transactionType
          type: object
          description: Transaction B Details
          allOf:
            - $ref: '#/components/schemas/Transaction'
            - type: object
              properties:
                transactionDetails:
                  $ref: '#/components/schemas/TransactionBDetails'
                transactionType:
                  type: string
                  description: Constant discriminator identifying this transaction subtype
                  readOnly: true
                  example: transaction_b
                  enum:
                    - transaction_b
    m
    • 2
    • 8