using System.Threading.Tasks;
using GraphQL.Client.Http;
using GraphQL.Client.Serializer.Newtonsoft;
private const string CreatePaymentRequestMutation = @"mutation CreatePaymentRequest(
$payerReference: String!,
$beneficiaryReference: String!,
$externalReference: String,
$beneficiaryName: String!,
$beneficiaryBankId: BankBeneficiaryBankId!,
$beneficiaryAccountNumber: String!,
clientPaymentInitiationRequestCreate(input: {
payerReference: $payerReference,
beneficiaryReference: $beneficiaryReference,
externalReference: $externalReference,
bankId: $beneficiaryBankId,
accountNumber: $beneficiaryAccountNumber
paymentInitiationRequest {
public class CreateAuthRequestResponse {
public ClientPaymentInitiationRequestCreate clientPaymentInitiationRequestCreate { get; set; }
public class ClientPaymentInitiationRequestCreate
public PaymentInitiationRequest paymentInitiationRequest { get; set; }
public class PaymentInitiationRequest
public string id { get; set; }
public string url { get; set; }
public static async Task Main()
var graphQLClient = new GraphQLHttpClient("https://api.stitch.money/graphql", new NewtonsoftJsonSerializer());
var token = "{{ add client access token }}";
graphQLClient.HttpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {token}");
var request = new GraphQLRequest
Query = CreatePaymentRequestMutation,
payerReference = "KombuchaFizz",
beneficiaryReference = "Joe-Fizz-01",
externalReference = "externalReference01",
beneficiaryName = "FizzBuzz Co.",
beneficiaryBankId = "fnb",
beneficiaryAccountNumber = "123456789",
merchant = "{ merchantId: '123', merchantName: 'Acme Inc' }",
expireAt = DateTime.UtcNow.AddMinutes(20)
var response = await graphQLClient.SendMutationAsync<CreateAuthRequestResponse>(request);
Console.WriteLine("Raw response:");
Console.WriteLine(JsonSerializer.Serialize(response, new JsonSerializerOptions { WriteIndented = true }));
Console.WriteLine($"Payment Request URL: {response.Data.clientPaymentInitiationRequestCreate.paymentInitiationRequest.url}?redirect_uri=https://localhost:8080/return");