API reference
Errors
What the API returns when a call fails: the status, the body and the message of each error, and how to fix it.
The error format
Every error is a JSON body with a readable message. Most errors also repeat the HTTP status in statusCode and its name in error:
{ "statusCode": 403, "message": "Campaign has to be activated first.", "error": "Forbidden"}Some errors carry a code instead of statusCode and error, for example a closed account or a donation over the campaign's budget:
{ "message": "Insufficient campaign budget.", "code": "INSUFFICIENT_CAMPAIGN_BUDGET"}The 409 on uniqueExternalId and the 429 carry statusCode and message only. Read the HTTP status of the response, then code when there is one, then message. Never rely on error.
When the request does not match the schema, message is a list with one entry per problem. Fields that are not part of the schema are rejected, not ignored.
{ "statusCode": 400, "message": ["amount must not be less than 1", "property foo should not exist"], "error": "Bad Request"}Status codes
- 400: the request is invalid, through a field, a value or a combination of them. Fix the request, do not retry it.
- 401: the access token is missing, expired or invalid. Retry once, with a new token. On
POST /v1/authenticationitself, a 401Unauthorizedmeans the Basic authentication header is missing, andInvalid credentialsmeans the client id or secret is wrong, or belongs to the other environment. - 402: the account lacks something the call needs: a plan feature (
Plan upgrade required), a payment method (MISSING_PAYMENT_METHOD) or an active subscription (NO_ACTIVE_SUBSCRIPTION). Fix the account, then retry. - 403: the call is understood but refused, because of the state of the resource (a donation on a campaign that is not active yet, an account that has not finished onboarding) or because of your role. Change the state first.
- 404: no such resource on your account and environment. An id that belongs to another account is treated as unknown: 404 when it is in the path, 400
Bad Requestwhen it is in the body or the query, never 403. Ids from the sandbox do not exist in production. - 409: the resource already exists, is already in that state, or conflicts with another one. On a create with
uniqueExternalId, your previous call succeeded. On a claim, a cast or a validation, the donation or the vote is no longer pending: read it to see its status. Otherwise read the message:Slug already usedmeans another campaign has thatslug, and on an update,Unique constraint failed on uniqueExternalIdmeans another record already uses that id. - 429: too many calls to an endpoint that has a limit, like the bulk download links. Wait the number of seconds given in the
Retry-Afterheader, then retry. Never retry in a loop. The endpoints concerned are listed below. - 500: something failed on our side. Retry once with the same
uniqueExternalId: a duplicate then returns 409, not a second donation.
A token lasts one hour: create one, reuse it for every call, and create the next one when a call returns 401. Asking for a new token before each call makes your integration slower.
Retrying safely
Send your own id in uniqueExternalId when you create a donation, a vote, a donor or a recurring donation. If the network fails and you send the call again, the second one returns 409 Unique constraint failed on uniqueExternalId instead of creating a duplicate. Fetch the first one with the list endpoint filtered on that id (donations, votes and donors); for recurring donations, keep the id you received at creation, as their list has no such filter.
Every error, by endpoint
Read from the API code. Each entry says what triggers it and how to fix it.
400 Bad Request
A field is missing, has the wrong type, or is not part of the request schema.72 endpoints
How to fix:
messagelists every problem. Unknown fields are rejected, not ignored: remove them rather than sending extra data.{ "statusCode": 400, "message": [ "amount must not be less than 1", "property foo should not exist" ], "error": "Bad Request" }Returned by:Create an admin widget tokenCreate a donor widget tokenCreate a donor platform widget tokenList accountsGet an accountUpdate an accountCreate an invitationList child accountsCreate a child accountEnable donor platformGet payment detailsGet a charityand 60 more
Invalid customDomain4 endpoints
How to fix: A custom domain cannot contain a Charitips domain (charitips.com, charitips.net, charitips.org, charitips.tech, chari.tips). Use a domain you own, or
subdomainfor an address under Charitips. Create a site{ "statusCode": 400, "message": "Invalid customDomain", "error": "Bad Request" }Returned by:Update an accountCreate a child accountCreate a siteUpdate a site
Invalid campaignIds3 endpoints
How to fix: At least one id of
campaignIdsis not a campaign of this account, or an id is repeated. List the account's campaigns and send each id once. List campaigns{ "statusCode": 400, "message": "Invalid campaignIds", "error": "Bad Request" }Returned by:Create an invitationUpdate a user invitationUpdate a user
A selection must have at least one charity when linked to a campaign2 endpoints
How to fix: Add at least one charity to the selection before linking it to a campaign. Add a charity
{ "statusCode": 400, "message": "A selection must have at least one charity when linked to a campaign", "error": "Bad Request" }Returned by:Update a charities selectionRemove a charity
Bad Request2 endpoints
How to fix: The
campaignIddoes not exist on your account and environment. Ids from the sandbox do not exist in production.{ "statusCode": 400, "message": "Bad Request" }Returned by:Create a recurring donationCreate a vote
Both donor.email and donor.firstName are required for email campaigns2 endpoints
How to fix: Pass both
donor.emailanddonor.firstName. Create a donation{ "statusCode": 400, "message": "Both donor.email and donor.firstName are required for email campaigns", "error": "Bad Request" }Returned by:Create a donationCreate a vote
Both donor.slackId and donor.firstName are required for slack campaigns2 endpoints
How to fix: Pass both
donor.slackIdanddonor.firstName. Create a donation{ "statusCode": 400, "message": "Both donor.slackId and donor.firstName are required for slack campaigns", "error": "Bad Request" }Returned by:Create a donationCreate a vote
Budget is required for FIXED_AMOUNT campaigns2 endpoints
How to fix: Set
budget, in cents, when amountType is FIXED_AMOUNT. Create a campaign{ "statusCode": 400, "message": "Budget is required for FIXED_AMOUNT campaigns", "error": "Bad Request" }Returned by:Enable donor platformCreate a campaign
DISTRIBUTION campaigns must also be FIXED_AMOUNT campaigns2 endpoints
How to fix: A DISTRIBUTION campaign shares a fixed budget: set amountType to FIXED_AMOUNT and a budget. Create a campaign
{ "statusCode": 400, "message": "DISTRIBUTION campaigns must also be FIXED_AMOUNT campaigns", "error": "Bad Request" }Returned by:Enable donor platformCreate a campaign
donor is required for EMAIL campaigns.2 endpoints
How to fix: EMAIL campaigns send the donation to someone: pass
donorwith at leastemailandfirstName. Create a donation{ "statusCode": 400, "message": "donor is required for EMAIL campaigns.", "error": "Bad Request" }Returned by:Create a donationCreate a vote
donor is required for SLACK campaigns.2 endpoints
How to fix: SLACK campaigns send the donation in Slack: pass
donorwithslackIdandfirstName. Create a donation{ "statusCode": 400, "message": "donor is required for SLACK campaigns.", "error": "Bad Request" }Returned by:Create a donationCreate a vote
Featured charities must be part of the selected charities: <join(', ')>2 endpoints
How to fix:
featuredCharitiesIdsnames charities that are not in the selection: the message lists them. Add them tocharityIds, or leave them out offeaturedCharitiesIds. Charities and selections{ "statusCode": 400, "message": "Featured charities must be part of the selected charities: <join(', ')>", "error": "Bad Request" }Returned by:Create a charities selectionUpdate a charities selection
givingTarget is only supported for fundraising campaigns2 endpoints
How to fix
- Enable donor platform: Enabling the donor platform creates a spontaneous donations campaign from a Charitips template, and that campaign was refused. Nothing in your request causes it: contact us. Enable donor platform
- Create a campaign:
givingTargetonly applies when the donor pays: senddefaultHasBeenCharged: true, or removegivingTarget. Create a campaign
{ "statusCode": 400, "message": "givingTarget is only supported for fundraising campaigns", "error": "Bad Request" }Returned by:Enable donor platformCreate a campaign
INCLUDED fee type not supported2 endpoints
How to fix
- Enable donor platform: Enabling the donor platform creates a spontaneous donations campaign from a Charitips template, and that campaign was refused. Nothing in your request causes it: contact us. Enable donor platform
- Create a campaign:
defaultFeeTypeINCLUDED only works withdefaultHasBeenCharged: true. LeavedefaultFeeTypeout or set it to EXCLUDED. Create a campaign
{ "statusCode": 400, "message": "INCLUDED fee type not supported", "error": "Bad Request" }Returned by:Enable donor platformCreate a campaign
Insufficient campaign budget.2 endpoints
How to fix: This donation would take the campaign over its budget. Create a smaller donation, or use another campaign: the API does not change the budget of an existing campaign.
{ "message": "Insufficient campaign budget.", "code": "INSUFFICIENT_CAMPAIGN_BUDGET" }Returned by:Create a donationClaim a recurring donation
Invalid charitiesSelectionId2 endpoints
How to fix: The selection does not exist on your account. List your selections, or create one. List charities selections
{ "statusCode": 400, "message": "Invalid charitiesSelectionId", "error": "Bad Request" }Returned by:Create a campaignUpdate a campaign
Invalid parameter includeDonor2 endpoints
How to fix:
includeDonoris not available with API credentials. Remove it, and read the donor with its own endpoint. Get a donor{ "statusCode": 400, "message": "Invalid parameter includeDonor", "error": "Bad Request" }Returned by:List donationsList votes
Nested subdomains are not allowed2 endpoints
How to fix: The part before your own subdomain must be a single label: 1 to 63 lowercase letters, digits or hyphens, no dot, not starting or ending with a hyphen. Donations for your business customers
{ "statusCode": 400, "message": "Nested subdomains are not allowed", "error": "Bad Request" }Returned by:Update an accountCreate a child account
Only members can be assigned campaigns2 endpoints
How to fix:
campaignIdsonly apply to the MEMBER role, and the check reads the role saved before this call. Setroleto MEMBER in a first update, then sendcampaignIds, or leavecampaignIdsout. Account hierarchy{ "statusCode": 400, "message": "Only members can be assigned campaigns", "error": "Bad Request" }Returned by:Update a user invitationUpdate a user
Only one of <givingType> campaigns is supported2 endpoints
How to fix
- Enable donor platform: Enabling the donor platform creates a spontaneous donations campaign from a Charitips template, and that campaign was refused. Nothing in your request causes it: contact us. Enable donor platform
- Create a campaign: The campaign template sets a giving type (PAYROLL or PAID_TIME_OFF), and your account already has a campaign of that type. Use the existing campaign instead of creating a second one. List campaigns
{ "statusCode": 400, "message": "Only one of <givingType> campaigns is supported", "error": "Bad Request" }Returned by:Enable donor platformCreate a campaign
Public campaigns must be both FIXED_AMOUNT and DISTRIBUTION campaigns2 endpoints
How to fix: A PUBLIC campaign is a vote on a fixed budget: set amountType FIXED_AMOUNT and donationType DISTRIBUTION, or keep it PRIVATE. Create a campaign
{ "statusCode": 400, "message": "Public campaigns must be both FIXED_AMOUNT and DISTRIBUTION campaigns", "error": "Bad Request" }Returned by:Enable donor platformCreate a campaign
Subdomain must ends with .<subdomain>2 endpoints
How to fix: A child account's subdomain sits under yours: send
<child>.<your subdomain>, for exampleshop.acmewhen your subdomain isacme. The message gives your subdomain. Donations for your business customers{ "statusCode": 400, "message": "Subdomain must ends with .<subdomain>", "error": "Bad Request" }Returned by:Update an accountCreate a child account
A selection must have at least one charity to be linked to a campaign1 endpoint
How to fix: You sent
campaignId: pass at least one id incharityIdsas well, or create the selection withoutcampaignId. Create a charities selection{ "statusCode": 400, "message": "A selection must have at least one charity to be linked to a campaign", "error": "Bad Request" }Returned by:Create a charities selection
accessToken is required for Bearer authentication1 endpoint
How to fix: With authenticationStrategy BEARER, pass the accessToken Charitips will send to your endpoint. Webhooks
{ "statusCode": 400, "message": "accessToken is required for Bearer authentication", "error": "Bad Request" }Returned by:Create a webhook
accountId is required when includeCampaigns is true1 endpoint
{ "statusCode": 400, "message": "accountId is required when includeCampaigns is true", "error": "Bad Request" }Returned by:List campaign templates
At least one campaign is required for members1 endpoint
How to fix: A MEMBER only sees the campaigns they are given. Send
campaignIdswith at least one campaign of the account, or invite the user as ADMIN or PAYROLL_MANAGER. Create an invitation{ "statusCode": 400, "message": "At least one campaign is required for members", "error": "Bad Request" }Returned by:Create an invitation
At least one of subdomain and customDomain is required.1 endpoint
How to fix: Send
subdomain,customDomain, or both. Create a site{ "statusCode": 400, "message": "At least one of subdomain and customDomain is required.", "error": "Bad Request" }Returned by:Create a site
Bad Request1 endpoint
How to fix: The
campaignIddoes not exist on your account and environment. Ids from the sandbox do not exist in production.{ "message": "Bad Request", "code": "INVALID_POSTAL_ADDRESS" }Returned by:Create a donation
Both username and password are required for Basic authentication1 endpoint
How to fix: With authenticationStrategy BASIC, pass the username and password Charitips will send to your endpoint. Webhooks
{ "statusCode": 400, "message": "Both username and password are required for Basic authentication", "error": "Bad Request" }Returned by:Create a webhook
Campaign budget exceeds payment card amount limit1 endpoint
How to fix: The amount to charge (the budget, the usage not billed yet and the fees) is above what the account's payment card can be charged at once. Create the campaign with a lower budget, or switch to another payment method, such as a bank transfer, in the dashboard, under Settings > Billing. The sandbox never returns this error. Create a campaign
{ "message": "Campaign budget exceeds payment card amount limit", "code": "PAYMENT_CARD_AMOUNT_LIMIT_EXCEEDED" }Returned by:Activate a campaign
Campaign budget exceeds SEPA Direct Debit amount limit1 endpoint
How to fix: The amount to charge (the budget, the usage not billed yet and the fees) is above what a SEPA direct debit can take at once. Create the campaign with a lower budget, or switch to another payment method, such as a bank transfer, in the dashboard, under Settings > Billing. The sandbox never returns this error. Create a campaign
{ "message": "Campaign budget exceeds SEPA Direct Debit amount limit", "code": "SDD_AMOUNT_LIMIT_EXCEEDED" }Returned by:Activate a campaign
Campaign is a DISTRIBUTION one. Only votes can be created1 endpoint
How to fix: On a DISTRIBUTION campaign, people vote on a budget: create a vote, not a donation. Create a vote
{ "statusCode": 400, "message": "Campaign is a DISTRIBUTION one. Only votes can be created", "error": "Bad Request" }Returned by:Create a donation
Campaign is a FACE_VALUE one. Only donations can be created1 endpoint
How to fix: On a FACE_VALUE campaign, each person gives an amount: create a donation, not a vote. Create a donation
{ "statusCode": 400, "message": "Campaign is a FACE_VALUE one. Only donations can be created", "error": "Bad Request" }Returned by:Create a vote
Cannot delete a charities selection with active campaigns1 endpoint
How to fix: A campaign that is ACTIVE, PENDING or DRAFT still uses this selection. Give those campaigns another selection, or delete it once they are complete or canceled. List campaigns
{ "statusCode": 400, "message": "Cannot delete a charities selection with active campaigns", "error": "Bad Request" }Returned by:Delete a charities selection
charityId cannot be set for POSTAL campaigns: the recipient chooses the charity with the card.1 endpoint
{ "statusCode": 400, "message": "charityId cannot be set for POSTAL campaigns: the recipient chooses the charity with the card.", "error": "Bad Request" }Returned by:Create a donation
Donation not claimed yet1 endpoint
How to fix: Claim the donation for a charity first. Claim a donation
{ "statusCode": 400, "message": "Donation not claimed yet", "error": "Bad Request" }Returned by:Validate a donation
Donations of an order campaign cannot be created through the API.1 endpoint
{ "statusCode": 400, "message": "Donations of an order campaign cannot be created through the API.", "error": "Bad Request" }Returned by:Create a donation
Exactly 3 START and 3 END reminders are required1 endpoint
{ "statusCode": 400, "message": "Exactly 3 START and 3 END reminders are required", "error": "Bad Request" }Returned by:Update campaign reminders
Invalid authenticationStrategy1 endpoint
How to fix: Set
authenticationStrategytoBASIC(withusernameandpassword) orBEARER(withaccessToken). Webhooks{ "statusCode": 400, "message": "Invalid authenticationStrategy", "error": "Bad Request" }Returned by:Create a webhook
Invalid campaignReminderId1 endpoint
{ "statusCode": 400, "message": "Invalid campaignReminderId", "error": "Bad Request" }Returned by:Update campaign reminders
Invalid fields: <join(', ')>1 endpoint
How to fix: A donor platform token can only change the donor's own profile: firstName, lastName, phone, pictureUrl, birthdate, personalEmail, title, persona, hasAcceptedTerms, street, zip, city and country. Remove the fields listed in the message. Update a donor
{ "statusCode": 400, "message": "Invalid fields: <join(', ')>", "error": "Bad Request" }Returned by:Update a donor
Invalid lead information1 endpoint
How to fix: A field enabled in the campaign's
leadCollectionOptions(fullname, companyName, email, phone or custom) is missing fromlead. Claim a donation{ "statusCode": 400, "message": "Invalid lead information", "error": "Bad Request" }Returned by:Claim a donation
Invalid parentDonationId1 endpoint
{ "statusCode": 400, "message": "Invalid parentDonationId", "error": "Bad Request" }Returned by:Create a donation
Invoice amount <amount_due> is over the payment card limit <PAYMENT_CARD_AMOUNT_LIMIT>1 endpoint
How to fix: The budget of the campaign is invoiced at activation, and the invoice is above what the payment card can be charged at once. Create the campaign with a lower budget, or switch to another payment method, such as a bank transfer, in the dashboard, under Settings > Billing. The sandbox never returns this error. Create a campaign
{ "message": "Invoice amount <amount_due> is over the payment card limit <PAYMENT_CARD_AMOUNT_LIMIT>", "code": "PAYMENT_CARD_AMOUNT_LIMIT_EXCEEDED" }Returned by:Activate a campaign
Invoice amount <amount_due> is over the SDD limit <SDD_AMOUNT_LIMIT>1 endpoint
How to fix: The budget of the campaign is invoiced at activation, and the invoice is above what a SEPA direct debit can take at once. Create the campaign with a lower budget, or switch to another payment method, such as a bank transfer, in the dashboard, under Settings > Billing. The sandbox never returns this error. Create a campaign
{ "message": "Invoice amount <amount_due> is over the SDD limit <SDD_AMOUNT_LIMIT>", "code": "SDD_AMOUNT_LIMIT_EXCEEDED" }Returned by:Activate a campaign
Language is already the default language1 endpoint
How to fix: This is the campaign's own language: its texts are the campaign fields. Update the campaign to change them, or send another
language. Update a campaign{ "statusCode": 400, "message": "Language is already the default language", "error": "Bad Request" }Returned by:Add a campaign translation
Lead collection is not enabled for this campaign1 endpoint
How to fix: The campaign does not collect leads: remove
leadfrom the claim, or create the campaign withwithLeadCollectionandleadCollectionOptions. Create a campaign{ "statusCode": 400, "message": "Lead collection is not enabled for this campaign", "error": "Bad Request" }Returned by:Claim a donation
Lead has to accept terms and conditions1 endpoint
How to fix: Set
lead.hasAcceptedTermsto true once the person has accepted the terms. Claim a donation{ "statusCode": 400, "message": "Lead has to accept terms and conditions", "error": "Bad Request" }Returned by:Claim a donation
Lead is required1 endpoint
How to fix: The campaign collects the donor's details at the claim: pass
leadwith the fields enabled in the campaign'sleadCollectionOptionsandhasAcceptedTermsset to true. Claim a donation{ "statusCode": 400, "message": "Lead is required", "error": "Bad Request" }Returned by:Claim a donation
Missing params in createFileGenerationRequest1 endpoint
How to fix:
paramsmust carrycampaignId(required for PRINT_PHYSICAL_CARDS_PDF) orfileRefs. Send one of them. Create a file generation request{ "statusCode": 400, "message": "Missing params in createFileGenerationRequest", "error": "Bad Request" }Returned by:Create a file generation request
No budget set for this campaign1 endpoint
How to fix: A campaign with
amountType: FIXED_AMOUNTneeds abudgetin cents, and the API cannot add one after creation. Create the campaign again with itsbudget, then activate it. Create a campaign{ "message": "No budget set for this campaign", "code": "MISSING_BUDGET" }Returned by:Activate a campaign
No charity selection linked to this campaign1 endpoint
How to fix: Create a charities selection with at least one charity, set it on the campaign with
charitiesSelectionId, then activate. Create a charities selection{ "statusCode": 400, "message": "No charity selection linked to this campaign", "error": "Bad Request" }Returned by:Activate a campaign
No domain found for your account1 endpoint
How to fix: The billing link is built on your own account's site. Every account gets its site when its onboarding is completed, so your account should have one: contact us. Create a shareable billing link
{ "statusCode": 400, "message": "No domain found for your account", "error": "Bad Request" }Returned by:Create a shareable billing link
Only one of accountId or includeChildAccountsCampaigns can be used1 endpoint
How to fix: Send
accountIdfor the metrics of one account, orincludeChildAccountsCampaigns=trueto add your child accounts' campaigns to yours, not both. Get all campaigns metrics{ "statusCode": 400, "message": "Only one of accountId or includeChildAccountsCampaigns can be used", "error": "Bad Request" }Returned by:Get all campaigns metrics
Recurring donations can only be created for FREE_AMOUNT campaigns1 endpoint
How to fix: Use a campaign with amountType FREE_AMOUNT for recurring donations. Create a campaign
{ "statusCode": 400, "message": "Recurring donations can only be created for FREE_AMOUNT campaigns", "error": "Bad Request" }Returned by:Create a recurring donation
Reminder type is required for each reminder1 endpoint
{ "statusCode": 400, "message": "Reminder type is required for each reminder", "error": "Bad Request" }Returned by:Update campaign reminders
Vote not casted yet1 endpoint
How to fix: Cast the vote for a charity first. Cast a vote
{ "statusCode": 400, "message": "Vote not casted yet", "error": "Bad Request" }Returned by:Validate a vote
Votes cannot be posted.1 endpoint
{ "statusCode": 400, "message": "Votes cannot be posted.", "error": "Bad Request" }Returned by:Create a vote
401 Unauthorized
Invalid credentials1 endpoint
How to fix: The client id or secret is wrong, or the pair belongs to the other environment: sandbox credentials start with
test_and only work on api.sandbox.charitips.com. Send them as Basic authentication (-u id:secret). Sandbox{ "statusCode": 401, "message": "Invalid credentials", "error": "Unauthorized" }Returned by:Create a token
402 Payment Required
Plan upgrade required17 endpoints
How to fix: Your plan does not include this feature. Upgrade the plan from the dashboard, then retry. Plans and prerequisites
{ "statusCode": 402, "message": "Plan upgrade required" }Returned by:Create a donor widget tokenCreate a donor platform widget tokenUpdate an accountCreate an invitationCreate a child accountCreate a shareable billing linkEnable donor platformDisable a donor platformCreate a donation fiscal receiptFind donor fiscal receiptsFind donor payment methodsCreate a siteand 5 more
Missing payment method3 endpoints
How to fix: The account that pays for the donations (your (parent) account or a child account if they are billed directly) has no payment method. Add one in the dashboard, under Settings > Billing, then retry. On the sandbox, creating a single donation skips this check, but other calls can still return it, like activating a FIXED_AMOUNT campaign that is billed on order. Billing and fiscal receipts
{ "message": "Missing payment method", "code": "MISSING_PAYMENT_METHOD" }Returned by:Activate a campaignCreate a donationCreate a recurring donation
No active subscription found1 endpoint
How to fix: The account has no active monthly subscription, so the campaign cannot be activated. Contact us if you sandbox account has no subscription. Plans and prerequisites
{ "message": "No active subscription found", "code": "NO_ACTIVE_SUBSCRIPTION" }Returned by:Activate a campaign
403 Forbidden
Account closed112 endpoints
How to fix: The account behind these credentials is closed: no token is issued and every call is refused, reads included. Contact Charitips to reopen it. Troubleshooting
{ "message": "Account closed", "code": "ACCOUNT_CLOSED" }Returned by:Create a tokenCreate a user magic linkCreate a donor magic linkCreate an admin widget tokenCreate a donor widget tokenCreate a donor platform widget tokenLogout a userLogout a donorList accountsGet an accountUpdate an accountCreate an invitationand 100 more
Forbidden59 endpoints
How to fix: Your credentials cannot perform this action on this resource. An id from another account never answers 403: it is treated as unknown, with a 404 in the path or a 400
Bad Requestin the body or the query.{ "statusCode": 403, "message": "Forbidden" }Returned by:Create a user magic linkCreate a donor magic linkCreate a donor platform widget tokenLogout a userLogout a donorGet an accountUpdate an accountCreate an invitationCreate a child accountList account reportsCreate a shareable billing linkGet payment methodsand 47 more
Account not validated9 endpoints
How to fix: The account behind your credentials has not finished onboarding. Complete it in the dashboard, or contact us. Troubleshooting
{ "statusCode": 403, "message": "Account not validated", "error": "Forbidden" }Returned by:Create a campaignActivate a campaignCreate a donationClaim a donationCreate a recurring donationClaim a recurring donationCreate a siteCreate a voteCast a vote
Campaign has ended.7 endpoints
How to fix: The campaign is COMPLETE or CANCELED: nothing can be created, claimed or cast on it any more. Use an active campaign. List campaigns
{ "statusCode": 403, "message": "Campaign has ended.", "error": "Forbidden" }Returned by:Activate a campaignCreate a donationClaim a donationCreate a recurring donationClaim a recurring donationCreate a voteCast a vote
Campaign has to be activated first.3 endpoints
How to fix: Activate the campaign once it has its charities selection, then retry. Activate a campaign
{ "statusCode": 403, "message": "Campaign has to be activated first.", "error": "Forbidden" }Returned by:Create a donationCreate a recurring donationCreate a vote
This selection can't be customized3 endpoints
How to fix: The selection belongs to a campaign whose charities cannot be changed. Create a new selection for your campaign. Create a charities selection
{ "statusCode": 403, "message": "This selection can't be customized", "error": "Forbidden" }Returned by:Update a charities selectionAdd a charityRemove a charity
Donation has not been processed yet.2 endpoints
How to fix: The donation is still being processed. Wait for the donation_update webhook, then retry. Webhooks
{ "statusCode": 403, "message": "Donation has not been processed yet.", "error": "Forbidden" }Returned by:Create a donation fiscal receiptGet a donation fiscal receipt
Only recurring donations can be created for recurring campaigns.2 endpoints
How to fix: This campaign has a recurring frequency: create a recurring donation. Create a recurring donation
{ "statusCode": 403, "message": "Only recurring donations can be created for recurring campaigns.", "error": "Forbidden" }Returned by:Create a donationCreate a vote
Parent account is missing a domain2 endpoints
How to fix: A child's subdomain is built under your own subdomain, and your account has none. Contact us to set it up, or give the child account a
customDomaininstead. Donations for your business customers{ "statusCode": 403, "message": "Parent account is missing a domain", "error": "Forbidden" }Returned by:Update an accountCreate a child account
A FIXED_AMOUNT campaign cannot be closed before its first donation or vote.1 endpoint
{ "message": "A FIXED_AMOUNT campaign cannot be closed before its first donation or vote.", "code": "NOTHING_TO_CLOSE" }Returned by:Close a campaign
Account not active1 endpoint
How to fix: The account behind these credentials has not finished onboarding, so no token is issued. Complete the onboarding in the dashboard, or contact us. Troubleshooting
{ "statusCode": 403, "message": "Account not active", "error": "Forbidden" }Returned by:Create a token
API authentication is not allowed for this account1 endpoint
How to fix: The user's account does not list API in its
authSchemes, so no magic link can be made for its users.authSchemesis set when the child account is created; contact us to change it. Create a child account{ "message": "API authentication is not allowed for this account", "code": "API_AUTH_NOT_ALLOWED" }Returned by:Create a user magic link
API authentication is not allowed for this donor platform1 endpoint
How to fix: The donor platform does not list API in its
authSchemes. Disable the donor platform, then enable it again with API inauthSchemes. Enable donor platform{ "message": "API authentication is not allowed for this donor platform", "code": "API_AUTH_NOT_ALLOWED" }Returned by:Create a donor magic link
Billing delegation is not enabled for this account1 endpoint
How to fix: With an API token, the billing link needs billing delegation: the account must be billed to itself (
billedToACCOUNT) and your plan must include delegated billing. Contact us to enable it. Bill your business customers{ "statusCode": 403, "message": "Billing delegation is not enabled for this account", "error": "Forbidden" }Returned by:Create a shareable billing link
Campaign is waiting for payment1 endpoint
How to fix: The fixed budget of the campaign has been invoiced and is not paid yet. Pay the invoice, then activate. List invoices
{ "statusCode": 403, "message": "Campaign is waiting for payment", "error": "Forbidden" }Returned by:Activate a campaign
Can't delete yourself1 endpoint
How to fix: A user session cannot delete its own user: another admin has to do it. An API token is not a user, so it never gets this error. Delete a user
{ "statusCode": 403, "message": "Can't delete yourself", "error": "Forbidden" }Returned by:Delete a user
Cannot delete a featured charities selection1 endpoint
How to fix: This is the selection created with your account, and it cannot be deleted. Change its charities instead. Update a charities selection
{ "statusCode": 403, "message": "Cannot delete a featured charities selection", "error": "Forbidden" }Returned by:Delete a charities selection
Custom domain can't be updated for parent accounts1 endpoint
How to fix: Accounts with account hierarchy can set a custom domain only on their child accounts: the
accountIdin the path is your own account. Use the site endpoints for your own domains. Update a site{ "statusCode": 403, "message": "Custom domain can't be updated for parent accounts", "error": "Forbidden" }Returned by:Update an account
Donation already invoiced1 endpoint
How to fix: The donation is on an invoice and cannot be deleted. Refund it in your own books; delete a donation before it is billed. Delete a donation
{ "statusCode": 403, "message": "Donation already invoiced", "error": "Forbidden" }Returned by:Delete a donation
Donation already paid1 endpoint
How to fix: The invoice carrying this donation has been paid, so it cannot be deleted. Refund it in your own books. Delete a donation
{ "statusCode": 403, "message": "Donation already paid", "error": "Forbidden" }Returned by:Delete a donation
Donation already processed1 endpoint
How to fix: The donation has reached the PROCESSED status and cannot be deleted. Refund it in your own books. Delete a donation
{ "statusCode": 403, "message": "Donation already processed", "error": "Forbidden" }Returned by:Delete a donation
Donation amount can't be updated as it has already been billed.1 endpoint
How to fix: Once billed, the amount is final. Create a new donation for a different amount. Create a donation
{ "statusCode": 403, "message": "Donation amount can't be updated as it has already been billed.", "error": "Forbidden" }Returned by:Update a donation
Donation amount can't be updated as it has already been claimed.1 endpoint
How to fix: Once claimed, the amount is final. Create a new donation for a different amount. Create a donation
{ "statusCode": 403, "message": "Donation amount can't be updated as it has already been claimed.", "error": "Forbidden" }Returned by:Update a donation
Donation amount can't be updated as it has been claimed, billed or its card posted.1 endpoint
{ "statusCode": 403, "message": "Donation amount can't be updated as it has been claimed, billed or its card posted.", "error": "Forbidden" }Returned by:Update a donation
Donation amount can't be updated as its card has already been posted.1 endpoint
{ "statusCode": 403, "message": "Donation amount can't be updated as its card has already been posted.", "error": "Forbidden" }Returned by:Update a donation
Donation card already posted1 endpoint
{ "statusCode": 403, "message": "Donation card already posted", "error": "Forbidden" }Returned by:Delete a donation
Donor is missing required fiscal information.1 endpoint
How to fix: A fiscal receipt needs the donor's first name, last name, street, zip, city and country. Complete the donor, or set withFiscalReceipt to false. Your users give their own money
{ "statusCode": 403, "message": "Donor is missing required fiscal information.", "error": "Forbidden" }Returned by:Create a donation fiscal receipt
Donor platform is not enabled1 endpoint
How to fix: The donor's account has no enabled donor platform. Enable it first, then retry. Enable donor platform
{ "statusCode": 403, "message": "Donor platform is not enabled", "error": "Forbidden" }Returned by:Create a donor magic link
New subdomain site can't be created1 endpoint
How to fix: Accounts with account hierarchy cannot create a subdomain site. Create the site with
customDomain; for a child account, the parent sets its subdomain with update-account. Update an account{ "statusCode": 403, "message": "New subdomain site can't be created", "error": "Forbidden" }Returned by:Create a site
Only avaible for donation created with hasBeenCharged set to true.1 endpoint
How to fix: A donor's fiscal receipt exists only for a donation the donor paid for. Create the donation with
hasBeenChargedset to true, which needs the B2C use case on your account. Your users give their own money{ "statusCode": 403, "message": "Only avaible for donation created with hasBeenCharged set to true.", "error": "Forbidden" }Returned by:Create a donation fiscal receipt
Only avaible for donation created with withFiscalReceipt set to true.1 endpoint
How to fix: The donation was created without a fiscal receipt. Create it with
withFiscalReceiptset to true, or leave the field out on a campaign that issues receipts. Your users give their own money{ "statusCode": 403, "message": "Only avaible for donation created with withFiscalReceipt set to true.", "error": "Forbidden" }Returned by:Create a donation fiscal receipt
Only CUSTOM charities selections can be deleted1 endpoint
How to fix: Only your CUSTOM selections can be deleted. GENERIC selections are shared by Charitips with every account and cannot be deleted. Charities and selections
{ "statusCode": 403, "message": "Only CUSTOM charities selections can be deleted", "error": "Forbidden" }Returned by:Delete a charities selection
Only draft or not billed pending campaigns can be deleted1 endpoint
{ "statusCode": 403, "message": "Only draft or not billed pending campaigns can be deleted", "error": "Forbidden" }Returned by:Delete a campaign
Only pending invites can be deleted1 endpoint
How to fix: The invitation was already accepted or canceled. If it was accepted, delete the user instead. Delete a user
{ "statusCode": 403, "message": "Only pending invites can be deleted", "error": "Forbidden" }Returned by:Delete a user invitation
Recurring donations can only be created for recurring frequency campaigns.1 endpoint
How to fix: Recurring donations need a campaign whose
recurringTypeisFREQUENCY. Read the campaign to check it.recurringTypecannot be set when you create a campaign: it comes from the campaign template. Monthly giving by your users{ "statusCode": 403, "message": "Recurring donations can only be created for recurring frequency campaigns.", "error": "Forbidden" }Returned by:Create a recurring donation
Subdomain can't be updated1 endpoint
How to fix: Accounts with account hierarchycannot change a site's subdomain here;
customDomaincan still be changed. For a child account, the parent sets the subdomain with update-account. Update an account{ "statusCode": 403, "message": "Subdomain can't be updated", "error": "Forbidden" }Returned by:Update a site
Subdomain can't be updated for parent accounts1 endpoint
How to fix: Accounts with account hierarchy can set a subdomain only on their child accounts: the
accountIdin the path is your own account. List child accounts{ "statusCode": 403, "message": "Subdomain can't be updated for parent accounts", "error": "Forbidden" }Returned by:Update an account
The charities of this campaign cannot be customized1 endpoint
How to fix: This campaign keeps the charities it was created with: its
charitiesSelectionIdcannot change. Leave the field out, or create a new campaign with your selection. Create a campaign{ "statusCode": 403, "message": "The charities of this campaign cannot be customized", "error": "Forbidden" }Returned by:Update a campaign
This charity does not support fiscal receipts.1 endpoint
How to fix: Not every charity can issue a receipt. Read
fiscalReceiptsSupporton the charity before promising one: onlyENABLEDcharities issue receipts. Get a charity{ "statusCode": 403, "message": "This charity does not support fiscal receipts.", "error": "Forbidden" }Returned by:Create a donation fiscal receipt
Vote already billed1 endpoint
How to fix: The vote is on an invoice and cannot be deleted. Delete a vote
{ "statusCode": 403, "message": "Vote already billed", "error": "Forbidden" }Returned by:Delete a vote
Vote already sent1 endpoint
How to fix: The vote has been sent to the person and cannot be deleted. Delete a vote
{ "statusCode": 403, "message": "Vote already sent", "error": "Forbidden" }Returned by:Delete a vote
Vote already used1 endpoint
How to fix: The vote has been cast and cannot be deleted. Delete a vote
{ "statusCode": 403, "message": "Vote already used", "error": "Forbidden" }Returned by:Delete a vote
404 Not Found
Not Found71 endpoints
How to fix: No resource with this id on your account and environment. An id that belongs to another account answers 404 too when it is in the path. Ids from the sandbox do not exist in production. Sandbox
{ "statusCode": 404, "message": "Not Found" }Returned by:Create a user magic linkCreate a donor magic linkCreate a donor platform widget tokenLogout a userLogout a donorGet an accountUpdate an accountCreate an invitationCreate a child accountList account reportsCreate a shareable billing linkGet payment methodsand 59 more
Donor not found1 endpoint
How to fix: No donor with this id belongs to the account as a whole: the id is wrong, or the donor was created with a donation, for one campaign only, and cannot sign in to the donor platform. Create the donor with create-donor. Create a donor
{ "statusCode": 404, "message": "Donor not found", "error": "Not Found" }Returned by:Create a donor magic link
Donor platform not found1 endpoint
How to fix: The donor platform is not enabled on this account, so there is nothing to disable. Enable donor platform
{ "statusCode": 404, "message": "Donor platform not found", "error": "Not Found" }Returned by:Disable a donor platform
Fiscal receipt not found.1 endpoint
How to fix: The donation has been processed but has no fiscal receipt yet. Create it with Create a donation fiscal receipt, or wait for the
fiscalreceipt_generatedwebhook. Create a donation fiscal receipt{ "statusCode": 404, "message": "Fiscal receipt not found.", "error": "Not Found" }Returned by:Get a donation fiscal receipt
409 Conflict
Unique constraint failed on uniqueExternalId8 endpoints
How to fix
- Create a donation, Create a donor, Create a recurring donation, Create a vote: A resource with this uniqueExternalId already exists: your previous call succeeded. Fetch it with the list endpoint filtered by uniqueExternalId (donations, votes, donors) instead of creating it again; for recurring donations, keep the id you received at creation. List donations
- Update a donation: Another donation of your account already uses this uniqueExternalId. Pick another id, or leave the field out of the update. List donations
- Update a donor: Another donor of your account already uses this uniqueExternalId. Pick another id, or leave the field out of the update. List donors
- Update a recurring donation: Another recurring donation of your account already uses this uniqueExternalId. Pick another id, or leave the field out of the update. List recurring donations
- Update a vote: Another vote of your account already uses this uniqueExternalId. Pick another id, or leave the field out of the update. List votes
{ "statusCode": 409, "message": "Unique constraint failed on uniqueExternalId" }Returned by:Create a donationUpdate a donationCreate a donorUpdate a donorCreate a recurring donationUpdate a recurring donationCreate a voteUpdate a vote
Slug already used3 endpoints
How to fix: Another campaign of your account already uses this
slug. Pick another one.{ "message": "Slug already used", "code": "slug_already_used" }Returned by:Enable donor platformCreate a campaignUpdate a campaign
Domain already exists1 endpoint
How to fix: This subdomain or custom domain is already used by a Charitips site, possibly one of your own accounts. Pick another one, or detach it from the other site first. Create a child account
{ "message": "Domain already exists", "code": "domain_already_exist" }Returned by:Create a child account
Donation already claimed1 endpoint
How to fix: The donation is no longer waiting for a claim: it is already linked to a charity, by your previous claim or automatically, or it was canceled. Read the donation:
statusandcharityIdtell which. Get a donation{ "statusCode": 409, "message": "Donation already claimed", "error": "Conflict" }Returned by:Claim a donation
Donation already validated1 endpoint
How to fix: The donation is no longer pending: it was validated already, it was done without validation because this campaign does not ask for it, or it was canceled. Read the donation to see its status. Get a donation
{ "statusCode": 409, "message": "Donation already validated", "error": "Conflict" }Returned by:Validate a donation
Invitation already exist1 endpoint
How to fix: A pending invitation already exists for this email on this account. Update it or delete it instead of inviting again. List user invitations
{ "statusCode": 409, "message": "Invitation already exist", "error": "Conflict" }Returned by:Create an invitation
Recurring donation has been canceled1 endpoint
How to fix: A canceled recurring donation cannot be claimed. Create a new one. Create a recurring donation
{ "statusCode": 409, "message": "Recurring donation has been canceled", "error": "Conflict" }Returned by:Claim a recurring donation
User already exist1 endpoint
How to fix: A user with this email already belongs to this account. Update the user instead of inviting them. Update a user
{ "statusCode": 409, "message": "User already exist", "error": "Conflict" }Returned by:Create an invitation
Vote already casted1 endpoint
How to fix: The vote has already been cast: your previous call succeeded. Get a vote
{ "statusCode": 409, "message": "Vote already casted", "error": "Conflict" }Returned by:Cast a vote
Vote already validated1 endpoint
How to fix: The vote is no longer pending: it was validated already, or it was done when cast because this campaign does not ask for validation. Read the vote to see its status. Get a vote
{ "statusCode": 409, "message": "Vote already validated", "error": "Conflict" }Returned by:Validate a vote
429 Too Many Requests
Rate limit exceeded3 endpoints
How to fix: Wait the number of seconds given in the
Retry-Afterheader, then send the call once more. Do not retry in a loop.{ "statusCode": 429, "message": "Rate limit exceeded" }Returned by:Generate an invoices bulk download urlCreate a file generation requestGenerate a fiscal receipts bulk download url