I am attempting to update a contribution's status but I am getting the error "Cannot change contribution status from Pending to In Progress." I am doing this through the API. I understand there may be some specification bug where In Progress is intended for pledges, not contribution's -- but I can't think of any better way to represent the data I am getting using the available contribution statuses :-S In Britain, a contribution or payment of any kind can have multiple states and frequently goes through multiple state changes. I understand this is different to, say, the US system which I have limited experience of. I am using the contribution status 'Pending' to mean "The direct debit mandate has been created (but not submitted by the payment gateway to the banks)". I am trying to use the contribution status 'In Progress' to mean "The direct debit mandate has been submitted to the banks (but not yet paid)" I believe this is in keeping with expected behaviour for these terms in this context.

  • 1
    Hi Daniel, actually have a client in the UK with the same workflow - they use pending and seem to be happy with that - currently, as you have surmised, "in progress" is not a contribution status currently available, however, there have been many discussions on this topic within the core team and civi accounts enthusiasts - not sure if you are a part of those channels? Jul 6, 2016 at 1:11

1 Answer 1


For the why on restrictions - see: Reasons for restricting changing contribution statusses?

I'm co-maintaining the iATS extension and we're doing Uk direct debit - so I hear you. And I also have a status = Returned that I need to be able to get in for North American ACHEFT processing. ACHEFT here can go from Pending -> Completed -> to Returned. And Returned is not a refund. It's also not quite a Canceled either.

  • At a client we also had this problem. Their contributions get the status pending and then pushed to a financial system which does the sepa direct debit. This system then updates the contribution status but it wasn't allowed to do so. I have created a custom api which works around this restriction. Jul 6, 2016 at 6:24

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.