Skip to content

Getting started

This page walks through a typical integration: validate a fundraiser account, post one donation, then reconcile that donation with a remittance. By the end you’ll have exercised every endpoint partners typically utilise.

Ensure you have the following:

  • Partner credentials provisioned (see Authentication).
  • An ASF Member Number to test with. The ASF will provide a sandbox fundraiser account during onboarding; for production work, use the ASF Member Number of the fundraiser themselves.
  • A tool that can make HTTPS requests with custom headers (curl, Postman, your platform’s HTTP client).

The base URL throughout this guide is:

https://sit.api.asf.org.au/fundraisers/api/v1
  1. Validate the fundraiser.

    Before posting a donation, confirm the fundraiser has actually activated your fundraising channel. This fails fast and gives you a clear error to surface in your UI.

    Terminal window
    curl -sS \
    -X GET "$BASE_URL/fundraisers?channel=XYZ%20Platform&id=ASF123456" \
    -H "client_id: $ASF_CLIENT_ID" \
    -H "client_secret: $ASF_CLIENT_SECRET",
    -H 'X-Correlation-ID': $RANDOM_UUID | jq

    A successful response:

    {
    "apiVersion": "1.0.0",
    "correlationId": "210c68180-2ac6-11ee-b000-111",
    "method": "/fundraisers",
    "data": {
    "items": {
    "name": "Wombat Park Softball Club",
    "fundraiserId": "ASF123456",
    "productEnrollmentId": "a0T0T000006MMN2UAO",
    "status": "Enrollment Validated"
    }
    }
    }

    If the fundraiser hasn’t activated your fundraising channel you’ll get a 400 with error.code: FUNDRAISER:VALIDATION. Don’t proceed to the next step — surface an error to the donor.

  2. Post the donation.

    Take the order details from your platform and POST them. The minimum required fields are listed below. Any platform-specific metadata goes in sourceMetadata.

    Terminal window
    curl -sS \
    -X POST "$BASE_URL/donations" \
    -H "client_id: $ASF_CLIENT_ID" \
    -H "client_secret: $ASF_CLIENT_SECRET" \
    -H 'X-Correlation-ID': $RANDOM_UUID,
    -H "Content-Type: application/json" \
    -d '{
    "source": {
    "channel": "XYZ Platform",
    "fundraiserId": "ASF123456"
    },
    "donor": {
    "email": "jane@example.com",
    "firstName": "Jane",
    "lastName": "Smith",
    "billingAddress": {
    "postalCode": "2600",
    "country": "AU"
    }
    },
    "transaction": {
    "id": "504789900",
    "date": "2026-05-11T10:09:54+10:00",
    "amount": "250"
    },
    "sourceMetadata": {
    "registrationNumber": "450789469"
    }
    }' | jq

    The response gives you ASF’s donation reference. Persist this — you’ll need it when posting remittances:

    {
    "apiVersion": "1.0.0",
    "correlationId": "210c68180-2ac6-11ee-b000-111",
    "method": "/donations",
    "data": { "items": { "donationReferenceId": "0000468-000788" } }
    }
  3. Reconcile with a remittance.

    When your payment processor settles funds into ASF’s bank account, post a remittance to tie that bank transaction to the donation references it covers. This is what lets ASF mark the donation as funded in their books.

    Terminal window
    curl -sS \
    -X POST "$BASE_URL/remittances" \
    -H "client_id: $ASF_CLIENT_ID" \
    -H "client_secret: $ASF_CLIENT_SECRET" \
    -H 'X-Correlation-ID': $RANDOM_UUID \
    -H "Content-Type: application/json" \
    -d '{
    "source": {
    "channel": "XYZ Platform",
    "fundraiserId": "ASF123456"
    },
    "remittances": [
    {
    "bankReferenceId": "Donation WPSC",
    "amount": 250.00,
    "donationIds": ["0000468-000788"]
    }
    ]
    }' | jq

    You’ll get a 202 Accepted — remittance processing is asynchronous:

    {
    "apiVersion": "1.0.0",
    "correlationId": "210c68180-2ac6-11ee-b000-111",
    "method": "/remittance",
    "data": { "items": { "status": "Request Accepted" } }
    }

This is the minimum integration. From here, platform-specific work is mostly about when you call these endpoints in your platform’s event flow.

  • Browse the API Reference. Every endpoint is documented as its own method in the API Reference, with Python, TypeScript and PHP samples generated from the OpenAPI spec.
  • Pick your channel. End-to-end examples for the supported channels: